Answer the question
In order to leave comments, you need to log in
Problem with Arduino timer, why not working?
I can't figure out why the code doesn't work
Excerpts related to the question:
There is a small project, the relays are switched on by a timer. Decided to change quickly.
Make it so that after turning on the arduino, the relay turns on immediately for a given time, after which it turns on again at a given interval for a given time and so on in a cycle.
It seems to have done everything very simply, but it doesn’t work, it doesn’t turn on, I can’t understand why.
const long DurationCh_2 = 120; //ДЛИТЕЛЬНОСТЬ срабатывания реле
const long StartViaCh_2 = 200; //Включится через
int Xer = 0;
int StartRelCn_2;
void loop() // ПРОГРАММЫй безусловный ЦИКЛ
{
DateTime myTime = RTC.now(); //Читаем данные времени из RTC
long utime = myTime.unixtime(); //сохраняем время в формате UNIX
utime %= 86400; //Сохраняем в переменной остаток деления на кол-во секнд в сутках,
//Это дает количество секунд с начала текущих суток
while(Xer < 1) //Должно выполнятся один раз
{
Xer ++;
StartRelCn_2 = utime; //Присвоить текущее время
}
if ((utime >= StartRelCn_2) &&
(utime < (StartRelCn_2+DurationCh_2)))
{
digitalWrite(RelayChn2,LOW); //Устанавливаем на 2 входе релейного модуля НИЗКИЙ уровень - реле срабатывает
StartRelCn_2 = StartRelCn_2 + StartViaCh_2; // Повторно включаем через заданный интервал времени
}
else
{
digitalWrite(RelayChn2,HIGH); //Устанавливаем на 2 входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}
Answer the question
In order to leave comments, you need to log in
I figured it out myself, it turned out to be in "long", that is, I had to specify a variable in this "format"
Since I have time in it
void loop() // ПРОГРАММЫй безусловный ЦИКЛ
{
long utime = myTime.unixtime(); //сохраняем время в формате UNIX
int long DurationCh_2 = 120; //ДЛИТЕЛЬНОСТЬ срабатывания реле
int long StartViaCh_2 = 200; //Включится через
int Xer = 0;
int long StartRelCn_2;
Return everything as it was, and make a one-time inclusion in the initialization loop :)
Xer + 1; will not do anything with the Xer variable. This line will calculate the result, but will not assign it anywhere.
Xer++; or Xer += 1; try for fun. I didn't get into the logic.)
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question