пока кроме моего блока в программе ничего нет, то все работает. Если добавить что угодно, например блок для DHT22, то работать перестает.
Это код (рабочий), из которого я сделал пользовательский блок:
СпойлерПоказать
Код: Выделить всё
#include <TimerOne.h>
volatile uint8_t tic ;
uint8_t data;
int Dimmer; //количество диммеров минус 1
void setup() {
//*********************Настраиваем порты на выход**********************
pinMode (3, OUTPUT);
digitalWrite(3, LOW); // гасим оответствующий пин
Dimmer = 10; //выставим яркость соответствующего диммера в 0
//CHANGE – прерывание вызывается при любом изменении значения на входе;
//RISING – вызов прерывания при изменении уровня напряжения с низкого (Low) на высокий(HIGH)
//FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкий (Low)
attachInterrupt(0, detect_up, LOW); // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
Timer1.initialize(40); // Интервал срабатывания таймера в мкс
Timer1.attachInterrupt(halfcycle); //будет вызыватся каждый раз при отсчете заданого времени
Timer1.stop();
Serial.begin(115200); //инициализация порта
randomSeed(analogRead(0)); //псевдогенератор случайных чисел будет использовать шумы на аналог пин 0
}
//********************обработчики прерываний*******************************
void halfcycle() //прерывания таймера
{
tic--; //счетчик
if (Dimmer > tic )
digitalWrite(3, HIGH); //управляем выходом (откроем семистор)
}
void detect_up() // обработка внешнего прерывания. Сработает по переднему фронту
{
tic = 200; //обнулить счетчик
Timer1.resume(); //запустить таймер
attachInterrupt(0, detect_down, HIGH); //перепрограммировать прерывание на другой обработчик
}
void detect_down() // обработка внешнего прерывания. Сработает по заднему фронту
{
Timer1.stop(); //остановить таймер
digitalWrite(3, LOW);
tic = 200; //обнулить счетчик
attachInterrupt(0, detect_up, LOW); //перепрограммировать прерывание на другой обработчик
}
void loop() {
{
//********помигаем первым диммером рандомно********
Dimmer = random(10, 200);
//Задержка для более плавного эффекта мерцания
delay(100);
}
}