🚨 درس 46: دزدگیر کامل

مسلح، هشدار، غیرمسلح — سه حالت و یک رمز.

سطح: پیشرفته · زمان: حدود 18 دقیقه · مفاهیم: ماشین حالت، کی‌پد، LCD

قدم‌های این درس

  1. اول نقشه، بعد کد
  2. قدم ۱ — سه حالت، یک متغیر
  3. قدم ۲ — مهلت خروج
  4. چالش: 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);
}

چرا این درس؟

دوره‌ی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیه‌ساز انجام می‌دهی — مدار واقعی می‌چینی، کد واقعی اجرا می‌کنی و نتیجه را همان لحظه می‌بینی. این درس روی درس‌های قبلی ساخته شده، پس اگر تازه شروع کرده‌ای از درس ۱ بیا!

این درس را رایگان در شبیه‌ساز شروع کن 🎓

درس‌های دیگر دوره

🏠

درس 45: خانه‌ی هوشمند

🕐

درس 47: ساعت دیجیتال