Skip to main content

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​

Select Board
ButtonInteraction.ino
/**
**************************************************
*
* @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:

TipkaLEDBojaTon
BTN1LED 2Plava1000 Hz
BTN2LED 1Zelena2000 Hz
BTN3LED 0Crvena3000 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 None

Stvara 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

TipNazivOpis
uint8_taddressI2C adresa pločice, od 0x30 do 0x37, kako je postavljena preklopnikom adrese. Zadano je BLB_DEFAULT_ADDRESS (0x30).
begin()returns void

Pokreć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 void

Postavlja 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

TipNazivOpis
uint8_trSvjetlina crvene, od 0 (isključeno) do 255 (puna).
uint8_tgSvjetlina zelene, od 0 do 255.
uint8_tbSvjetlina 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

TipNazivOpis
uint16_tfreqFrekvencija 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 void

Postavlja 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

TipNazivOpis
uint8_tindexKoja LED dioda, od 0 do 2.
uint8_trSvjetlina crvene, od 0 (isključeno) do 255 (puna).
uint8_tgSvjetlina zelene, od 0 do 255.
uint8_tbSvjetlina 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.