Skip to main content

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.

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

Serial MonitorAutoscrollShow timestampNewline115200 baud
Message (Enter to send message to the board)
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 InputronicGrid

Stvara 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

TipNazivOpis
uint8_taddressI2C adresa pločice. Neobavezno, prema zadanim postavkama 0x30 (INPUTRONIC_GRID_DEFAULT_ADDR).
grid.begin(TwoWire &wire = Wire)returns bool

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

TipNazivOpis
TwoWire &wireI2C sabirnica koja se koristi. Neobavezno, prema zadanim postavkama Wire.
grid.clearLEDs()returns void

Gasi svih 16 LED dioda. Isto je kao setAllLEDs(0, 0, 0).

ReturnsNišta.

grid.readPad(uint8_t row, uint8_t col)returns bool

Pita 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

TipNazivOpis
uint8_trowRedak, od 0 do 3, odozgo prema dolje.
uint8_tcolStupac, 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 void

Postavlja 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

TipNazivOpis
uint8_trowRedak, od 0 do 3.
uint8_tcolStupac, od 0 do 3.
uint8_trCrvena, od 0 do 255.
uint8_tgZelena, od 0 do 255.
uint8_tbPlava, od 0 do 255.
uint8_tintensitySvjetlina, 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.