-
Notifications
You must be signed in to change notification settings - Fork 0
/
PWMControl.h
40 lines (37 loc) · 1.16 KB
/
PWMControl.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#ifndef PWMCONTROL_H
#define PWMCONTROL_H
#include <Arduino.h>
enum {OFF, ON, SINE, SQUARE};
class PWMControl
{
public:
PWMControl(int pwmPin);
PWMControl();
void init(int pwmPin){_pin = pwmPin;}
void sine(uint8_t offset, uint8_t duration, uint8_t amplitude, uint8_t period){
set(SINE, offset, duration, amplitude, period);
}
void square(uint8_t offset, uint8_t duration, uint8_t amplitude, uint8_t period){
set(SQUARE, offset, duration, amplitude, period);
}
void off(){ set(OFF, 0,0,0,0); }
void on(uint8_t amplitude){ set(ON, 0, 0, amplitude, 0); }
void set(uint8_t shape, uint8_t offset, uint8_t duration, uint8_t amplitude, uint8_t period);
void update();
bool isOff(){return _shape == OFF;}
void setPin(int pwmPin){_pin = pwmPin;}
private:
int pin;
uint8_t _shape; // sine | square | on |off
uint8_t _offset; // 0..255 * (period / 256)
uint8_t _duration; // 0..255 * 0.1sec (max 25.5 sec)
uint8_t _amplitude; // 0..255
uint8_t _period; // 0..255 * 0.02 sec (max 5.12 sec)
uint8_t _shift; // (0..255 - 128 ) / 256
unsigned long _start;
int _pin;
void writeSquare();
void writeSine();
double renderSine();
};
#endif