Не получается вывести переменные с модуля часов ds1302 на OLED 128х64

Hubert_J_Farnsworth
Offline
Зарегистрирован: 13.11.2017

Всем привет! Пытаюсь сделать часы на Ардуино Uno и модуле ds1302. Пишу скетч, переменные времени прекрасно выводятся в Serial, а вот при выводе на дисплей, получаем кракозябры, какие-то случайные цифры и буквы! Что я делаю не так?

#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1302, 2, 3, 4);
#include <OLED_I2C.h>
OLED  myOLED(SDA, SCL, 8);
extern uint8_t SmallFont[];
extern uint8_t MegaNumbers[];

void setup() {
  delay(300);
  Serial.begin(9600);
  time.begin();
  myOLED.begin();
  myOLED.setFont(MegaNumbers);
  time.gettime();
}
void loop() {
  if (millis() % 1000 == 0) { // если прошла 1 секунда
    myOLED.setFont(SmallFont);
    myOLED.print(time.Hours, LEFT, 13);  // Переменная часов на OLED выводится криво,
    Serial.println (time.Hours);         // а в Serial выводится правильно
    myOLED.print(time.minutes, RIGHT, 13);
    Serial.println (time.minutes);
    myOLED.setFont(SmallFont);
    myOLED.print(time.gettime("d-m-Y"), LEFT, 2);
    myOLED.print(time.seconds, RIGHT, 2); /
    myOLED.update();
  }
}

 

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

А Вы что-нибудь, безо всяких часов можете выести на этот экран?

Для начала забудьте про часы и научитесь просто выводить на экран число 321. Как научитесь,сделайте тоже самое, но с переменной.

После этого никаких вопросов про часы у Вас уже не останется.

Hubert_J_Farnsworth
Offline
Зарегистрирован: 13.11.2017

ЕвгенийП пишет:

А Вы что-нибудь, безо всяких часов можете выести на этот экран?

Для начала забудьте про часы и научитесь просто выводить на экран число 321. Как научитесь,сделайте тоже самое, но с переменной.

После этого никаких вопросов про часы у Вас уже не останется.

Спасибо за совет, мысля пошла! Сделал с помощью объекта класса String так:

#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1302, 2, 3, 4);
#include <OLED_I2C.h>
OLED  myOLED(SDA, SCL, 8);
extern uint8_t SmallFont[];
extern uint8_t MegaNumbers[];

void setup() {
  delay(300);
  Serial.begin(9600);
  time.begin();
  myOLED.begin();
  myOLED.setFont(MegaNumbers);
  time.gettime();
}
void loop() {
  if (millis() % 1000 == 0) { // если прошла 1 секунда
    myOLED.setFont(MegaNumbers);
    myOLED.print(String (time.Hours), LEFT, 13); 
    myOLED.print(String (time.minutes), RIGHT, 13);
    myOLED.setFont(SmallFont);
    myOLED.print(time.gettime("d-m-Y"), LEFT, 2);
    myOLED.print(String (time.seconds), RIGHT, 2); 
    myOLED.update();
  }
  }

Это правильно?

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

Ну, если правильно показывает, значит правильно.