🥤 ماموریت ۹۸: دستگاه فروش خودکار

کی‌پد ردیف‌ها D9–D6 و ستون‌ها D5–D2، LCD I2C روی A4/A5، سروو D10. کد را با getKey جمع کن، با * تأیید کن و سروو جنس را بندازه.

سطح: چالشی ⭐⭐⭐ · مود: آردوینو — با کد

هدف‌ها

قطعه‌های لازم

▶ همین ماموریت را در شبیه‌ساز امتحان کن
💡 گیر کردی؟ داخل شبیه‌ساز راهنما را ببین، و اگر باز هم نشد دکمه‌ی «برام حلش کن» مدار را برایت می‌چیند تا ببینی چطور کار می‌کند.

جواب کامل

اول خودت امتحان کن! بعد جواب را ببین 👀

سیم‌کشی

  1. Arduino Uno (D9) ⟷ Keypad 4×4 (R1)
  2. Arduino Uno (D8) ⟷ Keypad 4×4 (R2)
  3. Arduino Uno (D7) ⟷ Keypad 4×4 (R3)
  4. Arduino Uno (D6) ⟷ Keypad 4×4 (R4)
  5. Arduino Uno (D5) ⟷ Keypad 4×4 (C1)
  6. Arduino Uno (D4) ⟷ Keypad 4×4 (C2)
  7. Arduino Uno (D3) ⟷ Keypad 4×4 (C3)
  8. Arduino Uno (D2) ⟷ Keypad 4×4 (C4)
  9. Arduino Uno (VCC5) ⟷ LCD 16×2 I2C (VCC)
  10. LCD 16×2 I2C (GND) ⟷ Arduino Uno (GND1)
  11. Arduino Uno (A4) ⟷ LCD 16×2 I2C (SDA)
  12. Arduino Uno (A5) ⟷ LCD 16×2 I2C (SCL)
  13. Arduino Uno (VCC5) ⟷ سروو موتور (VCC)
  14. سروو موتور (GND) ⟷ Arduino Uno (GND2)
  15. Arduino Uno (D10) ⟷ سروو موتور (SIG)

کد

// Vending machine: type a code (A1, A2, B1), pay with *, servo drops the item
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>

const byte ROWS = 4;
const byte 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 drop;
String code = "";

void show(String top, String bottom) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(top);
  lcd.setCursor(0, 1);
  lcd.print(bottom);
}

void setup() {
  lcd.init();
  lcd.backlight();
  drop.attach(10);
  drop.write(0);
  show("Choose: A1 A2 B1", "then press *");
}

void loop() {
  char k = pad.getKey();
  if (!k) return;
  if (k == '#') { code = ""; show("Cleared", ""); return; }
  if (k != '*') { code += k; show("Code:", code); return; }
  if (code == "A1" || code == "A2" || code == "B1") {
    show("Here you go!", code);
    drop.write(90);
    delay(1000);
    drop.write(0);
  } else {
    show("Wrong code", code);
  }
  code = "";
  delay(1500);
  show("Choose: A1 A2 B1", "then press *");
}

ماموریت‌های مشابه

🛗

ماموریت ۹۷: آسانسور با ماشین حالت

🐍

ماموریت ۹۹: بازی مار روی ماتریس

🌞

ماموریت ۹۶: ردیاب خورشید

🗂️

ماموریت ۱۰۰: ثبت دما روی کارت SD

📚 برای یاد گرفتن پایه‌ها سری به دوره‌ی آموزش آردوینو بزن · 🎯 همه‌ی ماموریت‌ها