Рекомендую использовать новую версию полноценного многоканального Dimmer
В процессе проб и ошибок нарисовали 100% рабочую схему и нормально работающий скетч. В процессе обсуждения выяснилось что нельзя использовать в Dimmer оптроны MOC30xx с детектором нуля
Всем спасибо за помощь.
Скэтч вот этот:
PHP код:
#include <avr/delay.h>
int AC_pin = 10; // выход для симистора
volatile uint16_t dim;
uint8_t dimmer=0;// уровень димирования (0-255) 0 = max, 255 = min
void setup()
{
pinMode(AC_pin, OUTPUT);
attachInterrupt(0, FrontUp, RISING); //прерывание по изменению уровня с низкого на высокий
}
// Функция обработки прерывания на подъем
void FrontUp()
{
detachInterrupt(0);
_delay_us(dim+1000); // отсекаем лишнее
digitalWrite(AC_pin, HIGH); // включить симистор
_delay_us(20); // короткая пауза, чтобы обеспечить включение симистора
digitalWrite(AC_pin, LOW); // выключение симистора(он выключится когда полупериод достигнет нуля)
attachInterrupt(0, FrontDown, FALLING);
}
// Функция обработки прерывания на спад
void FrontDown()
{
detachInterrupt(0);
_delay_us(dim); // отсекаем лишнее
digitalWrite(AC_pin, HIGH); // включить симистор
_delay_us(20); // короткая пауза, чтобы обеспечить включение симистора
digitalWrite(AC_pin, LOW); // выключение симистора(он выключится
attachInterrupt(0, FrontUp, RISING);
}
void loop()
{
if(dimmer < 255) dimmer++; else dimmer=0; // пример уменьшения яркости лампы
dim=33*dimmer;
delay(50);
}