Dado elettronico con Arduino

Da testwiki.
Vai alla navigazione Vai alla ricerca

Template:Lavori in corsoTemplate:Risorsa

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

Alla 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

  • display a 7 segmenti
  • 7 resistenze da 220Ω
  • bottone

Schema di montaggio

Schema elettrico dado elettronico con Arduino

Codice

Definisco 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

Il gioco può essere ampliato con un numero maggiore di dadi (per esempio due).