Created
March 23, 2026 07:37
-
-
Save kwdowicz/cbab5f189fd8f0972ba5b869aed7e9b4 to your computer and use it in GitHub Desktop.
shelter_display.ino
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| Jak podłączyć OLED do Arduino Nano | |
| To bardzo proste połączenie. Ekran ma cztery wyprowadzenia: | |
| GND łączysz z pinem GND w Nano | |
| VCC łączysz z pinem 5V w Nano | |
| SDA łączysz z analogowym pinem A4 w Nano (to sprzętowa linia danych I2C) | |
| SCK łączysz z analogowym pinem A5 w Nano (to sprzętowa linia zegara I2C) | |
| Biblioteki i kod terminala RobCo | |
| Aby Arduino zrozumiało, jak rysować piksele na tym ekranie, będziesz musiał pobrać dwie darmowe biblioteki w programie Arduino IDE (zakładka Szkic -> Dołącz Bibliotekę -> Zarządzaj Bibliotekami): | |
| Adafruit GFX Library (główny silnik graficzny) | |
| Adafruit SSD1306 (sterownik dla Twojego konkretnego modelu) | |
| */ | |
| #include <Wire.h> | |
| #include <Adafruit_GFX.h> | |
| #include <Adafruit_SSD1306.h> | |
| #define SCREEN_WIDTH 128 | |
| #define SCREEN_HEIGHT 32 | |
| #define OLED_RESET -1 | |
| #define SCREEN_ADDRESS 0x3C | |
| Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); | |
| // Przyklad 1: Rysowanie wizualne 8x8 pikseli (Metoda zer i jedynek) | |
| const unsigned char icon_skull[] PROGMEM = { | |
| B00111100, | |
| B01000010, | |
| B10100101, | |
| B10000001, | |
| B10100101, | |
| B01011010, | |
| B00111100, | |
| B00011000 | |
| }; | |
| // Przyklad 2: Wygenerowana tablica 16x16 pikseli (symbol radiacji) | |
| const unsigned char icon_radiation[] PROGMEM = { | |
| 0x01, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0e, 0x70, 0x1c, 0x38, 0x38, 0x1c, 0x30, 0x0c, 0x23, 0xc4, | |
| 0x67, 0xe6, 0x47, 0xe2, 0x47, 0xe2, 0x63, 0xc6, 0x20, 0x04, 0x30, 0x0c, 0x38, 0x1c, 0x1c, 0x38 | |
| }; | |
| // Nowa rozbudowana struktura klatki | |
| struct ScreenFrame { | |
| int textSize; // Wielkosc tekstu (1 lub 2) | |
| String message; // Tekst do wyswietlenia | |
| unsigned long duration; // Czas trwania klatki w milisekundach | |
| const unsigned char* bitmap; // Nazwa grafiki (lub NULL jesli brak) | |
| int bmpWidth; // Szerokosc grafiki | |
| int bmpHeight; // Wysokosc grafiki | |
| int bmpX; // Pozycja X grafiki na ekranie (od lewej) | |
| int bmpY; // Pozycja Y grafiki na ekranie (od gory) | |
| }; | |
| // GLOWNA PLAYLISTA | |
| ScreenFrame sequence[] = { | |
| // 1. Tylko tekst (zwróc uwage na slowo NULL i zera na koncu) | |
| {1, "ROBCO INDUSTRIES\nUNIFIED OS V. 85", 2500, NULL, 0, 0, 0, 0}, | |
| // 2. Tekst plus mała wizualna czaszka po prawej stronie | |
| {1, "FATAL ERROR\nIN SECTOR 7", 2000, icon_skull, 8, 8, 100, 10}, | |
| // 3. Tekst plus wiekszy symbol radiacji | |
| {1, "WARNING:\nRADIATION SPIKE", 2000, icon_radiation, 16, 16, 90, 8}, | |
| // 4. Mruganie (krotki czas, sam duzy tekst) | |
| {2, " DANGER", 500, NULL, 0, 0, 0, 0}, | |
| {1, "", 200, NULL, 0, 0, 0, 0}, // Pusta klatka = wygaszenie ekranu | |
| {2, " DANGER", 500, NULL, 0, 0, 0, 0} | |
| }; | |
| const int totalFrames = sizeof(sequence) / sizeof(sequence[0]); | |
| void setup() { | |
| if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { | |
| for(;;); | |
| } | |
| display.setTextColor(SSD1306_WHITE); | |
| } | |
| void loop() { | |
| for (int i = 0; i < totalFrames; i++) { | |
| display.clearDisplay(); | |
| // Rysowanie tekstu | |
| display.setTextSize(sequence[i].textSize); | |
| display.setCursor(0, 0); | |
| display.print(sequence[i].message); | |
| // Rysowanie grafiki tylko jesli nie zostala oznaczona jako NULL | |
| if (sequence[i].bitmap != NULL) { | |
| display.drawBitmap(sequence[i].bmpX, sequence[i].bmpY, sequence[i].bitmap, sequence[i].bmpWidth, sequence[i].bmpHeight, SSD1306_WHITE); | |
| } | |
| display.display(); | |
| delay(sequence[i].duration); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment