Zum Hauptinhalt springen

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.

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);
}

Erwartetes Ergebnis, nachdem das Pad in Reihe 0, Spalte 0 zweimal gedrückt wurde:

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

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 InputronicGrid

Erstellt 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

TypNameBeschreibung
uint8_taddressI2C-Adresse des Boards. Optional, standardmäßig 0x30 (INPUTRONIC_GRID_DEFAULT_ADDR).
grid.begin(TwoWire &wire = Wire)returns bool

Startet 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

TypNameBeschreibung
TwoWire &wireDer zu verwendende I2C-Bus. Optional, standardmäßig Wire.
grid.clearLEDs()returns void

Schaltet alle 16 LEDs aus. Es entspricht setAllLEDs(0, 0, 0).

ReturnsNichts.

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

Fragt 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

TypNameBeschreibung
uint8_trowReihe, 0 bis 3, von oben nach unten.
uint8_tcolSpalte, 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 void

Legt 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

TypNameBeschreibung
uint8_trowReihe, 0 bis 3.
uint8_tcolSpalte, 0 bis 3.
uint8_trRot, 0 bis 255.
uint8_tgGrün, 0 bis 255.
uint8_tbBlau, 0 bis 255.
uint8_tintensityHelligkeit, 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.