⚡ درس 43: وقفه: گوشبهزنگ همیشگی
وقتی هیچوقت نباید یک رویداد را از دست بدهی.
سطح: پیشرفته · زمان: حدود 13 دقیقه · مفاهیم: attachInterrupt، volatile، ISR
قدمهای این درس
- وقفه مثل زنگ در است
- قدم ۱ — فقط پایههای ۲ و ۳
- قدم ۲ — volatile و قوانین ISR
- چالش: کِی واقعاً وقفه لازم است؟
نمونهای از کد این درس
const int button = 2, led = 13;
volatile int count = 0; // volatile چون در ISR عوض میشود
volatile bool changed = false;
void onPress() { // ISR — کوتاه و ساده
count++;
changed = true;
}
void setup() {
pinMode(button, INPUT_PULLUP);
pinMode(led, OUTPUT);
attachInterrupt(digitalPinToInterrupt(button), onPress, FALLING);
Serial.begin(9600);
}
void loop() {
// کار سنگین اینجاست، نه در ISR
digitalWrite(led, HIGH);
delay(400);
digitalWrite(led, LOW);
delay(400);
if (changed) {
changed = false;
Serial.print("shomare:");
Serial.println(count);
}
}
چرا این درس؟
دورهی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیهساز انجام میدهی — مدار واقعی میچینی، کد واقعی اجرا میکنی و نتیجه را همان لحظه میبینی. این درس روی درسهای قبلی ساخته شده، پس اگر تازه شروع کردهای از درس ۱ بیا!
این درس را رایگان در شبیهساز شروع کن 🎓