Holat, millis(), heartbeat va bitta tugma bilan 4 ta rejim
9-sinfIoT4-hafta · 10-darsBosilmaganda HIGH, bosilganda LOW.
Bir bosish — yoniq qoladi, yana bosish — o'chadi.
Kontakt 5–20 ms dirillaydi — soxta impulslarni filtrlaymiz.
Kirish → hodisa → holat → chiqish
#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
if (holat == Pressed) — == LOW dan tushunarliroq.
1 bayt (0–255). UNO'da atigi 2 KB SRAM.
HIGH.#define LEDon LOW — yoqish LOW.
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.
Nusxa uzatiladi. Funksiyadan chiqqach o'zgarish unutiladi — tugma har safar «yangi bosildi».
Havola: funksiya asl o'zgaruvchini yangilaydi. Holat saqlanadi.
Bir vaqtda bir nechta ish
loop() to'xtamaydi, tugma darhol seziladi.
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
}
unsigned long: int 33 soniyada to'lib ketadi.13-pindagi LED har 700 ms da almashadi.
Dastur «tirik», loop() qotmagan.
Dastur qayerdadir bloklangan — delay() yoki cheksiz sikl.
millis() qiymatini qaysi turdagi o'zgaruvchida saqlash kerak?
Bitta tugma — 4 ta holat
LED doim o'chiq.
LED doim yoniq.
500 ms da almashadi.
100 ms da almashadi, so'ng yana 0.
mode = (mode + 1) % 4; — 3 dan keyin qoldiq 0.
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.| Element | Pin | Vazifa |
|---|---|---|
| switchOne | 7 | LED_One ni almashtiradi |
| switchTwo | 8 | LED_One va LED_Two |
| switchThree | 9 | LED_Two va LED_Three |
| LED_One/Two/Three | 10/11/12 | holat indikatorlari |
| heartBeatLED | 13 | 700 ms miltillash |
mode = 3 bo'lganda mode = (mode + 1) % 4; dan keyin mode nechaga teng?
delay() siz.checkSwitch() bilan.LED: 1 0 1.Hodisa bo'lganda o'zgaradi, o'zgaruvchida saqlanadi.
Bloklamaydigan kod, heartbeat, 50 ms debounce.
% 4 va switch/case.
Uyga vazifa: 4 rejimli chiroq va heartbeat, Tinkercad'da.
Breadboardda DIP switch (DPST) va LED bilan oddiy elektron sikl
4-hafta · 11-dars