Buttons, LEDs und Buzzer zusammen
Was dieses Beispiel zeigt
Die Buttons steuern die LEDs und den Buzzer auf demselben Board. Jeder Button lässt, solange Sie ihn gedrückt halten, eine LED in ihrer eigenen Farbe leuchten, und der Buzzer spielt den Ton des gedrückten Buttons mit der höchsten Nummer.
Der Beispielcode
/**
**************************************************
*
* @file ButtonInteraction.ino
* @brief Button interaction example for Soldered Button, LED & Buzzer Board
* Host: ESP32 WROVER-E
*
* Press a button to light its LED and sound the buzzer:
* BTN1 -> LED1 red, 1000 Hz
* BTN2 -> LED2 green, 2000 Hz
* BTN3 -> LED3 blue, 3000 Hz
*
* Multiple buttons can be pressed simultaneously.
* Buzzer plays the highest pressed button's frequency.
*
* @authors Fran Fodor @ soldered.com
***************************************************/
#include "ButtonLedBuzzerBoard-SOLDERED.h"
ButtonLedBuzzerBoard_Soldered board;
void setup()
{
Wire.begin(); // if not using Qwiic, specify I2C pins: Wire.begin(21, 22)
board.begin();
delay(2000);
board.setAllLEDs(0, 0, 0);
board.setBuzzer(0);
}
void loop()
{
uint8_t buttons = board.readButtons();
bool btn1 = buttons & 0x01;
bool btn2 = buttons & 0x02;
bool btn3 = buttons & 0x04;
board.setLED(0, btn3 ? 255 : 0, 0, 0);
board.setLED(1, 0, btn2 ? 255 : 0, 0);
board.setLED(2, 0, 0, btn1 ? 255 : 0);
if (btn3) board.setBuzzer(3000);
else if (btn2) board.setBuzzer(2000);
else if (btn1) board.setBuzzer(1000);
else board.setBuzzer(0);
// remove delay for smooth tone
delay(20);
}
Dieses Beispiel verwendet außerdem Wire, das nicht Teil der Bibliothek Soldered-Button-LED-Buzzer-Board ist: Es gehört zum Board-Paket Ihres Arduino. 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:
Es gibt keine serielle Ausgabe. Solange Sie einen Button gedrückt halten:
| Button | LED | Farbe | Ton |
|---|---|---|---|
| BTN1 | LED 2 | Blau | 1000 Hz |
| BTN2 | LED 1 | Grün | 2000 Hz |
| BTN3 | LED 0 | Rot | 3000 Hz |
Halten Sie mehrere Buttons gedrückt, leuchten alle zugehörigen LEDs, während der Buzzer den Ton des Buttons mit der höchsten Nummer spielt. Lassen Sie alle los, gehen die LEDs und der Buzzer aus.
Verwendete Funktionen
ButtonLedBuzzerBoard_Soldered(uint8_t address = BLB_DEFAULT_ADDRESS)returns NoneErstellt das Board-Objekt und merkt sich seine I2C-Adresse. Alle drei LEDs sind im Farbpuffer der Bibliothek 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, eingestellt über den Adressschalter. Standardwert ist BLB_DEFAULT_ADDRESS (0x30). |
begin()returns voidStartet den I2C-Bus durch Aufruf von Wire.begin(). Rufen Sie die Funktion einmal in setup() auf, vor allen anderen Funktionen.
ReturnsNichts.
setAllLEDs(uint8_t r, uint8_t g, uint8_t b)returns voidSetzt alle drei LEDs auf dieselbe Farbe und sendet sie an das Board. setAllLEDs(0, 0, 0) schaltet jede LED aus.
ReturnsNichts.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | r | Helligkeit von Rot, 0 (aus) bis 255 (voll). |
uint8_t | g | Helligkeit von Grün, 0 bis 255. |
uint8_t | b | Helligkeit von Blau, 0 bis 255. |
setBuzzer(uint16_t freq)returns voidSendet eine Tonfrequenz in Hz an den passiven Buzzer. Die Beispiele übergeben 0, um den Ton zu beenden.
ReturnsNichts.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint16_t | freq | Tonfrequenz in Hz. Die Beispiele übergeben 0, um den Ton zu beenden. |
readButtons()returns uint8_tLiest das Button-Register des Boards und gibt den Zustand aller drei Buttons in einem Byte zurück. Bit 0 ist BTN1, Bit 1 ist BTN2 und Bit 2 ist BTN3; ein Bit ist 1, solange sein Button gedrückt ist. Antwortet das Board nicht, gibt die Funktion 0 zurück, was genauso aussieht wie kein gedrückter Button.
ReturnsDie Button-Bits: 0x01 für BTN1, 0x02 für BTN2, 0x04 für BTN3, kombiniert, wenn mehrere gedrückt sind.
setLED(uint8_t index, uint8_t r, uint8_t g, uint8_t b)returns voidSetzt die Farbe einer LED. Die Bibliothek merkt sich die Farben aller drei LEDs und sendet jedes Mal alle an das Board, sodass die anderen beiden LEDs ihre Farben behalten. Ein Index von 3 oder mehr wird ignoriert.
ReturnsNichts.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | index | Welche LED, 0 bis 2. |
uint8_t | r | Helligkeit von Rot, 0 (aus) bis 255 (voll). |
uint8_t | g | Helligkeit von Grün, 0 bis 255. |
uint8_t | b | Helligkeit von Blau, 0 bis 255. |
Alles zusammen
Alle 20 ms liest die Skizze mit einem einzigen Aufruf von readButtons() alle drei Buttons und zerlegt das Byte mit den Masken 0x01, 0x02 und 0x04. Danach setzt sie jede LED auf volle Helligkeit in ihrer Farbe oder auf aus, sodass die LEDs immer den Buttons folgen. Die if-Kette prüft BTN3 zuerst, weshalb der gedrückte Button mit der höchsten Nummer den Ton bestimmt.
Der Kommentar am Anfang der Skizze ordnet BTN1 Rot und BTN3 Blau zu. Der Code vertauscht diese beiden Farben, und die Tabelle oben folgt dem Code.