Часы с LCD экраном
- Войдите на сайт для отправки комментариев
Сб, 08/11/2014 - 22:37
Здравствуйте. Изучаю программирование Arduino. Пытаюсь сделать часы.
Вроде бы всё работает но есть непонятные моменты.
byte H(long unsigned Time) //Подсчёт часов { static byte h; h=Time/3600000; if (h>23) {while (h>23) h=h-23;} return h; } byte Min (long unsigned Time) // Подсчёт минут { static byte Min; Min=Time/60000; if (Min>59) {while(Min>59) Min=Min-59;} return Min; } byte sec (long unsigned Time) // Подсчёт секунд { static byte sec; sec=Time/1000; if (sec>59) {while (sec>59) sec=sec-59;} return sec; } void LcdPrintTime(byte h, byte Min, byte sec) // Вывод времени { // на LCD экран lcd.setCursor(0,1); lcd.print("Time "); lcd.print(h); lcd.print(":"); lcd.print(Min); lcd.print(":"); lcd.print(sec); } void CLS(byte S) // стираю вторую строчку, чтобы когда секунды пойдут на { // второй круг, на конце строчки не оставалась 9-ка if (S==59) { lcd.setCursor(0,1); lcd.print(" "); } } void loop() { LcdPrintTime(H( millis() ),Min( millis() ),sec( millis() ) ); CLS(sec( millis() ) ); }
Проблема в том, что минуты изменяются не при переходе секунд через 59-0, а когда попало. И функция CLS иногда не срабатывает и 9-ка на конце строки прилепает.
if (Min>59) {while(Min>59) Min=Min-59;}
Это что такое и зачем?
Вот пример из библиотеки rtc ,которая мне понравилась, тут намного проще преобразование.
вообще if (Min>59) {while(Min>59) Min=Min-59;}
должно быть if (Min>59) {Min=Min % 60;} // Остаток от деления на 60
Вот eще пример получения времени из количества секунд - его можно применить даже в ваших функциях