Tipke, LED diode i zujalica zajedno
Što ovaj primjer prikazuje
Korištenje tipki za upravljanje LED diodama i zujalicom na istoj pločici. Svaka tipka, dok je držite, pali jednu LED diodu u njezinoj boji, a zujalica svira ton tipke s najvećim brojem među onima koje držite.
Kôd primjera
/**
**************************************************
*
* @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);
}
Ovaj primjer koristi i Wire, koji nije dio biblioteke Soldered-Button-LED-Buzzer-Board: dolazi uz paket vaše Arduino pločice. Wire.begin() pridružuje se I2C sabirnici kao kontroler. Bez Qwiic konektora, komentar u skici pokazuje kako proslijediti vlastite I2C pinove, na primjer Wire.begin(21, 22) na ESP32 domaćinu za koji je primjer napisan.
Očekivani rezultat:
Nema ispisa na serijskom sučelju. Dok držite tipku:
| Tipka | LED | Boja | Ton |
|---|---|---|---|
| BTN1 | LED 2 | Plava | 1000 Hz |
| BTN2 | LED 1 | Zelena | 2000 Hz |
| BTN3 | LED 0 | Crvena | 3000 Hz |
Držite li više tipki, svijetle sve njihove LED diode, a zujalica svira ton tipke s najvećim brojem. Otpustite li ih sve, LED diode i zujalica se gase.
Korištene funkcije
ButtonLedBuzzerBoard_Soldered(uint8_t address = BLB_DEFAULT_ADDRESS)returns NoneStvara objekt pločice i pamti njezinu I2C adresu. Sve tri LED diode na početku su isključene u međuspremniku boja biblioteke. Primjer koristi zadanu adresu 0x30, koju pločica ima kada su sva tri preklopnika adrese u položaju OFF.
ReturnsKonstruktor; nema povratne vrijednosti.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint8_t | address | I2C adresa pločice, od 0x30 do 0x37, kako je postavljena preklopnikom adrese. Zadano je BLB_DEFAULT_ADDRESS (0x30). |
begin()returns voidPokreće I2C sabirnicu pozivom Wire.begin(). Pozovite je jednom u setup(), prije bilo koje druge funkcije.
ReturnsNišta.
setAllLEDs(uint8_t r, uint8_t g, uint8_t b)returns voidPostavlja sve tri LED diode na istu boju i šalje ih na pločicu. setAllLEDs(0, 0, 0) isključuje sve LED diode.
ReturnsNišta.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint8_t | r | Svjetlina crvene, od 0 (isključeno) do 255 (puna). |
uint8_t | g | Svjetlina zelene, od 0 do 255. |
uint8_t | b | Svjetlina plave, od 0 do 255. |
setBuzzer(uint16_t freq)returns voidŠalje frekvenciju tona u Hz pasivnoj zujalici. Primjeri šalju 0 za zaustavljanje tona.
ReturnsNišta.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint16_t | freq | Frekvencija tona u Hz. Primjeri šalju 0 za zaustavljanje tona. |
readButtons()returns uint8_tČita registar tipki pločice i vraća stanje sve tri tipke u jednom bajtu. Bit 0 je BTN1, bit 1 je BTN2, a bit 2 je BTN3; bit je 1 dok je njegova tipka pritisnuta. Ako pločica ne odgovori, funkcija vraća 0, što izgleda isto kao da nijedna tipka nije pritisnuta.
ReturnsBitovi tipki: 0x01 za BTN1, 0x02 za BTN2, 0x04 za BTN3, kombinirani kada je pritisnuto više tipki.
setLED(uint8_t index, uint8_t r, uint8_t g, uint8_t b)returns voidPostavlja boju jedne LED diode. Biblioteka pamti boje sve tri LED diode i pri svakom slanju šalje sve na pločicu, pa druge dvije LED diode zadržavaju svoje boje. Indeks 3 ili veći se zanemaruje.
ReturnsNišta.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint8_t | index | Koja LED dioda, od 0 do 2. |
uint8_t | r | Svjetlina crvene, od 0 (isključeno) do 255 (puna). |
uint8_t | g | Svjetlina zelene, od 0 do 255. |
uint8_t | b | Svjetlina plave, od 0 do 255. |
Sastavljanje cjeline
Svakih 20 ms skica jednim pozivom readButtons() čita sve tri tipke i razdvaja bajt maskama 0x01, 0x02 i 0x04. Zatim postavlja svaku LED diodu na punu svjetlinu u njezinoj boji ili je isključuje, tako da LED diode uvijek prate tipke. Lanac if provjerava BTN3 prvu, zbog čega ton određuje pritisnuta tipka s najvećim brojem.
Komentar na vrhu skice povezuje BTN1 s crvenom, a BTN3 s plavom bojom. Kôd zamjenjuje te dvije boje, a tablica iznad prati kôd.