Ein Pad per Tastendruck leuchten lassen
Was dieses Beispiel zeigt
Jedes Pad schaltet seine eigene LED. Beim ersten Drücken leuchtet sie in der Farbe ihrer Reihe (Reihe 0 Rot, Reihe 1 Grün, Reihe 2 Blau, Reihe 3 Orange), beim nächsten Drücken wird sie wieder ausgeschaltet. Jeder Tastendruck wird im Serial Monitor mit 115200 Baud ausgegeben.
Der Beispielcode
Dies ist examples/ButtonLEDControl/ButtonLEDControl.ino aus der festgelegten
Bibliothek, unverändert.
/**
**************************************************
*
* @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);
}
Erwartetes Ergebnis, nachdem das Pad in Reihe 0, Spalte 0 zweimal gedrückt wurde:
Press any button to toggle its LED.
Button (row 0, col 0) → LED ON
Button (row 0, col 0) → LED OFF
Die LED des Pads leuchtet beim ersten Drücken rot und geht beim zweiten Drücken aus. Wenn das
Board nicht antwortet, gibt der Sketch Inputronic GRID not found. Check wiring. aus
und hält an.
Verwendete Funktionen
InputronicGrid(uint8_t address = INPUTRONIC_GRID_DEFAULT_ADDR)returns InputronicGridErstellt das Driver-Objekt für ein GRID. Das Beispiel deklariert es als InputronicGrid grid; ohne Adresse, daher wird die Standardadresse 0x30 verwendet.
ReturnsDas Driver-Objekt.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | address | I2C-Adresse des Boards. Optional, standardmäßig 0x30 (INPUTRONIC_GRID_DEFAULT_ADDR). |
grid.begin(TwoWire &wire = Wire)returns boolStartet den I2C-Bus mit wire.begin() und prüft, ob das Board unter seiner Adresse antwortet.
Returnstrue, wenn das Board den Zugriff auf dem Bus bestätigt hat, false, wenn es nicht gefunden wurde.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
TwoWire & | wire | Der zu verwendende I2C-Bus. Optional, standardmäßig Wire. |
grid.clearLEDs()returns voidSchaltet alle 16 LEDs aus. Es entspricht setAllLEDs(0, 0, 0).
ReturnsNichts.
grid.readPad(uint8_t row, uint8_t col)returns boolFragt das Board, ob ein Pad gerade gedrückt ist, anhand seiner Position im Raster.
Returnstrue, solange das Pad gedrückt ist, false, wenn nicht.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | row | Reihe, 0 bis 3, von oben nach unten. |
uint8_t | col | Spalte, 0 bis 3, von links nach rechts. |
grid.setLED(uint8_t row, uint8_t col, uint8_t r, uint8_t g, uint8_t b, uint8_t intensity)returns voidLegt die Farbe der LED unter einem Pad fest, anhand seiner Position im Raster. Jeder Farbwert wird vor dem Senden mit intensity / 255 skaliert.
ReturnsNichts.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | row | Reihe, 0 bis 3. |
uint8_t | col | Spalte, 0 bis 3. |
uint8_t | r | Rot, 0 bis 255. |
uint8_t | g | Grün, 0 bis 255. |
uint8_t | b | Blau, 0 bis 255. |
uint8_t | intensity | Helligkeit, 0 (aus) bis 255 (voll). In dieser Form erforderlich. |
Übergeben Sie an die Form mit Reihe und Spalte immer alle sechs Argumente. Bei fünf
Argumenten wird stattdessen setLED(index, r, g, b, intensity = 128) aufgerufen, und
die erste Zahl wird als LED-Index gelesen.
Alles zusammengesetzt
begin() prüft, ob das Board vorhanden ist, und clearLEDs() beginnt mit ausgeschalteten
LEDs. Die Schleife liest alle 16 Pads alle 20 ms mit readPad() und vergleicht jedes
mit seinem Zustand aus dem letzten Durchlauf, sodass ein gedrücktes Pad nur als ein Tastendruck zählt.
Bei einem neuen Tastendruck kehrt der Sketch den Eintrag dieses Pads in ledOn um und ruft setLED()
mit derselben Reihe und Spalte auf, mit voller Intensität in der Farbe der Reihe oder mit
0, 0, 0, um die LED auszuschalten.