AXV

Push-Button va LED Interfeysi (2-qism)

Interaktiv Toggle mantig'i, kontaktlar dirillashi (Bounce & Debounce) va ko'p tugmali tizimlar

9-sinfIoT3-hafta · 9-dars
01

Toggle (Trigged) Mantig'i

Tugmani bir marta bosganda holatni doimiy saqlab qolish siri

Bosib Turish (Hold) vs Bosib Qo'yib Yuborish (Toggle)

Hold (Bosib Turish)

LED faqat tugma barmog'ingiz ostida ushlab turilgandagina yonadi.

Qo'l olinsa zudlik bilan o'chadi (qo'ng'iroq, siren).

Toggle (Holatni Almashtirish)

1 marta bosildi: LED yondi va yoniq qoladi.

Yana 1 marta bosildi: LED o'chdi va o'chiq qoladi.

Xona chirog'i, televizor, kompyuter yoqish tugmasi.

Toggle Jarayonining To'lqin Diagrammasi

Tugma bosilishi: 1-bosish 2-bosish LED Holati: YONIQ (HIGH) O'CHIQ (LOW) Vaqt o'qi
02

Kontakt Dirillashi (Bounce)

Mexanik sakrashlar va dasturiy Debounce filtri

Kontaktlar Nega Dirillaydi? (Button Bouncing)

Mikroskopik Sakrashlar

Tugma ichidagi metall kontaktlar bir-biriga urilganda elastik prujina kabi 5–20 millisekund davomida sakraydi.

Ko'zimiz buni sezmaydi, lekin mikrokontroller uchun bu uzoq vaqtdir!

16 MGts Tezlikning Oqibati

Arduino 10 millisekund ichida 20–30 marta tekshirib ulguradi.

Bitta oddiy bosishni dastur 10 marta bosildi deb o'ylab, LEDni tasodifiy o'chirib qo'yishi mumkin.

Osiloskopdagi Tebranish va Debounce

Filtrsiz signal (Shovqinli): Tebranish (10 ms) Debounce qilingan signal: Toza va barqaror signal 50 ms filtr
03

Holat O'zgarishini Aniqlash

State Change Detection va Toggle C++ algoritmi

O'tish Lahzasini Usulash (Edge Detection)

Oldingi Holatni Saqlash

Dasturda lastButtonState o'zgaruvchisi kiritiladi.

Har siklda joriy holat avvalgisi bilan solishtiriladi:

reading != lastButtonState

Bosilish Lahzasi (LOW)

Agar holat o'zgargan bo'lsa VA yangi holat LOW bo'lsa:

ledState = !ledState;

LED holati darhol teskarisiga aylanadi (0 -> 1, 1 -> 0).

To'liq Toggle C++ Kodi

const int btnPin = 2;
const int ledPin = 9;

int ledState = LOW;
int lastBtn = HIGH;

void setup() {
  pinMode(btnPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int reading = digitalRead(btnPin);

  // Agar tugma yangi bosilgan bo'lsa:
  if (reading != lastBtn && reading == LOW) {
    ledState = !ledState;           // Invert (Toggle)
    digitalWrite(ledPin, ledState); // Yangi holatni uzatish
    delay(50);                      // Debounce filtri
  }
  lastBtn = reading;                // Holatni yangilash
}

Ko'p Tugmali Tizim Arxitekturasi

Tugma 1 (Pin 2) Tugma 2 (Pin 3) Arduino Uno Interaktiv Mantiq State Machine LED 1 LED 2

Interaktiv Kartochkalar

Debounce uchun 50 ms kechikish nega kerak?

Javobni ko'rish uchun aylantiring

Dirillashni Yo'qotish

Metall kontaktlarning mikroskopik sakrashlari paytidagi soxta signallarni e'tiborga olmaslik uchun.

!ledState ifodasi nimani anglatadi?

Javobni ko'rish uchun aylantiring

Mantiqiy Inkor (Invert)

Agar 0 bo'lsa 1 ga, agar 1 bo'lsa 0 ga almashtiradi (Toggle mantig'i).

Tezkor Test Savoli

Tugma 1 marta bosilganda LED yoniq qolishi va ikkinchi marta bosilganda o'chishi uchun qaysi dasturiy mantiq qo'llaniladi?
A) Faqat delay(10000); qo'yish kerak
B) Faqat analogRead() funksiyasi ishlatiladi
C) Holat o'zgarishini aniqlash va ledState = !ledState (Toggle) mantig'i
D) Hech qanday kod yozish shart emas
04

Xulosa va Keyingi Qadam

3-hafta 9-dars yakunlari

Bugungi Darsda Nimani O'rgandik?

Toggle Mantig'i

Oddiy bosib turishdan farqli o'laroq, holatni eslab qoluvchi professional interfeys qurdik.

Debounce Texnikasi

Mexanik kontakt tebranishini 50 ms filtr orqali tozalash va barqarorlikni ta'minlashni o'rgandik.

Ko'p Tugmali Boshqaruv

Bir nechta tugmalar va LEDlar bilan turli rejimlar va Master Switch mantiqlarini sinovdan o'tkazdik.