Dado elettronico con Arduino
Questa risorsa è stata scritta dagli studenti dell'Istituto ITIS "Enrico Mattei" di Urbino, della classe 3B/EN nell'a.s. 2021/2022, all'interno del corso di Sistemi automatici per le superiori 1.
Per favore, prima di apportare modifiche, attendi sino alla fine dell'anno scolastico (termina il 30 giugno 2022) oppure contatta il docente di riferimento Giacomo Alessandroni nel caso venissero rilevati contenuti non in linea con le linee guida della comunità. Se leggi questo avviso ad anno scolastico concluso puoi rimuoverlo. |
Questa risorsa descrive come realizzare un dado elettronico, che mostra un numero casuale (compreso tra uno e sei) dopo la pressione di un tasto.
Principio di funzionamento
modificaAlla pressione del pulsante il generatore di numeri casuali invia al display un numero da 1 a 6 e il display lo mostra.
Sensori e attuatori
modifica- display a 7 segmenti
- 7 resistenze da
- bottone
Schema di montaggio
modificaCodice
modificaDefinisco tutte le variabili
//Associamo ad ogni segmento il proprio piedino
#define LED_A 5
#define LED_B 6
#define LED_C 7
#define LED_D 8
#define LED_E 9
#define LED_F 10
#define LED_G 11
#define DP 12
#define buttonPin 2
#delay 50
int buttonState;
int ran;
const int time = 1000;
Uso la funzione setup()
per inizializzare le variabili
void setup ()
{
//indiriziamo i led in uscita e il pulsante di start
pinMode(LED_A, OUTPUT);
pinMode(LED_B, OUTPUT);
pinMode(LED_C, OUTPUT);
pinMode(LED_D, OUTPUT);
pinMode(LED_E, OUTPUT);
pinMode(LED_F, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(DP, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
//inizializziamo il generatore di numeri pseudo-casuali
randomSeed(analogRead(0));
}
Dopo aver creato una funzione setup()
, che inizializza e imposta i valori iniziali, la funzione loop()
esegue esattamente ciò che suggerisce il nome della risorsa e si ripete per sempre, consentendo al programma di cambiare numero estratto.
void loop()
{
buttonState = digitalRead(buttonPin); // Questa variabile memorizza lo stato digitale corrente del pulsante
if (buttonState == LOW)
{
strobe(); //lampeggia
AZZERA(); //azzera
ran = random(1, 6);
//specifichiamo i casi possibili (da 1 a 6)
switch(ran) {
case 1:
UNO();
break;
case 2:
DUE();
break;
case 3:
TRE();
break;
case 4:
QUATTRO();
break;
case 5:
CINQUE();
break;
case 6:
SEI();
break;
default:
break;
}
delay (time);
}
}
tramite l'uso della funzione strobe()
accendiamo e spegniamo i led con un ritardo di 50 ms
void strobe()
{
digitalWrite(DP, HIGH);
delay(50);
digitalWrite(DP, LOW);
}
//indichiamo ad arduino che led si devono accendere sul display per formare i numeri (da 1 a 6)
void UNO()
{
digitalWrite(LED_B, HIGH);
digitalWrite(LED_C, HIGH);
}
void DUE()
{
digitalWrite(LED_A, HIGH);
digitalWrite(LED_B, HIGH);
digitalWrite(LED_D, HIGH);
digitalWrite(LED_E, HIGH);
digitalWrite(LED_G, HIGH);
}
void TRE()
{
digitalWrite(LED_A, HIGH);
digitalWrite(LED_B, HIGH);
digitalWrite(LED_D, HIGH);
digitalWrite(LED_C, HIGH);
digitalWrite(LED_G, HIGH);
}
void QUATTRO()
{
digitalWrite(LED_B, HIGH);
digitalWrite(LED_C, HIGH);
digitalWrite(LED_F, HIGH);
digitalWrite(LED_G, HIGH);
}
void CINQUE()
{
digitalWrite(LED_A, HIGH);
digitalWrite(LED_C, HIGH);
digitalWrite(LED_D, HIGH);
digitalWrite(LED_F, HIGH);
digitalWrite(LED_G, HIGH);
}
void SEI()
{
digitalWrite(LED_A, HIGH);
digitalWrite(LED_C, HIGH);
digitalWrite(LED_D, HIGH);
digitalWrite(LED_E, HIGH);
digitalWrite(LED_F, HIGH);
digitalWrite(LED_G, HIGH);
}
void AZZERA()
{
// spegne tutti i led
digitalWrite(LED_A, LOW);
digitalWrite(LED_B, LOW);
digitalWrite(LED_C, LOW);
digitalWrite(LED_D, LOW);
digitalWrite(LED_E, LOW);
digitalWrite(LED_F, LOW);
digitalWrite(LED_G, LOW);
}
Espansioni suggerite
modificaIl gioco può essere ampliato con un numero maggiore di dadi (per esempio due).