LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
SoM / SBC

[PROJEKT] Zegarek elektroniczny na Arduino z modułem RTC oraz wyświetlaczem OLED

Teraz przejdę do analizy kodu na platformę Arduino. Pełen kod programu dostępny jest sekcji Do pobrania.

Na początku programu dołączone są wszystkie niezbędne biblioteki potrzebne do działania poszczególnych modułów.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "RTClib.h"

W dalszej części kodu odbywa się konfiguracja oraz inicjalizacja działania wyświetlacza OLED oraz modułu z zegarem czasu rzeczywistego.

// Konfiguracja wyświetlacz OLED 
#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13

Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);


#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

// Konfiguracja RTC
RTC_DS1307 rtc;

W funkcji konfiguracyjnej, sprawdzane jest czy moduł RTC jest podłączony oraz czy działa poprawnie. Ustawiana jest również data oraz godzina (wartość pobierana z systemu, może być również ustawiana ręcznie):

void setup() {
 
  Serial.begin(9600);
  
    if (! rtc.begin()) {
    Serial.println("Nie znaleziono modułu RTC!");
    while (1);
  }

   if (! rtc.isrunning()) {
    Serial.println("RTC nie jest uruchomiony!");
    // following line sets the RTC to the date & time this sketch was compiled
     rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
  
  display.begin(SSD1306_SWITCHCAPVCC);


}

W pętli głównej programu tworzone są dwie zmienne typu string (Czas oraz Data), które będą zawierać tekst zawierający czas i datę do wyświetlania. Następnie do zmiennej Czas zapisywane są dane o aktualnej godzinie, minutach oraz sekundach. Są one oddzielane za pomocą dwukropka. Analogicznie jest w przypadku Data, gdzie znajdują się dane o aktualnym dniu miesiąca, miesiącu oraz roku.

void loop() {


  DateTime now = rtc.now();

  String Czas = "";
  String Data = "";

  // Tworzenie czasu 
  Czas += String(now.hour());
  Czas += ':';
  Czas += String(now.minute());
  Czas += ':';
  Czas += String(now.second());

  // Tworzenie Daty 
  Data += String(now.day());
  Data += '.';
  Data += String(now.month());
  Data += '.';
  Data += String(now.year());

Kursor ustawiany jest na pozycji (0,0) i na górze ekranu wyświetlony zostaje tekst „MIKROKONTROLER.PL”. Następnie kursor jest ustawiany w pozycji (20,18), gdzie zostaje wyświetlona wcześniej przygotowana zawartość zmiennej Czas. Następnie kursor zostanie ustawiony na pozycji (10,36) i wyświetlana jest wcześniej przygotowana zawartość zmiennej Data.

display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("  MIKROKONTROLER.PL   " );
  
  display.setCursor(20,18);
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.println(Czas);

  display.setCursor(10,36);
  display.println(Data);


  display.display();
  delay(1000);
  display.clearDisplay();
  
  
}

Działanie programu zostało zaprezentowane na poniższym wideo:

Autor: Patryk Mądry