🎲 تاس دیجیتال با آردوینو
پروژهای کوچک که یک مفهوم مهم را یاد میدهد: عدد تصادفی در کامپیوتر واقعاً تصادفی نیست.
مشکل random
اگر فقط random(1, 7) بنویسی، آردوینو هر بار که روشن میشود دقیقاً همان دنبالهی اعداد را تولید میکند. تاست همیشه یک نتیجهی تکراری میدهد.
راهحل: randomSeed
باید به مولد یک «نقطهی شروع» متفاوت بدهی. ترفند استاندارد: خواندن یک پایهی آنالوگ وصلنشده، که نویز محیط را میگیرد و هر بار عددی متفاوت میدهد:
void setup() {
randomSeed(analogRead(A0)); // A0 را به هیچجا وصل نکن
}
کد کامل
const int button = 2, buzzer = 8;
const int leds[] = {3, 4, 5, 6, 7, 9}; // شش LED
void showNumber(int n) {
for (int i = 0; i < 6; i++) {
digitalWrite(leds[i], i < n ? HIGH : LOW);
}
}
void setup() {
randomSeed(analogRead(A0));
for (int i = 0; i < 6; i++) pinMode(leds[i], OUTPUT);
pinMode(button, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
}
void loop() {
if (digitalRead(button) == LOW) {
// افکت چرخیدن تاس
for (int i = 0; i < 12; i++) {
showNumber(random(1, 7));
tone(buzzer, 1200, 30);
delay(60 + i * 12); // کمکم آهستهتر
}
showNumber(random(1, 7)); // نتیجهی نهایی
delay(300);
}
}
نکتهی random
random(1, 7) عددی بین ۱ تا ۶ میدهد — حد بالا هیچوقت شامل نمیشود. این یکی از رایجترین اشتباههاست.
افکت چرخش چرا مهم است؟
بدون آن، تاس بیروح است. تأخیری که کمکم زیاد میشود، حس «چرخیدن و ایستادن» تاس واقعی را میسازد. یک تغییر کوچک در کد، تفاوت بزرگ در حس پروژه.
تاس دیجیتالت را بساز 🎲