PinLab › Проекти › Копче пали LED
#02 Почетник ⏱ 20 мин

ESP32: Копче пали LED

Првиот дигитален влез. Притискаш копче → LED свети. Учиш што е pull-up отпорник и зошто пинот чита „1“ кога ништо не е притиснато.

Отвори го интерактивно во 3D →

Што учиш

INPUT_PULLUP и зошто е потребенdigitalRead и обратна логикаПоставување на тастер преку жлеботДве GND шини

Потребно

Како работи

Копчето на breadboard-от стои преку жлебот. Внатре, двете нозе на иста страна се трајно споени; притискањето ги спојува и двете страни. Кога поврзуваме дијагонално спротивни нозе (25 горе, 27 долу), сигурно минуваме низ прекинувачкиот контакт.

Проблемот со влез: ако пинот не е поврзан на ништо, тој „лебди“ и чита случајно 0 или 1. Pull-up отпорник (вграден во ESP32, ~45 kΩ) нежно го влече пинот на 3.3 V → стабилно HIGH. Копчето го спојува на GND и го „победува“ отпорникот → LOW. Затоа логиката е обратна: if (digitalRead(BTN) == LOW) = притиснато.

Поврзување

ОдДоЗошто
ESP32 · D4 (GPIO 4)Копче, нога во колона 25 (горе)Пинот е влез со вклучен внатрешен pull-up: без притискање чита HIGH (1).
Копче, дијагонална нога (колона 27, долу)− шинаКога притиснеш, копчето го спојува GPIO 4 директно на GND → пинот чита LOW (0).
ESP32 · D2LED → 220 Ω → − шинаИсто како во проект 1 — излезот што го контролираме.
ESP32 · GND (двата пина)− шини горе и долуГорната и долната шина не се споени — затоа користиме двата GND пина.

Чекор по чекор

  1. LED (анода 19c, катода 20c) и отпорник 20a → − шина, како во проект 1.
  2. Копчето: постави го да ги зафати редовите e и f (преку жлебот), нозе во колони 25 и 27.
  3. Жица D4 → 25a (горна половина).
  4. Кратка жица 27j → − шина долу.
  5. GND → − шина горе, GND (вториот пин) → − шина долу.
  6. Качи го кодот. LED-та свети додека држиш копче. Отвори Serial Monitor (115200) и гледај ги вредностите.

Код (Arduino IDE)

// Проект 2: Копче пали LED (со внатрешен pull-up)
const int LED_PIN = 2;
const int BTN_PIN = 4;

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(BTN_PIN, INPUT_PULLUP);  // внатрешен отпорник кон 3.3 V
  Serial.begin(115200);
}

void loop() {
  int state = digitalRead(BTN_PIN); // 1 = пуштено, 0 = притиснато

  if (state == LOW) {
    digitalWrite(LED_PIN, HIGH);
    Serial.println("Притиснато!");
  } else {
    digitalWrite(LED_PIN, LOW);
  }
  delay(20); // мало „смирување“ (debounce)
}

Типични проблеми

Копчето „работи“ и без притискање? Ногите ти се на ист пар — помести една нога во друга колона.
Треперење во Serial Monitor при притискање = bouncing. Решение: delay(20–50) или проверка со millis().
GPIO 34–39 нема да работат за ова — нема pull-up на нив.

Отвори го интерактивно во 3D →

Повеќе проекти (уште 7) со бесплатна најава во курсот. Проекти →