Skip to main content

Upalite tipku kad je pritisnete

Što prikazuje ovaj primjer​

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 pritisak ispisuje se u shellu.

Kôd primjera​

Ovo je Examples/ButtonLEDControl.py iz fiksiranog modula, bez izmjena. Spremite ga na svoju pločicu i pokrenite.

# FILE: ButtonLEDControl.py
# AUTHOR: Josip Šimun Kuči @ Soldered
# 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 coordinates.
# WORKS WITH: Inputronic GRID: www.soldered.com
# LAST UPDATED: 2026-05-12

from machine import I2C, Pin
from InputronicGrid import InputronicGrid
import time

# If you aren't using the Qwiic connector, manually enter your I2C pins:
# i2c = I2C(0, scl=Pin(22), sda=Pin(21))
# grid = InputronicGrid(i2c=i2c)

grid = InputronicGrid()
grid.clearLEDs()
print("Press any button to toggle its LED.")

# Toggle state per button, indexed by [row][col]
ledOn = [[False] * 4 for _ in range(4)]

# Colors per row (R, G, B)
rowColor = [
(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
prevState = [[False] * 4 for _ in range(4)]

while True:
for row in range(4):
for col in range(4):
pressed = grid.readPad(row, col)

if pressed and not prevState[row][col]:
ledOn[row][col] = not ledOn[row][col]

if ledOn[row][col]:
r, g, b = rowColor[row]
grid.setLED(row, col, r, g, b, 255)
else:
grid.setLED(row, col, 0, 0, 0, 255)

print("Button (row {}, col {}) → LED {}".format(
row, col, "ON" if ledOn[row][col] else "OFF"))

prevState[row][col] = pressed

time.sleep_ms(20)

🔗Otvorite cijeli primjer

Examples/ButtonLEDControl.py u commitu 36d3def

→

Očekivani rezultat nakon što dvaput pritisnete tipku u retku 0, stupcu 0:

ShellMicroPython
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. Kada pločica ne odgovara, InputronicGrid() izaziva iznimku s porukom Inputronic GRID not found. Check wiring.

Korištene funkcije​

InputronicGrid(i2c=None, address=INPUTRONIC_GRID_DEFAULT_ADDR)returns InputronicGrid

Stvara objekt upravljačkog programa i provjerava odgovara li pločica. Ako je i2c ostavljen na None, stvara I2C(0, scl=Pin(22), sda=Pin(21)) na portovima koje modul prepoznaje (ESP32, ESP8266 i jedna Soldered pločica), a na portu koji ne prepoznaje izaziva iznimku.

ReturnsObjekt upravljačkog programa. Izaziva iznimku s porukom 'Inputronic GRID not found. Check wiring.' kada pločica ne odgovara.

Parametri

TipNazivOpis
I2Ci2cGotov objekt machine.I2C. Neobavezno.
intaddressI2C adresa pločice. Neobavezno, zadano 0x30.
grid.clearLEDs()returns None

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

ReturnsNišta.

grid.readPad(row, col)returns bool

Pita pločicu je li jedna tipka trenutačno pritisnuta, prema njezinu mjestu u mreži.

ReturnsTrue dok je tipka pritisnuta. False kada nije pritisnuta ili kada I2C komunikacija ne uspije.

Parametri

TipNazivOpis
introwRedak, od 0 do 3, odozgo prema dolje.
intcolStupac, od 0 do 3, slijeva nadesno.
grid.setLED(row, col, r, g, b, intensity=128)returns None

Postavlja boju LED diode ispod jedne tipke, prema njezinu mjestu u mreži. Svaka vrijednost boje množi se s intensity / 255 prije slanja. I2C pogreška se zanemaruje.

ReturnsNišta.

Parametri

TipNazivOpis
introwRedak, od 0 do 3.
intcolStupac, od 0 do 3.
intrCrvena, od 0 do 255.
intgZelena, od 0 do 255.
intbPlava, od 0 do 255.
intintensitySvjetlina, od 0 (isključeno) do 255 (puna). Neobavezno, zadano 128.

Sve zajedno​

InputronicGrid() postavlja I2C i provjerava pločicu, a clearLEDs() započinje sa svim LED diodama ugašenima. Petlja svakih 20 ms čita svih 16 tipki funkcijom readPad() i uspoređuje svaku s njezinim stanjem iz prethodnog prolaza, pa se tipka koja ostaje pritisnuta računa kao jedan pritisak. Kod novog pritiska primjer mijenja zapis te tipke u ledOn i poziva setLED() s istim retkom i stupcem, punim intenzitetom u boji retka ili s 0, 0, 0 da je ugasi.