🚨 درس 46: دزدگیر کامل
مسلح، هشدار، غیرمسلح — سه حالت و یک رمز.
سطح: پیشرفته · زمان: حدود 18 دقیقه · مفاهیم: ماشین حالت، کیپد، LCD
قدمهای این درس
- اول نقشه، بعد کد
- قدم ۱ — سه حالت، یک متغیر
- قدم ۲ — مهلت خروج
- چالش: LCD و شمارش معکوس
نمونهای از کد این درس
#include <Keypad.h>
const int pir = 11, buzzer = 8, led = 13;
const byte ROWS = 4, COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},{'4','5','6','B'},
{'7','8','9','C'},{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad pad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
const int DISARMED = 0, ARMED = 1, ALARMING = 2;
int state = DISARMED;
String entered = "";
const String CODE = "1234";
void setup() {
pinMode(pir, INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
Serial.println("gheyre mosallah");
}
void loop() {
char k = pad.getKey();
if (k) {
if (k == '#') {
if (entered == CODE) {
state = (state == DISARMED) ? ARMED : DISARMED;
Serial.println(state == ARMED ? "mosallah" : "gheyre mosallah");
noTone(buzzer);
} else {
Serial.println("ramz eshtebah");
}
entered = "";
} else if (k == '*') {
entered = "";
} else {
entered += k;
}
}
if (state == ARMED && digitalRead(pir) == HIGH) {
state = ALARMING;
Serial.println("HOSHDAR!");
}
digitalWrite(led, state != DISARMED);
if (state == ALARMING) tone(buzzer, 2000);
}
چرا این درس؟
دورهی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیهساز انجام میدهی — مدار واقعی میچینی، کد واقعی اجرا میکنی و نتیجه را همان لحظه میبینی. این درس روی درسهای قبلی ساخته شده، پس اگر تازه شروع کردهای از درس ۱ بیا!
این درس را رایگان در شبیهساز شروع کن 🎓