Часы DS1302 (перескакивают секунды)
- Войдите на сайт для отправки комментариев
Чт, 14/04/2016 - 17:55
Суть проблемы:
При отображении времени LCD 1602а
1: при отображении минут не отображается ноль перед числом, то есть время имеет вид 15:6:48 а надо что бы часы выглядили так:15:06:48
2: Секунды глючат. Идет такой ряд: 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 09, 19, 29, 39, 49, 59, 69, 79, 89, 99, 10, 11, 12, 13...50
в сериал мониторе секунды отображаются нормально, а на дисплей... такая засада.
///ВВВВААААЖЖЖЖНО!!!! 3 и 4 пин тут настроены для питания что бы при включении платы в ардуино не нужно было бы провода тянуть. #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <stdio.h> #include <DS1302.h> LiquidCrystal_I2C lcd(0x27, 16, 2); namespace { const int kCePin = 7; // RST подключаем часы const int kIoPin = 6; // DAT подключаем часы const int kSclkPin = 5; // CLK подключаем часы DS1302 rtc(kCePin, kIoPin, kSclkPin); String dayAsString(const Time::Day day) { switch (day) { case Time::kSunday: return "Sunday"; case Time::kMonday: return "Monday"; case Time::kTuesday: return "Tuesday"; case Time::kWednesday: return "Wednesday"; case Time::kThursday: return "Thursday"; case Time::kFriday: return "Friday"; case Time::kSaturday: return "Saturday"; } return "(unknown day)"; } void printTime() { Time t = rtc.time(); const String day = dayAsString(t.day); char buf[50]; snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day.c_str(), t.yr, t.mon, t.date, t.hr, t.min, t.sec); Serial.println(buf); Serial.println(t.sec); lcd.setCursor(7, 0); lcd.print(t.hr); lcd.print(":"); lcd.print(t.min); lcd.print(":"); lcd.print(t.sec); } } void setup() { lcd.begin(); Serial.begin(9600); pinMode (4, OUTPUT); //// тут настраивается питание pinMode (3, OUTPUT); digitalWrite (4,LOW); digitalWrite (3,HIGH); rtc.writeProtect(false); // после установки времени закоменировать rtc.halt(false); // после установки времени закоменировать Time t(2016, 4, 14, 18, 2, 50, Time::kSunday); // после установки времени закоменировать rtc.time(t); // после установки времени закоменировать } void loop() { printTime(); delay(1000); }
https://youtu.be/Nrc6CrsPvdE
Вот как-то так...
Спасибо за идею. Надо было еще добавить else и все заработало. и глюк исчез с секундами.
рабочий код
вдруг кому пригодиться: Метеостанция на ардуино уно.
Показывает: Атмосферное давление, время, температуру окружающей среды, влажность, высота над уровнем моря.
https://youtu.be/S8M23IYgzgk
датчик давления BMP180: VIN-+5В GND-земля SLC- А5 SDA-А4
датчик влажности DHT11: VCC - +5В DATA-13 GND-земля
часы RTC модуль (микросхема DS1302): VCC- +5В GND- земля CLK-7 DAT-8 RST-9