Raffaele Ilardo
Giocare a dadi con Arduino
© La parziale riproduzione dei contenuti di questa pagina è consentita a patto di citare l'indirizzo del sito e l'autore.
Non credo che sia possibile giocare a scacchi con la piattaforma Arduino, ma senz'altro ci si può divertire con qualche tiro di dadi!
Il progetto che descrivo in questa pagina consente in effetti di simulare il lancio di un dado, ottenendo il classico punteggio che può variare da 1 a 6; direi comunque che può essere considerato più a ragione un esercizio didattico, che ci consente di utilizzare alcune funzioni caratteristiche di programmazione, dopo aver approntato una piastrina contenente i sette led che simulano i pallini del dado.
Ho provato a realizzare il montaggio su breadboard, ma ho dovuto concludere che non era possibile sistemare i sette led mantenendo l'impostazione classica delle facce di un dado. Ho allora preferito montare i led su di un pezzetto di basetta millefori, come si vede nella figura che segue.
figura 1
figura 2
La figura 2 mostra la piastrina vista dal di sotto, con i vari collegamenti.
I catodi di ciascun led sono collegati insieme fra loro, e devono essere inviati al pin GND della scheda arduino.
Gli altri numeri indicano, per ciascun led, il pin della scheda cui deve essere collegato (tenete presente che, essendo una vista da sotto, la destra e la sinistra sono invertite).
Con buona pazienza occorre quindi collagare ogni led al relativo pin, interponendo una resistenza da 220 Ω.
Il montaggio d'insieme è quella cosa orrenda che si vede in figura 3, ma voglio sperare che la vostra realizzazione sia notevolmente migliore. Come si può notare, è stato aggiunto un pulsante, il cui scopo è quello di "fermare" il dado.
figura 3
In funzione di tale numero, con l'istruzione switch case viene acceso un gruppo di led corrispondente alla rappresentazione del numero che è stato generato. Il processo avviene molto velocemente, in modo ciclico, per cui i led sembrano sempre accesi, con una luminosità intermedia.
Per tentare la sorte, ovvero "lanciare il dado", si preme il pulsante: il ciclo si arresta, e rimangono accesi i soli led che corrispondono al punteggio generato in quell'istante.
Dopo due secondi il loop riparte, e si può lanciare di nuovo, premendo ancora il pulsante.
Di seguito c'è il codice da trasferire tramite copia e incolla nell'IDE di arduino:
unsigned int score=0;
bool puls=0;
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(2, INPUT);
}
void loop()
{
score=random(1,7);
switch (score) {
case 1:
digitalWrite(7,HIGH);
break;
case 2:
digitalWrite(10,HIGH);
digitalWrite(13,HIGH);
break;
case 3:
digitalWrite(10,HIGH);
digitalWrite(7,HIGH);
digitalWrite(13,HIGH);
break;
case 4:
digitalWrite(13,HIGH);
digitalWrite(8,HIGH);
digitalWrite(11,HIGH);
digitalWrite(10,HIGH);
break;
case 5:
digitalWrite(8,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(13,HIGH);
digitalWrite(7,HIGH);
break;
case 6:
digitalWrite(13,HIGH);
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
break;
}
puls = digitalRead(2);
if (puls==1){ delay(2000);
}
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
}
bool puls=0;
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(2, INPUT);
}
void loop()
{
score=random(1,7);
switch (score) {
case 1:
digitalWrite(7,HIGH);
break;
case 2:
digitalWrite(10,HIGH);
digitalWrite(13,HIGH);
break;
case 3:
digitalWrite(10,HIGH);
digitalWrite(7,HIGH);
digitalWrite(13,HIGH);
break;
case 4:
digitalWrite(13,HIGH);
digitalWrite(8,HIGH);
digitalWrite(11,HIGH);
digitalWrite(10,HIGH);
break;
case 5:
digitalWrite(8,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(13,HIGH);
digitalWrite(7,HIGH);
break;
case 6:
digitalWrite(13,HIGH);
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
break;
}
puls = digitalRead(2);
if (puls==1){ delay(2000);
}
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
}