Zasvijetli tipku kad je pritisneš
Što ovaj primjer prikazuje
Svaka tipka upravlja vlastitom LED diodom. Prvi pritisak pali je u boji njezina retka (redak 0 crveno, redak 1 zeleno, redak 2 plavo, redak 3 narančasto), a sljedeći pritisak je gasi. Svaki se pritisak ispisuje u Serial Monitoru brzinom od 115200 baud.
Kôd primjera
Ovo je examples/ButtonLEDControl/ButtonLEDControl.ino iz fiksirane
biblioteke, bez izmjena.
/**
**************************************************
*
* @file ButtonLEDControl.ino
* @brief Example showing button-driven LED toggle on the Inputronic Grid.
*
* Each button toggles its corresponding LED on or off.
* First press turns the LED on in a row-specific color;
* second press turns it off.
*
* Demonstrates reading individual pads by row/col coordinate
* and reacting with per-LED color control using the same
* row/col coordinates.
*
* Hardware wiring:
* - Connect Inputronic Grid to host via Qwiic / I2C
* (SDA, SCL, 3V3, GND).
*
* @authors Josip Šimun Kuči @ soldered.com
***************************************************/
#include <InputronicGrid.h>
InputronicGrid grid;
// Toggle state per button, indexed by [row][col]
bool ledOn[4][4] = {};
// Colors per row (R, G, B)
const uint8_t rowColor[4][3] = {
{255, 0, 0}, // row 0 — red
{ 0, 255, 0}, // row 1 — green
{ 0, 0, 255}, // row 2 — blue
{255, 128, 0}, // row 3 — orange
};
// Previous pad state per [row][col] for edge detection
bool prevState[4][4] = {};
void setup()
{
Serial.begin(115200);
if (!grid.begin())
{
Serial.println("Inputronic GRID not found. Check wiring.");
while (1)
;
}
grid.clearLEDs();
Serial.println("Press any button to toggle its LED.");
}
void loop()
{
for (uint8_t row = 0; row < 4; row++)
{
for (uint8_t col = 0; col < 4; col++)
{
bool pressed = grid.readPad(row, col);
if (pressed && !prevState[row][col])
{
ledOn[row][col] = !ledOn[row][col];
if (ledOn[row][col])
grid.setLED(row, col, rowColor[row][0], rowColor[row][1], rowColor[row][2], 255);
else
grid.setLED(row, col, 0, 0, 0, 255);
Serial.print("Button (row ");
Serial.print(row);
Serial.print(", col ");
Serial.print(col);
Serial.print(") → LED ");
Serial.println(ledOn[row][col] ? "ON" : "OFF");
}
prevState[row][col] = pressed;
}
}
delay(20);
}
Očekivani rezultat nakon što dvaput pritisnete tipku u retku 0, stupcu 0:
Press any button to toggle its LED.
Button (row 0, col 0) → LED ON
Button (row 0, col 0) → LED OFF
LED dioda tipke svijetli crveno nakon prvog pritiska, a gasi se nakon drugog. Ako
pločica ne odgovara, skica ispisuje Inputronic GRID not found. Check wiring.
i zaustavlja se.
Korištene funkcije
InputronicGrid(uint8_t address = INPUTRONIC_GRID_DEFAULT_ADDR)returns InputronicGridStvara objekt upravljačkog programa za jedan GRID. Primjer ga deklarira kao InputronicGrid grid; bez adrese, pa koristi zadanu adresu 0x30.
ReturnsObjekt upravljačkog programa.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint8_t | address | I2C adresa pločice. Neobavezno, prema zadanim postavkama 0x30 (INPUTRONIC_GRID_DEFAULT_ADDR). |
grid.begin(TwoWire &wire = Wire)returns boolPokreće I2C sabirnicu pomoću wire.begin() i provjerava odgovara li pločica na svojoj adresi.
Returnstrue kada je pločica potvrdila prijem na sabirnici, false kada nije pronađena.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
TwoWire & | wire | I2C sabirnica koja se koristi. Neobavezno, prema zadanim postavkama Wire. |
grid.clearLEDs()returns voidGasi svih 16 LED dioda. Isto je kao setAllLEDs(0, 0, 0).
ReturnsNišta.
grid.readPad(uint8_t row, uint8_t col)returns boolPita pločicu je li određena tipka trenutačno pritisnuta, prema njezinu mjestu u mreži.
Returnstrue dok je tipka pritisnuta, false kada nije.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint8_t | row | Redak, od 0 do 3, odozgo prema dolje. |
uint8_t | col | Stupac, od 0 do 3, slijeva nadesno. |
grid.setLED(uint8_t row, uint8_t col, uint8_t r, uint8_t g, uint8_t b, uint8_t intensity)returns voidPostavlja boju LED diode ispod jedne tipke, prema njezinu mjestu u mreži. Svaka se vrijednost boje prije slanja skalira s intensity / 255.
ReturnsNišta.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint8_t | row | Redak, od 0 do 3. |
uint8_t | col | Stupac, od 0 do 3. |
uint8_t | r | Crvena, od 0 do 255. |
uint8_t | g | Zelena, od 0 do 255. |
uint8_t | b | Plava, od 0 do 255. |
uint8_t | intensity | Svjetlina, od 0 (isključeno) do 255 (puna). U ovom je obliku obavezna. |
Uvijek proslijedite svih šest argumenata obliku s retkom i stupcem. S pet
argumenata poziva se setLED(index, r, g, b, intensity = 128), a
prvi se broj tumači kao indeks LED diode.
Sve zajedno
begin() provjerava je li pločica prisutna, a clearLEDs() počinje sa svim LED diodama
ugašenima. Petlja svakih 20 ms čita svih 16 tipki funkcijom readPad() i uspoređuje svaku
sa stanjem iz prethodnog prolaza, pa se držanje tipke broji kao jedan pritisak.
Pri novom pritisku skica preokreće zapis te tipke u ledOn i poziva setLED()
s istim retkom i stupcem, punim intenzitetom u boji retka ili s
0, 0, 0 za gašenje.