Не обновляется время срабатывания таймера

lostlogin
Offline
Зарегистрирован: 20.12.2016

у меня запара такая, когда обновляю время срабатывания таймера с помощью стороки:

if (14 == hour &&   07 == minute &&  0 == second) timerReset(); 

новое время на экран не выводится, остается старое, пока reset не нажмешь.

Что можно прописать, чтобы это исправить?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Прописать можно пилюль.

Вы хотите что бы местные экстрасенсы по одной строчке кода, поняли, что там происходит и чего вы хотите в итоге ?

lostlogin
Offline
Зарегистрирован: 20.12.2016

здесь сбрасывается рассписание и управляется реле

void loop()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;  
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  
  lcdPrint();
  
  if (14 == hour &&  07 == minute &&  0 == second) timerReset(); 
     
  // обработка кнопок
  if (key() == 1) menu(); 
  else if (key() == 3) digitalWrite(outPin, HIGH);
  else if (key() == 4) digitalWrite(outPin, LOW);

  // сравниваем время и управляем выходом// 
  if (setHorClockOff == hour && setMinClockOff == minute) digitalWrite(outPin, LOW);
  if (setHorClockOn == hour && setMinClockOn == minute) digitalWrite(outPin, HIGH); 
      

} 

здесь задается новое рассписание и далее выводится инфа на экран:

void timerReset(){    
  EEPROM.write(0, 20); //часы вкл
  EEPROM.write(1, random(0, 59)); //минуты вкл
  EEPROM.write(3, random(0, 2)); //часы выкл
  EEPROM.write(4, random(30, 59)); //минуты выкл
  delay(1000); // нужно подождать, иначе функция вызавиться повторно
}

  void lcdPrint(){
  
 byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;  
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  
  lcd.clear();
    lcd.setCursor(0, 0);
     if (hour < 10) lcd.print("0"); 
    lcd.print(hour); 
    lcd.print(":");
     if (minute < 10) lcd.print("0"); 
    lcd.print(minute);
//  lcd.print(":");
//   if (second < 10) lcd.print("0");
//  lcd.print(second);
//    lcd.setCursor(8, 0); 
//    lcd.print("    ");  
    lcd.setCursor(0, 1);
     if (dayOfMonth < 10) lcd.print("0");
    lcd.print(dayOfMonth);
    lcd.print("/");
     if (month < 10) lcd.print("0");
    lcd.print(month);
    lcd.print("/");
     if (year < 10) lcd.print("0");
    lcd.print(year);
     //
    lcd.setCursor(11, 0);
     if (setHorClockOn < 10) lcd.print("0"); 
    lcd.print(setHorClockOn); 
    lcd.print(":");
     if (setMinClockOn < 10) lcd.print("0"); 
    lcd.print(setMinClockOn);
    
    lcd.setCursor(11, 1);
     if (setHorClockOff < 10) lcd.print("0"); 
    lcd.print(setHorClockOff); 
    lcd.print(":");
     if (setMinClockOff < 10) lcd.print("0"); 
    lcd.print(setMinClockOff);      
   
    lcd.setCursor(7, 0);
    if (digitalRead(outPin)) lcd.print("ON ");
    else lcd.print("Off");
    
    delay(200); 
}
 

 

okta
Offline
Зарегистрирован: 10.01.2015

Из этого кода не понятно где setHorClockOff/On и setMinClockOff/On устанавливаются. Судя по всему, надо либо сначала их задать в timerReset(), а потом уже в EEPROM их записать. Ну либо как у вас, сначала записать, а потом добавить чтение в переменные.

lostlogin
Offline
Зарегистрирован: 20.12.2016

да, помогло! Большое спасибо)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

lostlogin пишет:

if (14 == hour && 07 == minute && 0 == second) timerReset(); 

Хорошо, что хоть 07, а не, скажем 011.

Вы всегда так пишете?

А разницу между 7 и 07 понимаете? Ну, или между 17 и 017 - так интереснее?