Вот фрагменты кода, чтоб было понятно, какие ресурсы используются. Код (C++): #include "DS1307RTC.h" #include <OneWire.h> #include <DS18B20.h> #include <iarduino_DHT.h> #include <LiquidCrystal_I2C.h> void Interupt50Hz() // прерывание 50герц, оба полупериода { b50Hz = 1; // delayMicroseconds(5000); // если раскомментировать эти 3 строчки и менять значение задержки // digitalWrite( PIN_SVET, HIGH ); // то меняется яркость - т.е. управление работает // digitalWrite( PIN_SVET, LOW ); if( !countDelaySvet ) countDelaySvet = 25; // задержка } void timerInterupt() { if( b50Hz ) { b50Hz = 0; if( countDelaySvet ) { countDelaySvet--; if( !countDelaySvet ) { digitalWrite( PIN_SVET, HIGH ); digitalWrite( PIN_SVET, LOW ); } } } } Теперь самое интересное. Какую использовать библиотеку, чтобы не конфликтовала с вышеуказанными подключенными библиотеками, чтобы вызывать timerInterupt()? Прерывание нужно в микросекундах. Ядро оба восьмибитных таймера использует?
Уже вляпался... Есть вариант использовать библиотеку CyberLib, исправив под нее все библиотеки. Но это время... Как все хорошо начиналось: подключай готовые библиотеки и собирай все в кучу... а нет, например: "timer-api.h" + "LiquidCrystal_I2C.h" - в итоге ничего не работает...
Ну...со временем наработаешь свои библиотеки и поймешь, что ковыряться в чужой пииии совсем не царское дело. У меня вся работа с таймерами происходит в main.c. Поэтому в файлах-драйверах их нет. Это упрощает перенос наработок между проектами. А, ну еще вверху файла всегда пишу дату модификации, чтобы понимать, где последняя версия лежит.
На указанной странице есть ссылка на диммер на меге, чем он не понравился? Там используется TimerOne.h
Есть, рабочий код, но как написан??? Мне таймеры нужны, а там таймер чисто под диммер отдан, да и еще в придачу переназначение прерывания, отключение-включение таймера...зачем??? Код писал человек, далекий от понимания как работает симистор!
Так если Вы все понимаете, поправьте код как нужно, там кода то два экрана. Кто Вам мешает таймер настроить как нужно, и в обработчике таймера еще что-то делать? millis() сидит на нулевом таймере.
Вообще-то вопрос у меня по таймерам, а код я уже переписал и походу пока конфликтов библиотек не наблюдается!
Я же написал, millis() сидит на нулевом, первый можно использовать. Но он может быть задействован и в библиотеках. Но, в указанном, в первом сообщении списке, на первый взгляд, он не нужен. Насколько я помню, на небольших уровнях яркости, при таком подходе, будет видно дрожание яркости. Это связано, в первую очередь, с болтанием в пределах одного тика таймера. В коде (через TimerOne) нет сброса предделителей таймера. В свое время я отлаживался под Leonardo, потом перенес диммер на AtTiny. На Tiny с аппаратным I2C он работает супер стабильно! Двухканальные диммеры подключены к ESP8266 по I2C, ESP принимает команды и передает состояние на OpenHAB по mqtt, и кидает на диммер необходимую мощность. Диммер просто диммирует по заданной от 0% до 100% мощности. Кроме выключателя - диммера, на ESP заведены датчики температуры, счетчики воды PIR, герконы на дверях и т.д. Часть через расширители PCF8574.