20 static const uint8_t pwmtable[32] PROGMEM = {
21 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 10, 11, 13, 16, 19, 23,
22 27, 32, 38, 45, 54, 64, 76, 91, 108, 128, 152, 181, 215, 255
24 static const uint8_t zctable[45] PROGMEM = {
25 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
27 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 58, 75
29 template<u
int8_t STEPS=200,
bool LINEAR=false,
bool INVERSE=false,
class PINTYPE=ArduinoPins>
36 void init(uint8_t p) {
40 void set(uint8_t value) {
44 pwm = map(value, 0, STEPS, 255, 0);
46 pwm = map(value, 0, STEPS, 0, 255);
50 uint8_t offset = value*31/STEPS;
51 pwm = pgm_read_word (& pwmtable[offset]);
54 PINTYPE::setPWM(pin,pwm);
57 template<u
int8_t STEPS=200>
64 void init(uint8_t p) {
66 phaseCut.init(outpin);
69 void set(
double value){
72 if (!phaseCut.isrunning()){
76 uint8_t offset = (STEPS - value)*44/STEPS;
78 uint8_t offset = value*44/STEPS;
80 pwm = pgm_read_word (& zctable[offset]);
81 phaseCut.SetDimValue(pwm);
90 #ifdef ARDUINO_ARCH_STM32F1
92 template<u
int8_t STEPS=200,u
int16_t FREQU=65535,
class PINTYPE=ArduinoPins>
98 R = (STEPS * log10(2))/(log10(FREQU));
102 void init(uint8_t p) {
104 PINTYPE::setPWM(pin);
108 void set(uint8_t value) {
110 if ( value == STEPS) {
113 else if (value > 0) {
118 duty = pow(1.28,(value/13.0)+29.65)-1300;
123 PINTYPE::setPWM(pin,duty);