Диммер, библиотека CyberLib.h и LCD диспелй

Владимир1971

✩✩✩✩✩✩✩
17 Окт 2020
23
0
Проблема при подключении LCD дисплея с библиотекой LiquidCrystal_I2C.h
Скетч Диммера AlexGyver при подключении библиотеки LiquidCrystal_I2C.h совместно с CyberLib.h дисплей отказывается работать.
Если в в скетче закомментировать строки отвечающие за запуск таймера то дисплей работает, но естественно перестаёт работать диммер.
Может кто знает как обойти данную проблему? Скетч ниже
/*
Диммер переменки на Arduino. Симистор через оптопару
подключен к 4 пину, детектор нуля ко 2 пину.
Переменная Dimmer - величина диммирования, от 0 до 255
В этом коде на пин А0 подключен потенциометр для управления яркостью
Также можно вводить число для переменной Dimmer через
монитор порта, для этого в лупе надо раскомментировать код
*/
#include <Wire.h>
#include <CyberLib.h>
#include <LiquidCrystal_I2C.h>
#define dimPin 4
#define zeroPin 2
#include <CyberLib.h> // шустрая библиотека для таймера
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
volatile int tic, Dimmer;

void setup() {
// initialize the lcd
lcd.init();
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(1,0);
Serial.begin(9600);
pinMode(dimPin, OUTPUT);
digitalWrite(dimPin, 0);
pinMode(zeroPin, INPUT); // настраиваем порт на вход для отслеживания прохождения сигнала через ноль
attachInterrupt(0, detect_up, FALLING); // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень

StartTimer1(timer_interrupt, 40); // время для одного разряда ШИМ
StopTimer1(); // остановить таймер

Serial.println("Start");
}

void loop()
lcd.setCursor(1,0);
lcd.print(Dimmer);
// раскомментировать для управления потенциометром (аналоговый А0)
Dimmer = map(analogRead(0), 0, 1023, 240, 0);
}

//----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ--------------------------
void timer_interrupt() {
// прерывания таймера срабатывают каждые 40 мкс

tic++; // счетчик
if (tic > Dimmer) // если настало время включать ток
digitalWrite(dimPin, 1); // врубить ток

}

void detect_up() { // обработка внешнего прерывания на пересекание нуля снизу
tic = 0; // обнулить счетчик
ResumeTimer1(); // перезапустить таймер
attachInterrupt(0, detect_down, RISING); // перенастроить прерывание
}

void detect_down() { // обработка внешнего прерывания на пересекание нуля сверху
tic = 0; // обнулить счетчик
StopTimer1(); // остановить таймер
digitalWrite(dimPin, 0); // вырубить ток
attachInterrupt(0, detect_up, FALLING); // перенастроить прерывание
}
//----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ--------------------------
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,698
473
при подключении библиотеки LiquidCrystal_I2C.h совместно с CyberLib.h дисплей отказывается работать.
коллизия здесь. Библиотеки дерутся за один таймер. Управление яркостью подсветки уберите, и должно заработать.
 

Nikanor

★★✩✩✩✩✩
1 Окт 2020
178
51
откройте тайну в необходимости вам библиотеки CyberLib ?
 

Владимир1971

✩✩✩✩✩✩✩
17 Окт 2020
23
0
Пытаюсь сделать с обратной связью по напряжению. Нужно получить стабилизацию напряжения при скачках напряжения сети. Если например выставлено на выходе 110 вольт при сетевом 220 и если сетевое упало до 200 то на выходе должно остаться 110. С диммером по задержке по delay не получается, пауза тормозит весь скетч и измерения напряжения идёт убого.