Untitled
unknown
plain_text
3 years ago
1.6 kB
4
Indexable
void ICACHE_RAM_ATTR isr(); class TimerUs { public: bool ready() { if (state && micros() - tmr >= prd) { tmr = micros(); return true; } return false; } void stop() { state = false; } void restart() { tmr = micros(); state = true; } void setPeriod(uint32_t period) { restart(); prd = period; if (prd == 0) prd++; } private: bool state = 0; uint32_t tmr = 0, prd = 0; }; TimerUs timer; #define D_PIN 16 #define ZERO_CROSS 5 #include <GyverDimmer.h> Dimmer<D_PIN> dim; // указать пин диммера //Dimmer<D_PIN> dim(60); // можно указать 60 Гц (умолч 50) void setup() { USE_SERIAL.begin(9600); USE_SERIAL.println("LOAD?"); // завести прерывание на детектор нуля attachInterrupt(ZERO_CROSS, isr, RISING); // D2 == 0 USE_SERIAL.println("LOAD1"); } void isr() { // вызывать в прерывании детектора нуля // если tickZero() - true - нужно перезапустить таймер с периодом getPeriod() if (dim.tickZero()) timer.setPeriod(dim.getPeriod()); else timer.restart(); // иначе перезапустить со старым } void loop() { USE_SERIAL.println("LOAD2"); // в "прерывании" таймера if (timer.ready()) { dim.tickTimer(); // вызвать tickTimer() timer.stop(); // остановить таймер } dim.write(analogRead(A0) / 4); // принимает 0-255 USE_SERIAL.println("LOAD3"); }
Editor is loading...