[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:

Półprzewodniki mocy z węglika krzemu firmy Infineon wybrane do nowego modelu TOYOTA „bZ4X”
RS PRO: w odpowiedzi na realne potrzeby przemysłu
Platforma JetSys-2010 SFF do wysokowydajnych obliczeń AI-at-the-EDGE w aplikacjach high-end 


![https://www.youtube.com/watch?v=kmvM5hVSzCM Piata już edycja konferencji Hardware Design Masterclasses dla elektroników zaskoczyła frekwencją, tym bardziej, że spotkanie było dwudniowe. Film jest krótką relacją z wydarzenia, bazującą na wypowiedziach prelegentów. [materiał redakcyjny] Zapraszamy do obejrzenia!](https://mikrokontroler.pl/wp-content/uploads/2026/01/Rafal-tytulowe.png)

