🛗 آسانسور سه طبقه
سه دکمه، سه LED طبقه، سروو بهجای کابین و بوق «دینگ» — یک ماشین حالت کامل.
سطح: چالشی ⭐⭐⭐ · مود: آردوینو (سهبعدی + کد)
قطعات لازم
کد کامل پروژه
// آسانسور سه طبقه: حالتها = ایستاده، در حرکت، در باز
#include <Servo.h>
Servo cab; // the servo angle is the cab's height
const int buttons[3] = {2, 3, 4}; // floor buttons (to GND)
const int lamps[3] = {5, 6, 7}; // floor LEDs
const int BUZZ = 8;
const int IDLE = 0, MOVING = 1, DOOR_OPEN = 2;
int state = IDLE;
int floorNow = 0, target = 0, angle = 0;
unsigned long t = 0;
void setup() {
for (int i = 0; i < 3; i++) {
pinMode(buttons[i], INPUT_PULLUP);
pinMode(lamps[i], OUTPUT);
}
cab.attach(9);
cab.write(0);
Serial.begin(9600);
}
void loop() {
unsigned long now = millis();
if (state == IDLE) { // event: a button
for (int i = 0; i < 3; i++) {
if (digitalRead(buttons[i]) == LOW && i != floorNow) {
target = i;
state = MOVING;
Serial.print("raftan be tabaghe ");
Serial.println(target);
}
}
} else if (state == MOVING && now - t >= 20) {
t = now; // one degree every 20 ms
int goal = target * 90;
if (angle < goal) angle++;
if (angle > goal) angle--;
cab.write(angle);
if (angle == goal) { // event: arrived
floorNow = target;
state = DOOR_OPEN;
tone(BUZZ, 880, 200);
Serial.println("ding! dar baz");
}
} else if (state == DOOR_OPEN && now - t >= 3000) {
state = IDLE; // event: door timer
Serial.println("dar baste shod");
}
for (int i = 0; i < 3; i++) digitalWrite(lamps[i], i == floorNow);
}
چطور اجرایش کنم؟
- شبیهساز تینکرکد فارسی را باز کن و «مود آردوینو» را انتخاب کن.
- از پنل «نمونهها»، «آسانسور سه طبقه» را بارگذاری کن — مدار و کد با هم میآیند.
- دکمهی اجرا ▶ را بزن و خروجی Serial و رفتار قطعات را تماشا کن.
- حالا کد را تغییر بده — عددها، پینها، ترتیب — و دوباره اجرا کن!