Часы с 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 ,которая мне понравилась, тут намного проще преобразование.
DateTime::DateTime (uint32_t t) { // общее количество секунд ss = t % 60; // получаем секунды t /= 60; //находим общее количество минут mm = t % 60; // получаем минуты t /= 60; // находим общее количество часов hh = t % 24; // получаем минуты uint16_t days = t / 24; // находим количество дней }вообще if (Min>59) {while(Min>59) Min=Min-59;}
должно быть if (Min>59) {Min=Min % 60;} // Остаток от деления на 60
Вот eще пример получения времени из количества секунд - его можно применить даже в ваших функциях