Die Taster auslesen
Was dieses Beispiel zeigt
Die drei Taster werden ausgelesen, und es wird nur reagiert, wenn sich einer ändert. Buttons.ino gibt jedes Mal eine Zeile im Serial Monitor aus, wenn ein Taster gedrückt oder losgelassen wird.
Der Beispielcode
/**
**************************************************
*
* @file Buttons.ino
* @brief Button test for Soldered Button, LED & Buzzer Board
* Host: ESP32 WROVER-E
*
* Prints button states to Serial Monitor (115200 baud).
* Shows press and release events.
*
* @authors Fran Fodor @ soldered.com
***************************************************/
#include "ButtonLedBuzzerBoard-SOLDERED.h"
ButtonLedBuzzerBoard_Soldered board;
uint8_t lastButtons = 0;
void setup()
{
Serial.begin(115200);
Wire.begin(); // if not using Qwiic, specify I2C pins: Wire.begin(21, 22)
board.begin();
delay(2000);
Serial.println("Button, LED & Buzzer Board - Button Test");
Serial.println("Press any button...");
}
void loop()
{
uint8_t buttons = board.readButtons();
if (buttons != lastButtons)
{
for (uint8_t i = 0; i < 3; i++)
{
uint8_t mask = 1 << i;
if ((buttons & mask) && !(lastButtons & mask))
{
Serial.print("BTN"); Serial.print(i + 1); Serial.println(" pressed");
}
else if (!(buttons & mask) && (lastButtons & mask))
{
Serial.print("BTN"); Serial.print(i + 1); Serial.println(" released");
}
}
lastButtons = buttons;
}
delay(20);
}
Dieses Beispiel verwendet außerdem Wire, das nicht Teil der Soldered-Button-LED-Buzzer-Board-Library ist: Es wird mit dem Board-Package Ihres Arduino-Boards mitgeliefert. Wire.begin() tritt dem I2C-Bus als Controller bei. Ohne Qwiic zeigt der Kommentar in der Skizze, wie Sie Ihre eigenen I2C-Pins übergeben, zum Beispiel Wire.begin(21, 22) auf dem ESP32-Host, für den das Beispiel geschrieben wurde.
Erwartetes Ergebnis:
Öffnen Sie den Serial Monitor mit 115200 Baud. Nach etwa zwei Sekunden gibt die Skizze ihre Kopfzeile aus. Wenn Sie BTN1 drücken und wieder loslassen, kommen die letzten beiden Zeilen hinzu; die anderen Taster geben BTN2 und BTN3 auf dieselbe Weise aus.
Button, LED & Buzzer Board - Button Test
Press any button...
BTN1 pressed
BTN1 released
Verwendete Funktionen
ButtonLedBuzzerBoard_Soldered(uint8_t address = BLB_DEFAULT_ADDRESS)returns NoneErzeugt das Board-Objekt und merkt sich dessen I2C-Adresse. Alle drei LEDs sind im Farbpuffer der Library zunächst aus. Das Beispiel verwendet die Standardadresse 0x30, die das Board hat, wenn alle drei Adressschalter auf OFF stehen.
ReturnsKonstruktor; kein Rückgabewert.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | address | Die I2C-Adresse des Boards, 0x30 bis 0x37, wie sie mit dem Adressschalter eingestellt ist. Standardwert ist BLB_DEFAULT_ADDRESS (0x30). |
begin()returns voidStartet den I2C-Bus durch den Aufruf von Wire.begin(). Rufen Sie sie einmal in setup() auf, vor jeder anderen Funktion.
ReturnsNichts.
readButtons()returns uint8_tLiest das Tasterregister des Boards und gibt den Zustand aller drei Taster in einem Byte zurück. Bit 0 ist BTN1, Bit 1 ist BTN2 und Bit 2 ist BTN3; ein Bit ist 1, solange der zugehörige Taster gedrückt ist. Antwortet das Board nicht, gibt die Funktion 0 zurück, was genauso aussieht wie „kein Taster gedrückt“.
ReturnsDie Tasterbits: 0x01 für BTN1, 0x02 für BTN2, 0x04 für BTN3, kombiniert, wenn mehrere gedrückt sind.
Zusammenspiel
readButtons() gibt alle drei Taster als Bits eines Bytes zurück. Die Skizze liest das Board daher einmal pro Schleifendurchlauf aus und vergleicht das Ergebnis mit dem vorherigen (lastButtons). Ein Bit, das eingeschaltet wurde, ist ein Tastendruck, und ein Bit, das ausgeschaltet wurde, ist ein Loslassen; die Schleife wiederholt sich alle 20 ms. Unveränderte Taster geben nichts aus, sodass das Gedrückthalten eines Tasters pressed nur einmal ausgibt.