AXV

Tugma Orqali LED Holatini Boshqarish

Holat, millis(), heartbeat va bitta tugma bilan 4 ta rejim

9-sinfIoT4-hafta · 10-dars

Takrorlash: 8–9-darslar

INPUT_PULLUP

Bosilmaganda HIGH, bosilganda LOW.

Toggle

Bir bosish — yoniq qoladi, yana bosish — o'chadi.

Debounce

Kontakt 5–20 ms dirillaydi — soxta impulslarni filtrlaymiz.

01

Holat va dastur tuzilishi

Kirish → hodisa → holat → chiqish

Holat (state) nima?

Kirish Hodisa Holat Chiqish
Holat faqat hodisa bo'lganda o'zgaradi — tugma bosib turilsa ham bir marta.

O'qiluvchan kod


#define Pressed  LOW    // tugma bosilgan
#define Released HIGH   // qo'yib yuborilgan

const byte switchOne = 7;   // 1-tugma pini
const byte LED_One   = 10;  // 1-LED pini

#define

if (holat == Pressed) — == LOW dan tushunarliroq.

const byte

1 bayt (0–255). UNO'da atigi 2 KB SRAM.

Active-LOW: diqqat

Bizning sxema

Pin → rezistor → LED → GND. Yoqish — HIGH.
VS

Uslubiy kod

5V → LED → pin. #define LEDon LOW — yoqish LOW.
Sxemaga mos HIGH/LOW tanlang, aks holda LED teskari ishlaydi.

Yordamchi funksiya


bool checkSwitch(byte pin, byte &lastState) {
  byte current = digitalRead(pin);
  if (current != lastState) {     // holat o'zgardimi?
    lastState = current;          // eslab qolamiz
    if (current == Pressed) return true;
  }
  return false;
}

Funksiya true ni faqat bosilgan lahzada qaytaradi.

Nega & belgisi?

byte lastState

bosing

Nusxa uzatiladi. Funksiyadan chiqqach o'zgarish unutiladi — tugma har safar «yangi bosildi».

byte &lastState

bosing

Havola: funksiya asl o'zgaruvchini yangilaydi. Holat saqlanadi.

02

delay() o'rniga millis()

Bir vaqtda bir nechta ish

delay() muammosi

delay(700)

Arduino 0,7 s hech narsa qilmaydi. Shu paytda bosilgan tugma yo'qoladi.
VS

millis()

Faqat vaqtni tekshiradi. loop() to'xtamaydi, tugma darhol seziladi.
0
amal sekundiga (UNO)
0
tugma so'rovi oralig'i
0
heartbeat

millis() andozasi


unsigned long oxirgiVaqt = 0;
const unsigned long INTERVAL = 700;

void loop() {
  if (millis() - oxirgiVaqt >= INTERVAL) {
    oxirgiVaqt = millis();
    digitalWrite(13, !digitalRead(13));   // heartbeat
  }
  // boshqa ishlar to'xtovsiz
}
Vaqt o'zgaruvchisi faqat unsigned long: int 33 soniyada to'lib ketadi.

Heartbeat LED

Nima?

13-pindagi LED har 700 ms da almashadi.

Bir tekis

Dastur «tirik», loop() qotmagan.

To'xtadi

Dastur qayerdadir bloklangan — delay() yoki cheksiz sikl.

Mini-test

millis() qiymatini qaysi turdagi o'zgaruvchida saqlash kerak?

millis() juda katta sonlar qaytaradi; int 32 767 da to'lib, manfiy bo'ladi.
03

Rejimlar

Bitta tugma — 4 ta holat

Holat mashinasi

0 · O'CHIQ

LED doim o'chiq.

1 · YONIQ

LED doim yoniq.

2 · SEKIN

500 ms da almashadi.

3 · TEZ

100 ms da almashadi, so'ng yana 0.

mode = (mode + 1) % 4; — 3 dan keyin qoldiq 0.

switch / case


switch (mode) {
  case 0: digitalWrite(LED, LOW);  break;
  case 1: digitalWrite(LED, HIGH); break;
  case 2: miltilla(500);           break;
  case 3: miltilla(100);           break;
}
miltilla() ichida ham millis() — tugma miltillash paytida ham seziladi.

Serial Monitor

Tugma bosildi
mode o'zgardi
Rejim: SEKIN
Har aylanishda emas — faqat holat o'zgarganda yozing.

Uslubiy qo'llanma sxemasi

ElementPinVazifa
switchOne7LED_One ni almashtiradi
switchTwo8LED_One va LED_Two
switchThree9LED_Two va LED_Three
LED_One/Two/Three10/11/12holat indikatorlari
heartBeatLED13700 ms miltillash

Mini-test

mode = 3 bo'lganda mode = (mode + 1) % 4; dan keyin mode nechaga teng?

4 % 4 = 0 — rejim yana boshidan boshlanadi.

Amaliy topshiriqlar 30 daqiqa

OsonBitta tugma bilan Qizil va Yashil LEDni almashib yoqing.
O'rta4 rejimli chiroq + Serial Monitor, delay() siz.
O'rtaHeartbeat (13-pin) va Toggle (9-pin) bir vaqtda, checkSwitch() bilan.
QiyinUslubiy sxema: 3-tugma — Reset, Serial'ga LED: 1 0 1.

Dars xulosasi

Holat

Hodisa bo'lganda o'zgaradi, o'zgaruvchida saqlanadi.

millis()

Bloklamaydigan kod, heartbeat, 50 ms debounce.

Rejimlar

% 4 va switch/case.

Uyga vazifa: 4 rejimli chiroq va heartbeat, Tinkercad'da.

Keyingi dars: DIP switch

Breadboardda DIP switch (DPST) va LED bilan oddiy elektron sikl

4-hafta · 11-dars