محاكي رمي النرد
جزء من قسم الشاشات والمستشعرات في رحلة Arduino على Coddy. الدرس 5 من 24.
تخت اللوحة لا يحتوي على عشوائية حقيقية. تختار random(1, 7) عددًا صحيحًا من 1 إلى 6. الرقم الأول هو أدنى ما يمكنك الحصول عليه؛ والثاني أكبر بواحد من أعلى رقم.
لا توجد فرصة حقيقية داخل اللوحة. تحسب random() كل رقم انطلاقًا من الرقم الذي سبقه، بدءًا من رقم يُسمى البذرة. باستخدام البذرة نفسها، تعطي الأرقام نفسها في كل تشغيل: سترمي نردك 2، 2، 6، 3 في كل مرة تشغّله فيها.
تضبط randomSeed() البذرة. أعطها شيئًا يتغير من تشغيل إلى آخر، مثل وقت الضغط على الزر لأول مرة. تحسب micros() الوقت بأجزاء من مليون من الثانية، ولا يضغط أحد على الزر عند الميكروثانية نفسها مرتين:
if (!seeded) {
randomSeed(micros());
seeded = true;
}
int roll = random(1, 7);لا يفيد ضبط البذرة في setup(): إذ تُشغَّل setup() عند الميكروثانية نفسها بعد كل تشغيل.
التحدي
متوسطالزر موصول بالمنفذ 10، والبرنامج المبدئي يكتشف لحظة ضغطه بالفعل. اصنع نردًا:
- عند كل ضغطة، اختر
random(1, 7)واعرض الرقم باستخدامshowDigit() - عند الضغطة الأولى فقط، استدعِ
randomSeed(micros())حتى تختلف النتائج من تشغيل إلى آخر
اضغط على Run واضغط على الزر بضع مرات، ثم اضغط على Check.
جرّب بنفسك
const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8}; // a, b, c, d, e, f, g
// نمط واحد لكل رقم، يُقرأ من اليمين: البت الأخير هو المقطع a.
// gfedcba
const byte digits[10] = {
0b0111111, // 0
0b0000110, // 1
0b1011011, // 2
0b1001111, // 3
0b1100110, // 4
0b1101101, // 5
0b1111101, // 6
0b0000111, // 7
0b1111111, // 8
0b1101111 // 9
};
void showDigit(int n) {
for (int i = 0; i < 7; i++) {
if (bitRead(digits[n], i) == 1) {
digitalWrite(segmentPins[i], LOW); // مضاء
} else {
digitalWrite(segmentPins[i], HIGH); // مطفأ
}
}
}
const int buttonPin = 10;
bool wasPressed = false;
bool seeded = false;
void setup() {
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
pinMode(buttonPin, INPUT_PULLUP);
showDigit(0);
}
void loop() {
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed != wasPressed) {
if (pressed) {
// ضُغط الزر للتو: اختر رقمًا عشوائيًا من 1 إلى 6 واعرضه
}
delay(50); // انتظر حتى يستقر الزر
}
wasPressed = pressed;
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الشاشات والمستشعرات
1شاشات العرض ذات الأجزاء السبعة
شاشة العرض ذات الأجزاء السبعةأنماط الأرقام في البايتاتالعدّ على الشاشةالعدّ التنازلي حتى الصفرمحاكي رمي النردتدرّب بنفسك: Playground لـ Arduino