Pro M5stack jednotky lze zakoupit různé rozšiřovací moduly, kdy jedním ze základních je Dual Button. Tento modul obsahuje 2 jednoduchá tlačítka, která se spínají na zem.
Pro jeho spojení s M5stack deskou stačí propojit 3 vodiče, přičemž můžeme propojit modul s M5stack zařízením pomocí dodaného kabelu pomocí Grove konektoru. Pokud budete chtít zapojit modul napřímo, tak propojte GND s GND, A s pinem D22 a B s pinem D21. Piny A a B můžete připojit i na jiné volné GPIO piny, jen je nutné provést změnu taky na začátku programu.
Ukázkový program najdete níže, přičemž jeho popis můžete najít na videu, které je připojeno na konci návodu. Kromě dvou tlačítek z Dual Button modulu je v něm zanasena také práce s dalšími třemi tlačítky přímo na M5stack:
// M5 stack a jednotka Dual Button // Jednotka s tlačítky // navody.dratek.cz // připojení potřebné knihovny #include <M5Stack.h> // nastavení čísel propojovacích pinů #define MODRA 22 #define CERVENA 21 #define BUT_A 39 #define BUT_B 38 #define BUT_C 37 // struktura pro tlačítka struct tlacitko { bool posledni_hodnota = 0; bool aktualni_hodnota = 0; int pin; }; // vytvoření pole tlačítek tlacitko pole[5]; void setup() { // zahájení komunikace s M5 stack M5.begin(); // zahájení komunikace s napájecím čipem M5.Power.begin(); // vypnutí reproduktoru dacWrite(25, 0); // nastavení čísel pinů pro tlačítka pole[0].pin = MODRA; pole[1].pin = CERVENA; pole[2].pin = BUT_A; pole[3].pin = BUT_B; pole[4].pin = BUT_C; // nastavení funkce pinů for (int i = 0; i < 5; i++) { pinMode(pole[i].pin, INPUT_PULLUP); } // vyčištění obrazovky a vypsání // prvního řádku M5.Lcd.clear(BLACK); M5.Lcd.setTextColor(YELLOW); M5.Lcd.setTextSize(2); M5.Lcd.setCursor(40, 0); M5.Lcd.println("Ukazka Pole tlacitek"); M5.Lcd.setTextColor(WHITE); // vypsání hlavičky pro všechny informace M5.Lcd.setCursor(0, 25); M5.Lcd.print("Stav Modra: "); M5.Lcd.setCursor(0, 45); M5.Lcd.print(" pin Modra: "); M5.Lcd.setCursor(0, 65); M5.Lcd.print("Stav Cervena: "); M5.Lcd.setCursor(0, 85); M5.Lcd.print(" pin Cervena: "); M5.Lcd.setCursor(0, 105); M5.Lcd.print("Stav ButtonA: "); M5.Lcd.setCursor(0, 125); M5.Lcd.print(" pin ButtonA: "); M5.Lcd.setCursor(0, 145); M5.Lcd.print("Stav ButtonB: "); M5.Lcd.setCursor(0, 165); M5.Lcd.print(" pin ButtonB: "); M5.Lcd.setCursor(0, 185); M5.Lcd.print("Stav ButtonC: "); M5.Lcd.setCursor(0, 205); M5.Lcd.print(" pin ButtonC: "); } void loop() { // vykonání následujícího kódu pro všechna tlačítka v poli for (int i = 0; i < 5; i++) { // načtení aktuálního stavu pinu pole[i].aktualni_hodnota = digitalRead(pole[i].pin); // pokud se aktuální stav pinu liší od předchozí uložené // hodnoty, tak přepíšeme text na displeji if (pole[i].aktualni_hodnota != pole[i].posledni_hodnota) { // vymazání předchozího textu pomocí černého obdélníka M5.Lcd.fillRect(160, 25 + (i * 40), 100, 25, BLACK); M5.Lcd.fillRect(160, 45 + (i * 40), 100, 25, BLACK); // pokud je tlačítko sepnuté, vypíšeme následující if (pole[i].aktualni_hodnota == 0) { M5.Lcd.setCursor(160, 25 + (i * 40)); M5.Lcd.print("stisk"); M5.Lcd.setCursor(160, 45 + (i * 40)); M5.Lcd.print("0"); } // pokud je tlačítko volné, vypíšeme následující else { M5.Lcd.setCursor(160, 25 + (i * 40)); M5.Lcd.print("volne"); M5.Lcd.setCursor(160, 45 + (i * 40)); M5.Lcd.print("1"); } // uložení aktuálního stavu pro další porovnávání pole[i].posledni_hodnota = pole[i].aktualni_hodnota; } } }
Sestřih ze streamu:
Celý záznam:
Na eshopu můžete tento M5stack Accel modul zakoupit zde:
https://dratek.cz/arduino/20936-m5stack-jednotka-s-tlacitky.html