הטלת קובייה
חלק מהיחידה צגים וחיישנים במסלול ה-Arduino של Coddy. שיעור 5 מתוך 24.
random(1, 7) בוחרת מספר שלם מ־1 עד 6. המספר הראשון הוא הנמוך ביותר שאפשר לקבל; השני גדול באחד מהגבוה ביותר.
אין בלוח אקראיות אמיתית. random() מחשבת כל מספר מתוך המספר שלפניו, ומתחילה ממספר שנקרא seed. עם אותו seed, היא מחזירה את אותם מספרים בכל הרצה: הקוביות שלך היו מראות 2, 2, 6, 3 בכל פעם שתפעיל אותן.
randomSeed() מגדירה את ה־seed. תן לה משהו שמשתנה מהרצה להרצה, כמו הזמן שבו נלחץ הכפתור בפעם הראשונה. micros() סופרת במיליוניות השנייה, ואף אחד לא לוחץ פעמיים באותה מיליונית השנייה:
if (!seeded) {
randomSeed(micros());
seeded = true;
}
int roll = random(1, 7);אתחול ה־seed ב־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;
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה צגים וחיישנים
תרגלו בעצמכם: Arduino אונליין