Lancio dei dadi
Fa parte della sezione Display e sensori del percorso Arduino di Coddy. Lezione 5 di 24.
random(1, 7) sceglie un numero intero da 1 a 6. Il primo numero è il valore più basso che puoi ottenere; il secondo è uno in più del valore più alto.
La scheda non ha una vera casualità al suo interno. random() calcola ogni numero a partire da quello precedente, iniziando da un numero chiamato seme. Con lo stesso seme, restituisce gli stessi numeri a ogni esecuzione: i tuoi dadi farebbero 2, 2, 6, 3 ogni volta che li accendi.
randomSeed() imposta il seme. Passagli qualcosa che cambia a ogni esecuzione, come il momento della prima pressione del pulsante. micros() conta in milionesimi di secondo, e nessuno preme due volte nello stesso microsecondo:
if (!seeded) {
randomSeed(micros());
seeded = true;
}
int roll = random(1, 7);Impostare il seme in setup() non serve: setup() viene eseguita allo stesso microsecondo dopo ogni accensione.
Sfida
MedioIl pulsante è sul pin 10 e il codice iniziale rileva già il momento in cui viene premuto. Crea un dado:
- a ogni pressione, scegli
random(1, 7)e visualizzalo conshowDigit() - solo alla prima pressione, chiama
randomSeed(micros())in modo che i risultati varino a ogni esecuzione
Premi Run e premi il pulsante alcune volte, poi Check.
Provalo tu
const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8}; // a, b, c, d, e, f, g
// Uno schema per cifra, da leggere da destra: l'ultimo bit corrisponde al segmento 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); // acceso
} else {
digitalWrite(segmentPins[i], HIGH); // spento
}
}
}
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) {
// il pulsante è stato appena premuto: genera un numero da 1 a 6 e visualizzalo
}
delay(50); // lascia che il pulsante si stabilizzi
}
wasPressed = pressed;
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Display e sensori
1Display a sette segmenti
Display a sette segmentiSchemi delle cifre nei byteConta sul displayConto alla rovescia fino a zeroLancio dei dadiEsercitati da solo: Playground Arduino