Wyświetlacz OLED + RTC DS1307

oled arduino nano

Już jakis czas temu przekonałem się, że RTC DS1302 nie działa jak powinien, więc postanowiłem zmienić moduł zegara na RTC DS1307 w połączeniu z wyświetlaczem OLED i jak sie okazało, te dwa komponenty super ze soba współpracują.

Oba moduły sa proste do połączenia, działaja wspólnie bez konfliktów na I2C, do tego biblioteki sa ogólno dostępne (RTC) i (OLED)

Prezentowany na zdjęciu poniżej przykład jest bardziej zaawansowany, bo czasem reguluję świecenie diód LED (stąd widoczny tranzystor na zdjęciu, nie schemacie) ale istota układu pozostaje niezmieniona. Polecam

oledrtc schema

Przykład programu OLED + DS1307 dla Arduino

#include "U8glib.h"
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
#include 
#include "RTClib.h"
#include 
RTC_DS1307 rtc;


void setup() {

    Serial.begin(115200);
 
    if (! rtc.begin()) {
      Serial.println("noRTC");
      while (1);
    }
  
    if (! rtc.isrunning()) {
      Serial.println("RTC dead");
    }
  
    //odkomentuj aby ustawić date i godzine
    //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    //rtc.adjust(DateTime(2019, 8, 27, 17, 55, 00));
    //rtc.adjust(DateTime(2019, 8, 17, 11, 34, 50));

}

void loop() {

    modeButton();
    selectorButton();
    increaseButton();
 
    DateTime now = rtc.now();
  
    u8g.firstPage();
    do {
      draw(now);
    } while ( u8g.nextPage() );

}

void draw(DateTime now) {

    u8g.setFont(u8g_font_unifont);
    
    u8g.drawStr(0, 12, "Godzina");
    enum {BufSize = 9};
    char buf[BufSize];
    snprintf (buf, BufSize, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
    u8g.drawStr(32, 28, buf);
  
    enum {BufSize2 = 11};
    char buf2[BufSize2];
    snprintf (buf2, BufSize2, "%02d/%02d/%d", now.day(), now.month(), now.year());
    u8g.drawStr(23, 48, buf2);

}

Opublikowano: 28 sierpnia, 2019 przez Pan z Pogodna

Leave a Reply