🥤 درس 95: دستگاه فروش خودکار
کیپد، LCD و سروو: اعتبار، کد کالا و باقی پول.
سطح: پیشرفته · زمان: حدود 20 دقیقه · مفاهیم: کیپد، LCD، آرایه، منطق
قدمهای این درس
- چرا؟ یک فروشندهی بیخطا
- قدم ۱ — مدار
- قدم ۲ — کد: اعتبار، کالا، باقی پول
- اشتباه رایج: خرید بدون انتخاب
- چالش: موجودی انبار
نمونهای از کد این درس
// دستگاه فروش: A = سکه ۱۰۰۰، B = اسکناس ۵۰۰۰، ۱..۳ = کالا، # = خرید، * = پس گرفتن
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <Servo.h>
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);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo gate;
const long prices[4] = {0, 2000, 3500, 5000}; // product 1..3 (0 unused)
long credit = 0;
int choice = 0;
void show(long top, long bottom) {
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Etebar: "); lcd.print(top);
lcd.setCursor(0, 1); lcd.print("Kala: "); lcd.print(choice);
lcd.print(" $"); lcd.print(bottom);
}
void setup() {
lcd.init();
lcd.backlight();
gate.attach(11);
gate.write(0);
show(credit, 0);
}
void loop() {
char k = pad.getKey();
if (!k) return;
if (k == 'A') credit = credit + 1000;
else if (k == 'B') credit = credit + 5000;
else if (k == '1') choice = 1;
else if (k == '2') choice = 2;
else if (k == '3') choice = 3;
else if (k == '*') { // cancel: give all the money back
lcd.clear(); lcd.print("Bargasht: "); lcd.print(credit);
credit = 0; choice = 0; delay(1500);
} else if (k == '#' && choice > 0) {
if (credit >= prices[choice]) {
long change = credit - prices[choice];
lcd.clear(); lcd.print("Befarmaid :)");
lcd.setCursor(0, 1); lcd.print("Baghi: "); lcd.print(change);
gate.write(90); delay(1000); gate.write(0); // drop the product
delay(1000);
credit = 0;
} else {
lcd.clear(); lcd.print("Kam ast: "); lcd.print(prices[choice] - credit);
delay(1500);
}
choice = 0;
}
show(credit, prices[choice]);
}
چرا این درس؟
دورهی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیهساز انجام میدهی — مدار واقعی میچینی، کد واقعی اجرا میکنی و نتیجه را همان لحظه میبینی. این درس روی درسهای قبلی ساخته شده، پس اگر تازه شروع کردهای از درس ۱ بیا!
این درس را رایگان در شبیهساز شروع کن 🎓