Lancio di un dado 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 lezione descrive come realizzare un dado con Arduino, il cui fine è generare numeri casuali

laboratorio
laboratorio
Lancio di un dado con Arduino
Tipo di risorsa Tipo: laboratorio
Materia di appartenenza Materia: Sistemi automatici per le superiori 1
Avanzamento Avanzamento: laboratorio completa al 75%

Sensori e attuatori modifica

In questo progetto non vengono utilizzati ne sensori ne attenuatori

Schema di montaggio modifica

.  

Codice modifica

// VARIABILI E COSTANTI

//Pin Display 7Segmenti
const int a=3;
const int b=4;
const int c=5;
const int d=6;
const int e=7;
const int f=8;
const int g=9;

//Pin Pulsante
const int Button=2;

//Variabile per la gestione del numero random
int Numero_Casuale;

//Varibili per le gestione del Tempo
int T_FX=100;
int T_Hum =50;

void setup() {
  //Baudrate per la comunicazione seriale
  Serial.begin(9600);
  //Impostiamo il Pin del Pulsante
  pinMode(Button, INPUT_PULLUP);
  //Impostiamo i Pin del Display
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
  
  //Resettiamo tutti i Pin
  Reset();
}

void loop() {
  //Esegue un ciclo di controllo e poi fa un Reset
  for(int x=0; x<200; x++){
  Reset();
  if(digitalRead(Button)==LOW){
    Numero_Casuale= random(1, 6);
    Serial.println(Numero_Casuale);
    Circle();
    Numero();
    x=0; //Resetta la variabile x del ciclo for di loop
    }
    delay(T_Hum);
  }
}

//Ciclo per il Reset del display
void Reset(){
  digitalWrite(a,HIGH);
  digitalWrite(b,HIGH);
  digitalWrite(c,HIGH);
  digitalWrite(d,HIGH);
  digitalWrite(e,HIGH);
  digitalWrite(f,HIGH);
  digitalWrite(g,HIGH);
}

//Ciclo per la visualizzazione del numero sul display
void Numero(){
  //Stampa sul display a 7Segmenti il numero uscito
  switch (Numero_Casuale){
    case 1: digitalWrite(a,HIGH);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,HIGH);
            digitalWrite(e,HIGH);
            digitalWrite(f,HIGH);
            digitalWrite(g,HIGH);
        break;
    case 2: digitalWrite(a,LOW);
            digitalWrite(b,LOW);
            digitalWrite(c,HIGH);
            digitalWrite(d,LOW);
            digitalWrite(e,LOW);
            digitalWrite(f,HIGH);
            digitalWrite(g,LOW);
        break;
    case 3: digitalWrite(a,LOW);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,HIGH);
            digitalWrite(f,HIGH);
            digitalWrite(g,LOW);
        break;
    case 4: digitalWrite(a,HIGH);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,HIGH);
            digitalWrite(e,HIGH);
            digitalWrite(f,LOW);
            digitalWrite(g,LOW);
        break;
    case 5: digitalWrite(a,LOW);
            digitalWrite(b,HIGH);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,HIGH);
            digitalWrite(f,LOW);
            digitalWrite(g,LOW);
        break;
    case 6: digitalWrite(a,LOW);
            digitalWrite(b,HIGH);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,LOW);
            digitalWrite(f,LOW);
            digitalWrite(g,LOW);
        break;
    }
  }
//Ciclo per creare l'effetto di rotazione del display
void Circle(){
  for(int i=0; i<T_FX; i=i+10){
     digitalWrite(f,HIGH);
     digitalWrite(a,LOW);
     delay(i);
     digitalWrite(a,HIGH);
     digitalWrite(b,LOW);
     delay(i);
     digitalWrite(b,HIGH);
     digitalWrite(c,LOW);
     delay(i);
     digitalWrite(c,HIGH);
     digitalWrite(d,LOW);
     delay(i);
     digitalWrite(d,HIGH);
     digitalWrite(e,LOW);
     delay(i);
     digitalWrite(e,HIGH);
     digitalWrite(f,LOW);
     delay(i);
    }
  }

Espansioni suggerite modifica

Per migliorare il progetto possiamo trasformare il dado in un generatore casuale di numeri utilizzando due o più display per generare numeri maggiori.