RP2350-Zero/GPIO
Digitálny vstup/výstup
Toto je najzákladnejšia funkcia každého pinu – pin má iba dva možné stavy:
- HIGH – napätie (na RP2350-Zero typicky 3,3 V)
- LOW – 0 V
Predtým, než pin použiješ, treba mu povedať, či bude vstup alebo výstup – na to slúži pinMode():
OUTPUT– pin bude dávať napätie do danej súčiastky a bude ju ovládať (napr. LED)INPUTaleboINPUT_PULLUP– pin bude prijímať napätie a čítať ho ako bity 0-0.8V -> logická 0, 2V-5V -> logická 1 (napr. tlačidlo)
Digitálny výstup – 3-farebný LED modul
Na zapnutie/vypnutie slúži digitalWrite(pin, HIGH) alebo digitalWrite(pin, LOW). LED modul má tri samostatné piny (červená, zelená, modrá), takže ich ovládame nezávisle – kombináciou zapnutých farieb vieš okrem R/G/B poskladať aj napr. žltú (R+G) alebo bielu (R+G+B):
const int PIN_LED_R = 10; // uprav podla realneho zapojenia
const int PIN_LED_G = 11;
const int PIN_LED_B = 12;
void setup() {
pinMode(PIN_LED_R, OUTPUT);
pinMode(PIN_LED_G, OUTPUT);
pinMode(PIN_LED_B, OUTPUT);
}
void loop() {
// cervena
digitalWrite(PIN_LED_R, HIGH);
digitalWrite(PIN_LED_G, LOW);
digitalWrite(PIN_LED_B, LOW);
delay(500);
// zelena
digitalWrite(PIN_LED_R, LOW);
digitalWrite(PIN_LED_G, HIGH);
digitalWrite(PIN_LED_B, LOW);
delay(500);
// modra
digitalWrite(PIN_LED_R, LOW);
digitalWrite(PIN_LED_G, LOW);
digitalWrite(PIN_LED_B, HIGH);
delay(500);
// vsetko vypnute
digitalWrite(PIN_LED_R, LOW);
digitalWrite(PIN_LED_G, LOW);
digitalWrite(PIN_LED_B, LOW);
delay(500);
}
Poznámka: kód počíta s tým, že HIGH = zapnutá farba (tzv. common cathode zapojenie). Ak má tvoj modul spoločnú anódu (common anode), bude to presne naopak – LOW zapne, HIGH vypne.
Digitálny vstup – touch senzor
Tlačidlo alebo spínač funguje presne opačne – program z pinu číta pomocou digitalRead(). Problém je, že keď nie je stlačené, pin "visí vo vzduchu" a jeho hodnota by bola náhodná (tzv. floating pin). Preto sa väčšinou používa INPUT_PULLUP – RP2350 si interne pripojí pin cez odpor na HIGH, a spínač len skratuje pin na GND, keď je aktivovaný. Výsledok: neaktivované = HIGH, aktivované = LOW (teda "naopak", ako by si možno čakal).
Príklad na touch senzore (GPIO7):
const int PIN_TOUCH = 7;
void setup() {
pinMode(PIN_TOUCH, INPUT_PULLUP);
Serial.begin(115200);
}
void loop() {
int stav = digitalRead(PIN_TOUCH);
if (stav == LOW) {
Serial.println("Senzor je aktivovany");
} else {
Serial.println("Senzor nie je aktivovany");
}
delay(200);
}
Poznámka: ak by si senzor zapojil bez INPUT_PULLUP (teda ako obyčajný INPUT) a bez vlastného rezistora, hodnoty by mohli "blikať" náhodne aj bez aktivácie – to je typický príznak floating pinu.