[PROJEKT] Licznik otwierania drzwi – KAmduino UNO, magnetyczny czujnik otwarcia drzwi oraz wyświetlacz OLED
Teraz można przejść do napisania programu, który będzie liczył liczbę otwarć drzwi oraz wyświetlał tą informację na wyświetlaczu OLED. (Pełen kod programu znajduje się w sekcji „do pobrania” pod koniec artykułu).
Na początku programu dołączone są biblioteki potrzebne do obsługi wyświetlacza OLED, następnie znajduje się deklaracja pinów, do których podłączono wyświetlacz. Dalej zdefiniowano zmienne przechowujące informacje o ostatnim stanie, o aktualnym stanie drzwi (otwarte/zamknięte) oraz o ilości otwarć drzwi (zmienna licznik).
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #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 int licznik=0 ; int czy_otwarte = 0; int ostatni_stan = 0;
Następnie znajduje się funkcja void otwarcie_drzwi(), która sprawdza poprzedni stan drzwi (zmienna ostatni_stan) i stan aktualny oraz na podstawie tych danych zwiększa zmienną licznik za każdym razem, gdy drzwi zostaną otwarte.
void otwarcie_drzwi() { if (ostatni_stan==0 && (digitalRead(2)==1)) { licznik++; ostatni_stan =1; czy_otwarte = 1; } else if (ostatni_stan==1 && (digitalRead(2)==0)) { ostatni_stan = 0; czy_otwarte = 0; } }
W funkcji konfiguracyjnej setup() znajduje się inicjalizacja działania wyświetlacza OLED.
void setup() { display.begin(SSD1306_SWITCHCAPVCC); }
W pętli głównej programu znajduje się wywołanie funkcji otwarcie_drzwi(), a następnie zadeklarowane są zmienne typu string (tekst_OLED oraz tekst_OLED2), w których umieszczany jest tekst do wyświetlenia na ekranie. W zmiennej tekst_OLED przechowywana jest informacja o ilości otworzeń drzwi, natomiast w zmiennej tekst_OLED2 przechowywany jest komunikat o aktualnym stanie drzwi (otwarte lub zamknięte). Na ekranie OLED wyświetlany jest napis „Mikrokontroler.PL”, następnie duży napis „Licznik”, a w kolejnym wierszu jego wartość (ilość otwarć drzwi). Na samym dole wyświetlacza znajduje się informacja o tym, czy drzwi są aktualnie zamknięte czy otwarte.
void loop() { otwarcie_drzwi(); String tekst_OLED =""; String tekst_OLED2 =""; tekst_OLED += String(licznik); if (czy_otwarte==1) { tekst_OLED2+="OTWARTE"; } else { tekst_OLED2+="ZAMKNIETE"; } display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.println(" MIKROKONTROLER.PL " ); display.setCursor(0,18); display.setTextSize(2); display.setTextColor(WHITE); display.println("Licznik: "); display.println(tekst_OLED); display.setTextSize(2); display.setTextColor(WHITE); display.println(tekst_OLED2); display.display(); display.clearDisplay(); }
Działanie programu zostało przedstawione na poniższym filmie: