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.

M5stack jednotka Dual Button s dvěma tlačítky

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

FB tw

Další podobné články