PinLab › Projekti › Tipka prižge LED
#02 Začetnik ⏱ 20 min

ESP32: Tipka prižge LED

Prvi digitalni vhod. Pritisneš tipko → LED sveti. Naučiš se, kaj je pull-up upor in zakaj pin bere »1«, ko ni nič pritisnjeno.

Odpri interaktivno v 3D →

Kaj se naučiš

INPUT_PULLUP in zakaj je potrebendigitalRead in obrnjena logikaPostavitev tipke čez utorDve letvi GND

Potrebuješ

Kako deluje

Tipka na breadboardu stoji čez utor. Znotraj sta nožici na isti strani trajno spojeni; pritisk spoji še obe strani. Ko povežemo diagonalno nasprotni nožici (25 zgoraj, 27 spodaj), zagotovo gremo skozi stikalni kontakt.

Težava pri vhodu: če pin ni povezan na nič, »lebdi« in bere naključno 0 ali 1. Pull-up upor (vgrajen v ESP32, ~45 kΩ) pin nežno vleče na 3,3 V → stabilen HIGH. Tipka ga spoji na GND in »premaga« upor → LOW. Zato je logika obrnjena: if (digitalRead(BTN) == LOW) = pritisnjeno.

Vezava

OdDoZakaj
ESP32 · D4 (GPIO 4)Tipka, nožica v stolpcu 25 (zgoraj)Pin je vhod z vklopljenim notranjim pull-upom: brez pritiska bere HIGH (1).
Tipka, diagonalna nožica (stolpec 27, spodaj)letev −Ko pritisneš, tipka spoji GPIO 4 neposredno na GND → pin bere LOW (0).
ESP32 · D2LED → 220 Ω → letev −Enako kot v projektu 1 — izhod, ki ga krmilimo.
ESP32 · GND (oba pina)letvi − zgoraj in spodajZgornja in spodnja letev nista spojeni — zato uporabimo oba GND pina.

Korak za korakom

  1. LED (anoda 19c, katoda 20c) in upor 20a → letev −, kot v projektu 1.
  2. Tipka: postavi jo tako, da zajame vrstici e in f (čez utor), nožici v stolpcih 25 in 27.
  3. Žica D4 → 25a (zgornja polovica).
  4. Kratka žica 27j → spodnja letev −.
  5. GND → zgornja letev −, GND (drugi pin) → spodnja letev −.
  6. Naloži kodo. LED sveti, dokler držiš tipko. Odpri Serial Monitor (115200) in opazuj vrednosti.

Koda (Arduino IDE)

// Projekt 2: Tipka prižge LED (z notranjim pull-upom)
const int LED_PIN = 2;
const int BTN_PIN = 4;

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(BTN_PIN, INPUT_PULLUP);  // notranji upor proti 3,3 V
  Serial.begin(115200);
}

void loop() {
  int state = digitalRead(BTN_PIN); // 1 = spuščena, 0 = pritisnjena

  if (state == LOW) {
    digitalWrite(LED_PIN, HIGH);
    Serial.println("Pritisnjeno!");
  } else {
    digitalWrite(LED_PIN, LOW);
  }
  delay(20); // malo »umiritve« (debounce)
}

Tipične težave

Tipka »deluje« tudi brez pritiska? Nožici sta na istem paru — premakni eno nožico v drug stolpec.
Trepetanje v Serial Monitorju ob pritisku = bouncing. Rešitev: delay(20–50) ali preverjanje z millis().
GPIO 34–39 za to ne bodo delovali — na njih ni pull-upa.

Odpri interaktivno v 3D →

Več projektov (še 7) z brezplačno prijavo v tečaju. Projekti →