Arduino UNO i proste menu użytkownika wykonane z wykorzystaniem modułu LCD z magistralą szeregową i2c
Stronę tą wyświetlono już: 14413 razy
Same Arduino nie wiele znaczy bez dodatkowych elementów. W tym przypadku postanowiłem stworzyć coś na kształt interfejsu użytkownika w postaci menu wyświetlanego na module LCD wyposażonym w magistralę szeregową i2c, która umożliwia podłączenie i komunikowanie się za pomocą zaledwie czterech przewodów:
- GND - uziemnienie;
- VCC - 5+;
- SDA - linia przesyłanych danych;
- SDL - linia zegara
Połączenie układu pokazane zostało na poniższym rysunku. Ważne jest, aby zdawać sobie sprawę, że w Arduino UNO piny A4 i A5 mają specjalne przeznaczenie i umożliwiają komunikowanie się z urządzeniami poprzez magistralę szeregową i2c. W tymże układzie w zależności od ustawienia rezystancji rezystora wyświetlana będzie pozycja menu.
Poniżej zamieszczam dokładny opis magistrali szeregowej i2c wraz z modułem LCD. Każda magistrala szeregowa i2c ma przypisany adres, po którym urządzenie komunikuje się z Arduino. Takie rozwiązanie umożliwia podłączenie kilku różnych elementów sterowanych za pomocą magistrali szeregowej i2c pod warunkiem, że każda z nich ma przypisany inny adres. W przypadku poniższego modułu piny A1, A2 i A3 umożliwiają zmianę adresu magistrali. W moim przypadku adres mojej magistrali szeregowej i2c to 0x3F (zapis szesnastkowy), ale zdarzają się też moduły z ustawionym adresem na 0x27.
Jeżeli nie znasz adresu swojej magistrali szeregowej i2c poniższy kod umożliwi wykrycie tego adresu pod warunkiem, że do Arduino podpięte zostanie tylko jedno takie urządzenia.
Zasada działania menu jest prosta, zmiana położenia pokrętła rezystora regulowanego powoduje zmianę odczytanego napięcia na pinie analogowym A0 i w zależności od jego wartości zmienia się pozycja wyświetlanego menu (co można zobaczyć na poniżej zamieszczonym filmie).
Do obsługi wyświetlacza konieczne jest załączenie następujących bibliotek:
Bibliotekę New LiquidCrystal można pobrać z strony tutaj.
Inicjalizacja obiektu klasy LiquidCrystal_I2C odpowiedzialnego za komunikację z modułem LCD wygląda następująco:
Sama konfiguracja wyświetlacza w funkcji setup wygląda następująco:
Zadeklarowane przeze mnie klasy, które wykorzystuję do obsługi wyświetlania menu to:
- MenuItem - reprezentująca pojedynczy obiekt pozycji menu;
- Menu - reprezentująca menu i realizująca zadania związane z przewijaniem pozycji menu;
Klasa MenuItem jest swego rodzaju uproszczoną listą dwukierunkową. Oto deklaracje wyżej wymienionych klas:
Globalnie utworzony obiekt klasy Menu:
Tworzenie menu w funkcji setup jest banalnie proste:
Dodatkowo konieczne jest podciągnięcie rezystora pod pin A0:
Oraz wywołanie pętli menu w funkcji loop:
Oczywiście powyższy przykład jest okrojoną wersją, albowiem w rzeczywistości często potrzebne są takie rozwiązania, które umożliwiają wywołanie konkretnej funkcji lub uruchomienie podmenu.
Tytuł:
Internet rzeczy. Podstawy programowania aplikacji i serwerów sieciowych w językach C/C++, MicroPython i Lua na urządzeniach IoT ESP8266, ESP32 i Arduino
Autor:
Mariusz Duka
Tytuł:
Arduino dla początkujących. Podstawy i szkice. Wydanie II
Autor:
Simon Monk
Tytuł:
Arduino od podstaw
Autor:
Witold Wrotek
Tytuł:
TinyML. Wykorzystanie TensorFlow Lite do uczenia maszynowego na Arduino i innych mikrokontrolerach
Autor:
Pete Warden, Daniel Situnayake
Tytuł:
Arduino dla początkujących. Kolejny krok. Wydanie II
Autor:
Simon Monk
Tytuł:
Arduino dla początkujących. Podstawy i szkice. Wydanie II
Autor:
Simon Monk
Tytuł:
Elektronika z wykorzystaniem Arduino i Rapsberry Pi. Receptury
Autor:
Simon Monk
Tytuł:
Arduino dla dzieci. Poznaj świat elektroniki i programowania. Poznaj świat elektroniki i programowania
Autor:
Żarowska-Mazur Alicja, Mazur Dawid
Tytuł:
Roboty JavaScript od podstaw. Projekty NodeBots dla platformy Johnny-Five z wykorzystaniem płytek Raspberry Pi, Arduino oraz BeagleBone
Autor:
Rick Waldron, Backstop Media (lista współautorów w uwagach dodatkowych)
Tytuł:
Arduino dla początkujących. Kolejny krok
Autor:
Simon Monk