🛗 ماموریت ۹۷: آسانسور با ماشین حالت
سه دکمه (D2–D4) طبقه را صدا میزنند، سه LED (D11–D13) طبقه را نشون میدن و سروو D6 کابینه. حالتها: IDLE، MOVING، DOORS با switch.
سطح: چالشی ⭐⭐⭐ · مود: آردوینو — با کد
هدفها
- ☐ یه آردوینو روی صحنه باشه
- ☐ سه دکمه
- ☐ سه LED
- ☐ یه سروو یا استپر
- ☐ ماشین حالت با switch
- ☐ حالت حرکت
- ☐ شبیهسازی در حال اجرا
قطعههای لازم
- Arduino Uno
- کلید فشاری × ۳
- مقاومت 220Ω × ۳
- LED سبز
- LED زرد
- LED قرمز
- سروو موتور
💡 گیر کردی؟ داخل شبیهساز راهنما را ببین، و اگر باز هم نشد دکمهی «برام حلش کن» مدار را برایت میچیند تا ببینی چطور کار میکند.
جواب کامل
اول خودت امتحان کن! بعد جواب را ببین 👀
سیمکشی
- Arduino Uno (D2) ⟷ Push Button (PIN_A1)
- Push Button (PIN_A2) ⟷ Arduino Uno (GND2)
- Arduino Uno (D3) ⟷ Push Button (PIN_A1)
- Push Button (PIN_A2) ⟷ Arduino Uno (GND2)
- Arduino Uno (D4) ⟷ Push Button (PIN_A1)
- Push Button (PIN_A2) ⟷ Arduino Uno (GND2)
- Arduino Uno (D11) ⟷ مقاومت 220Ω (PIN1)
- مقاومت 220Ω (PIN2) ⟷ LED (Green) (ANODE)
- LED (Green) (CATHODE) ⟷ Arduino Uno (GND1)
- Arduino Uno (D12) ⟷ مقاومت 220Ω (PIN1)
- مقاومت 220Ω (PIN2) ⟷ LED زرد (ANODE)
- LED زرد (CATHODE) ⟷ Arduino Uno (GND1)
- Arduino Uno (D13) ⟷ مقاومت 220Ω (PIN1)
- مقاومت 220Ω (PIN2) ⟷ LED (Red) (ANODE)
- LED (Red) (CATHODE) ⟷ Arduino Uno (GND1)
- Arduino Uno (VCC5) ⟷ سروو موتور (VCC)
- سروو موتور (GND) ⟷ Arduino Uno (GND2)
- Arduino Uno (D6) ⟷ سروو موتور (SIG)
کد
// Elevator: 3 call buttons, 3 floor LEDs, a servo as the car (0/90/180 deg)
#include <Servo.h>
const int IDLE = 0;
const int MOVING = 1;
const int DOORS = 2;
int buttons[3] = {2, 3, 4};
int leds[3] = {11, 12, 13};
Servo car;
int state = IDLE;
int floorNow = 0;
int target = 0;
int angle = 0;
unsigned long doorsSince = 0;
void setup() {
Serial.begin(9600);
for (int i = 0; i < 3; i++) {
pinMode(buttons[i], INPUT_PULLUP);
pinMode(leds[i], OUTPUT);
}
car.attach(6);
car.write(0);
digitalWrite(leds[0], HIGH);
}
void loop() {
switch (state) {
case IDLE:
for (int i = 0; i < 3; i++) {
if (digitalRead(buttons[i]) == LOW && i != floorNow) {
target = i;
state = MOVING;
digitalWrite(leds[floorNow], LOW);
Serial.print("Going to floor ");
Serial.println(target);
}
}
break;
case MOVING:
if (angle < target * 90) angle++;
if (angle > target * 90) angle--;
car.write(angle);
if (angle == target * 90) {
floorNow = target;
digitalWrite(leds[floorNow], HIGH);
doorsSince = millis();
state = DOORS;
Serial.println("Ding! Doors open");
}
break;
case DOORS:
if (millis() - doorsSince > 2000) state = IDLE;
break;
}
delay(10);
}
ماموریتهای مشابه
🌞
ماموریت ۹۶: ردیاب خورشید
🥤
ماموریت ۹۸: دستگاه فروش خودکار
🎯
ماموریت ۹۵: کنترل تناسبی سروو
🐍
ماموریت ۹۹: بازی مار روی ماتریس
📚 برای یاد گرفتن پایهها سری به دورهی آموزش آردوینو بزن · 🎯 همهی ماموریتها