79 lines
2.5 KiB
Arduino
79 lines
2.5 KiB
Arduino
|
/*
|
|||
|
Данный скетч позволяет запустить димер в режиме FADE для платы ESP8266
|
|||
|
- 2сек диммер плавно увеличивает мощность
|
|||
|
- 2сек диммер плавно уменьшает мощность
|
|||
|
|
|||
|
Для того чтобы успешно прошить даный скетч Вам нужно:
|
|||
|
- скачать дистрибутив для работу с ESP8266 в Arduino IDE
|
|||
|
- скачать библиоеки Ticker.h
|
|||
|
- подключить димер на соответствующие пины или назначить свои
|
|||
|
|
|||
|
При работе с ESP8266 подключать библиотеку AC_Dimmer и использовать ее функции не нужно
|
|||
|
Достаточно прошить лишь данный пример
|
|||
|
Для управления можностью используется переменная val (смотрите ниже)
|
|||
|
|
|||
|
*/
|
|||
|
|
|||
|
#include <ESP8266WiFi.h>
|
|||
|
#include <Ticker.h>
|
|||
|
|
|||
|
Ticker blinker;
|
|||
|
|
|||
|
const byte interruptPin = D7; // пин диммера М2
|
|||
|
const byte dimPin = D5; // пин диммера М1
|
|||
|
int val = 0; // переменная, которая определяет мощность от 0 до 10000
|
|||
|
|
|||
|
int power = 0;
|
|||
|
int rise = 0;
|
|||
|
|
|||
|
void ICACHE_RAM_ATTR handleInterrupt();
|
|||
|
|
|||
|
void ICACHE_RAM_ATTR onTimerISR() // обработчик прерывания таймера
|
|||
|
{
|
|||
|
digitalWrite(dimPin, HIGH);
|
|||
|
delayMicroseconds(40);
|
|||
|
digitalWrite(dimPin, LOW);
|
|||
|
|
|||
|
timer1_write(50000);//10мс
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void handleInterrupt() // обработчик прерывания по фронту (от пина детекции фазы димера)
|
|||
|
{
|
|||
|
power = 49000 - 4.785*val;
|
|||
|
timer1_write(power);
|
|||
|
|
|||
|
if(val < 10000 && rise == 1) val = val + 100; // плавное наростание
|
|||
|
else rise = 0;
|
|||
|
|
|||
|
if(val > 0 && rise == 0) val = val - 100; // плавное угасание
|
|||
|
else rise = 1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
void setup()
|
|||
|
{
|
|||
|
|
|||
|
pinMode(interruptPin, INPUT_PULLUP);
|
|||
|
pinMode(dimPin, OUTPUT);
|
|||
|
|
|||
|
attachInterrupt(digitalPinToInterrupt(interruptPin), handleInterrupt, RISING);
|
|||
|
|
|||
|
timer1_attachInterrupt(onTimerISR);
|
|||
|
timer1_enable(TIM_DIV16, TIM_EDGE, TIM_SINGLE);
|
|||
|
|
|||
|
// здесь можно писать свой код (setup())
|
|||
|
//
|
|||
|
// здесь можно писать свой код (setup())
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void loop()
|
|||
|
{
|
|||
|
// здесь можно писать свой код
|
|||
|
//
|
|||
|
// здесь можно писать свой код
|
|||
|
}
|
|||
|
|