🕹️ درس 68: جویاستیک: کنترل دو محوره
با جویاستیک یک نقطهی نورانی را روی ۸ LED جابهجا کن — با منطقهی مرده.
سطح: پیشرفته · زمان: حدود 18 دقیقه · مفاهیم: جویاستیک، آنالوگ، منطقهی مرده
قدمهای این درس
- جویاستیک یعنی دو پتانسیومتر
- قدم ۱ — جویاستیک و هشت LED
- قدم ۲ — مرکز صفر، منطقهی مرده، سرعت
- اشتباه رایج: محورهای جابهجا
- چالش: سروو فرمان
نمونهای از کد این درس
const int ledPins[8] = {2, 3, 4, 5, 6, 7, 8, 9};
const int JOY_BTN = 10;
const int DEAD = 60; // ignore small wobbles around the centre
int pos = 3; // which LED is the dot
unsigned long lastMove = 0, lastPrint = 0;
void setup() {
for (int i = 0; i < 8; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(JOY_BTN, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int x = analogRead(A0) - 512; // -512 .. +511, 0 = centre
int y = analogRead(A1) - 512;
if (abs(x) < DEAD) x = 0; // dead zone
if (abs(y) < DEAD) y = 0;
// more tilt = faster steps
int wait = map(abs(x), DEAD, 512, 400, 80);
if (x != 0 && millis() - lastMove > wait) {
lastMove = millis();
if (x > 0 && pos < 7) pos++;
if (x < 0 && pos > 0) pos--;
}
if (digitalRead(JOY_BTN) == LOW) {
pos = 3; // click = back to the middle
}
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], i == pos);
}
if (millis() - lastPrint > 300) {
lastPrint = millis();
Serial.print("x:"); Serial.print(x);
Serial.print(" y:"); Serial.print(y);
Serial.print(" dot:"); Serial.println(pos);
}
}
چرا این درس؟
دورهی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیهساز انجام میدهی — مدار واقعی میچینی، کد واقعی اجرا میکنی و نتیجه را همان لحظه میبینی. این درس روی درسهای قبلی ساخته شده، پس اگر تازه شروع کردهای از درس ۱ بیا!
این درس را رایگان در شبیهساز شروع کن 🎓