giovedì 27 gennaio 2011

Arduino: lancio del dado (versione 2 e versione 3)

In questa seconda versione ho disposto i led in modo diverso, cercando di realizzare sulla breadbord i simboli tipici di un dado. A tale proposito ho aggiunto un led alla configurazione precedente. Ho quindi etichettato i led in questo modo:


Il codice sorgente dovrà, allora, accendere i led dichiarati nella configurazione in base al numero estratto dalla funzione random(1,7). Per posizionare il LED_D sulla breadboard ho dovuto modificare con una pinzetta i piedini del componente, piegandoli affinché nella configurazione vista dall'alto il led occupasse una posizione centrale pur ricevendo il segnale da un pin diverso da quello in linea sulla breadboard. Nello schema che segue, invece, per non confondere le connessioni ho messo da parte il LED_D.



Se nel codice sorgente dichiariamo le funzioni per accendere ogni singolo led (funzioni a(), b(), c(), d(), e(), f() e g()) possiamo allora ipotizzare due strutture di controllo per la scrittura dell'output. La prima è davvero molto semplice e direi anche la più naturale. Essa consiste nell'uso del valore generato dalla funzione random per l'ingresso (e l'uscita) in una struttura di controllo switch. Ecco l'elenco dei led da accendere in base al numero estratto dalla funzione random(1,7):
  1. LED_D;
  2. LED_B, LED_F;
  3. LED_B, LED_D, LED_F;
  4. LED_A, LED_B, LED_F, LED_G;
  5. LED_A, LED_B, LED_D, LED_F, LED_G;
  6. LED_A, LED_B, LED_C, LED_E, LED_F, LED_G;
Possiamo, quindi, invocare in ognuno dei casi detti sopra le relative funzioni per l'accensione dei led. Trovate qui il codice sorgente che adotta questa soluzione (versione 2).
Per risparmiare qualche riga di codice ho pensato di riscrivere il codice in questo modo, qui (versione 3). In questa versione, come nella prima (versione 1), il numero estratto dalla funzione random(1,7) stabilisce il punto di ingresso all'interno della struttura di controllo switch. Il punto di uscita, quindi l'istruzione break, è prevista solo per l'ultimo caso. All'interno di ogni caso ho disposto le varie funzioni per l'accensione dei led in questo modo (risparmiando qualche riga di codice):
  switch (dado) {
case 6:
a();
case 5:
if(dado==6) b();
else a();
case 4:
if(dado==6) c();
else if(dado==5) b();
else a();
case 3:
if(dado==6) e();
else if(dado==5) d();
else if(dado==4) b();
else b();
case 2:
if(dado==6 || dado==5 || dado==4) f();
else if(dado==3) d();
else b();
case 1:
if(dado==6 || dado==5 || dado==4) g();
else if(dado==3) f();
else if(dado==2) f();
else d();
break;
}

Nessun commento:

Posta un commento