🐍 ماموریت ۹۹: بازی مار روی ماتریس
جویاستیک VRx→A0، VRy→A1؛ ماتریس روی D12/D11/D10. مختصات مار را در دو آرایه نگه دار، سر را جلو ببر و بدن را دنبالش جابهجا کن.
سطح: چالشی ⭐⭐⭐ · مود: آردوینو — با کد
هدفها
- ☐ یه آردوینو روی صحنه باشه
- ☐ یه ماتریس LED با MAX7219
- ☐ یه جویاستیک
- ☐ هر خونه روشن بشه (setLed)
- ☐ غذا جای تصادفی
- ☐ حداقل 9 سیم وصل شده باشه
- ☐ شبیهسازی در حال اجرا
قطعههای لازم
- Arduino Uno
- LED Matrix 8×8 (MAX7219)
- جویاستیک
💡 گیر کردی؟ داخل شبیهساز راهنما را ببین، و اگر باز هم نشد دکمهی «برام حلش کن» مدار را برایت میچیند تا ببینی چطور کار میکند.
جواب کامل
اول خودت امتحان کن! بعد جواب را ببین 👀
سیمکشی
- Arduino Uno (VCC5) ⟷ LED Matrix 8×8 (MAX7219) (VCC)
- LED Matrix 8×8 (MAX7219) (GND) ⟷ Arduino Uno (GND1)
- Arduino Uno (D12) ⟷ LED Matrix 8×8 (MAX7219) (DIN)
- Arduino Uno (D10) ⟷ LED Matrix 8×8 (MAX7219) (CS)
- Arduino Uno (D11) ⟷ LED Matrix 8×8 (MAX7219) (CLK)
- Arduino Uno (VCC5) ⟷ جویاستیک (VCC)
- جویاستیک (GND) ⟷ Arduino Uno (GND2)
- Arduino Uno (A0) ⟷ جویاستیک (VRX)
- Arduino Uno (A1) ⟷ جویاستیک (VRY)
کد
// Snake on the 8x8 matrix, steered with the joystick
#include <LedControl.h>
LedControl lc(12, 11, 10, 1);
int sx[64];
int sy[64];
int len = 3;
int dx = 1;
int dy = 0;
int fx = 5;
int fy = 5;
void newFood() {
fx = random(8);
fy = random(8);
}
void setup() {
lc.shutdown(0, false);
lc.setIntensity(0, 5);
randomSeed(analogRead(A2));
for (int i = 0; i < len; i++) { sx[i] = 2 - i; sy[i] = 3; }
}
void loop() {
int jx = analogRead(A0);
int jy = analogRead(A1);
if (jx < 300 && dx == 0) { dx = -1; dy = 0; }
if (jx > 700 && dx == 0) { dx = 1; dy = 0; }
if (jy < 300 && dy == 0) { dx = 0; dy = -1; }
if (jy > 700 && dy == 0) { dx = 0; dy = 1; }
for (int i = len - 1; i > 0; i--) { sx[i] = sx[i - 1]; sy[i] = sy[i - 1]; }
sx[0] = (sx[0] + dx + 8) % 8; // wrap around the edges
sy[0] = (sy[0] + dy + 8) % 8;
for (int i = 1; i < len; i++) {
if (sx[i] == sx[0] && sy[i] == sy[0]) len = 3; // bit yourself: start again
}
if (sx[0] == fx && sy[0] == fy) {
if (len < 64) { sx[len] = sx[len - 1]; sy[len] = sy[len - 1]; len++; }
newFood();
}
lc.clearDisplay(0);
for (int i = 0; i < len; i++) lc.setLed(0, sy[i], sx[i], true);
lc.setLed(0, fy, fx, (millis() / 200) % 2); // food blinks
delay(250);
}
ماموریتهای مشابه
🥤
ماموریت ۹۸: دستگاه فروش خودکار
🗂️
ماموریت ۱۰۰: ثبت دما روی کارت SD
🛗
ماموریت ۹۷: آسانسور با ماشین حالت
🌞
ماموریت ۹۶: ردیاب خورشید
📚 برای یاد گرفتن پایهها سری به دورهی آموزش آردوینو بزن · 🎯 همهی ماموریتها