Часы с DS3231 показывают время в 12-часовом формате
- Войдите на сайт для отправки комментариев
Пнд, 23/09/2019 - 20:20
Часы на Ардуине ProMini с RTC DS3231 и синхронизацией от GPS-модуля NEO-6M. Время выводилось на OLED-дисплей в 24-часовом формате.
После экспериментов с библиотекой u8g2 (в поисках других шрифтов) часы стали отображаться в 12-часовом формате.
В монитор порта вывожу время с модуля GPS и RTC, так вот с модуля GPS идет в 24-формате, а после записи в RTC часы преобразуются в 12-часовой.
Зависимость между попыткой установки библиотеки u8g2 и форматом отображения не вижу, скорее всего совпадение.
Есть у кого соображения, как вернуть 24-часовой формат?
Спасибо.
#include <DS3231.h>
#include <OLED_I2C.h>
#include <Wire.h>
#include <TinyGPS.h>
#include <SoftwareSerial.h>
DS3231 Clock;
OLED myOLED(SDA, SCL, 8);
TinyGPS gps;
SoftwareSerial gpsSerial(4, 3);
void gpsdump(TinyGPS &gps);
bool newdata = false;
extern uint8_t MegaNumbers[];
bool Century = false;
bool h12;
bool PM;
int m;
int h;
int s;
void setup()
{
gpsSerial.begin(9600);
Serial.begin(9600);
myOLED.begin();
myOLED.setFont(MegaNumbers);
Wire.begin();
}
void loop() {
bool newdata = false;
unsigned long start = millis();
// Every 5 seconds we print an update
while (millis() - start < 5000)
{
if (gpsSerial.available())
{
char c = gpsSerial.read();
//Serial.print(c); // uncomment to see raw GPS data
if (gps.encode(c))
{
newdata = true;
break; // uncomment to print new data immediately!
}
}
}
if (newdata)
{
gpsdump(gps);
}
// ============================================= Вывод на дисплей ==================================
s = Clock.getSecond();
m = Clock.getMinute();
h = Clock.getHour(h12, PM);
if (h < 10) {
myOLED.printNumI(h, 29, 12);
}
else {
myOLED.printNumI(h, 5, 12);
}
myOLED.print("-", 53, 12);
if (m < 10) {
myOLED.print("0", 77, 12);
myOLED.printNumI(m, 101, 12);
}
else {
myOLED.printNumI(m, 77, 12);
}
myOLED.update();
delay(500);
if (h < 10) {
myOLED.printNumI(h, 29, 12);
}
else {
myOLED.printNumI(h, 5, 12);
}
myOLED.print("/", 53, 12);
if (m < 10) {
myOLED.print("0", 77, 12);
myOLED.printNumI(m, 101, 12);
}
else {
myOLED.printNumI(m, 77, 12);
}
myOLED.update();
delay(200);
}
// ---------------------------------- Данные с GPS и синхронизация ---------------------------------------
void gpsdump(TinyGPS &gps)
{
unsigned long age, date, time, chars;
int year;
byte month, day, hour, minute, second, hundredths;
gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
Serial.print(h); Serial.print(":"); Serial.println(m);
h = hour + 3;
if (h > 23)
{
h = h - 24;
}
Clock.setHour(h);
Clock.setMinute(minute);
Clock.setSecond(second);
}
А файл DS3231.h хотя бы открывали?
А если открывали, то неужели строки
void setClockMode(bool h12); // Set 12/24h mode. True is 12-h, false is 24-hour.никаких мыслей не навеяли?
А зачем напрягаться, если на блюдечке поднесут всё?
А файл DS3231.h хотя бы открывали?
А если открывали, то неужели строки
void setClockMode(bool h12); // Set 12/24h mode. True is 12-h, false is 24-hour.никаких мыслей не навеяли?
Нет, до вашего ответа не открывал.
После прочтения пришли мысли, что должно быть: "bool h12=false". Но где это должно быть не знаю. В строку 015 добавлял - не помогло.
Подскажите, если не трудно.
После прочтения пришли мысли, что должно быть: "bool h12=false". Но где это должно быть не знаю. В строку 015 добавлял - не помогло.
Подскажите, если не трудно.
Там должно быть вовсе не то, о чём Вы подумали.
Такие вещи я не подсказываю. Могу подсказать книжку, которую Вам следует изучить. От этого Вам была бы реальная польза. Вы ведь не понимаете ни строки в том, что написано. Изучить книжку Вам будет гораздо полезнее, что если Вам сейчас напишут что куда вставить и Вы сделаете это по-прежнему ни буквы не понимая.