mercoledì 30 ottobre 2019

Arduino N° 21 - Dado elettronico con display 7 segmenti

Arduino N° 20

 Achille De Santis

Arduino N° 22




Estrazione numeri da un Dado a sei facce (1-6).


Aggiunto un impulso di "strobe" per indicare l'esecuzione del comando.  

/* -------------------------- Inizio Programma -----------------------------------------------------------
  Achille De Santis - 28-04-2018
  V2.0 del 02-07-2019
  dado elettronico con display a 7 segmenti.
  Uso di funzioni per la definizione dei numeri con display 7-segmenti a "catodo comune".
*/

// --------------- I/O ------------------------
#define LED_A     5
#define LED_B     6
#define LED_C     7
#define LED_D     8       //Associo ad ogni segmento il proprio piedino
#define LED_E     9
#define LED_F     10
#define LED_G     11
#define DP            12
#define buttonPin   2
// --------------------------------------------

int buttonState;
long ran;
const int time = 1000;

void setup ()
{
  // ----------------------------------------------
  pinMode(buttonPin, INPUT_PULLUP);
 // -----------------------------------------------

  pinMode(LED_A, OUTPUT);
  pinMode(LED_B, OUTPUT);
  pinMode(LED_C, OUTPUT);    // INDIRIZZO I LED IN USCITA E IL PULSANTE IN ENTRATA
  pinMode(LED_D, OUTPUT);
  pinMode(LED_E, OUTPUT);
  pinMode(LED_F, OUTPUT);
  pinMode(LED_G, OUTPUT);
  pinMode(DP, OUTPUT);           // impulso di strobe sul "dot point"

  randomSeed(analogRead(0));
}

void strobe() // Impulso di "strobe" per indicare l'immissione del comando
{
  digitalWrite(DP, HIGH);  delay(100);
  digitalWrite(DP, LOW);         // delay(100);
}

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()
{
   digitalWrite(LED_A, LOW);
   digitalWrite(LED_B, LOW);
   digitalWrite(LED_C, LOW);  // RESETTO TUTTI I segmenti
   digitalWrite(LED_D, LOW);
   digitalWrite(LED_E, LOW);
   digitalWrite(LED_F, LOW);
   digitalWrite(LED_G, LOW);
}

void loop()
{
  buttonState=digitalRead(buttonPin);
  if (buttonState==LOW)                     // attivo basso!
  { strobe(); AZZERA();
    ran=random(1,7);
    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;
        // case 7:     break;
       default: ;
      }
    delay (time);
  }
}
// ------------------------ Fine programma --------------------------------------------------------


Simulazione: Dado elettronico

Per utilizzare i display ad "anodo comune" si possono prevedere dei transistori invertitori di fase, in uscita, o "complementare le uscite sulle routines di definizione delle cifre, aggiungendo anche gli opportuni valori iniziali. Il corpo del programma resta lo stesso.
Invece delle routine così definite, per il pilotaggio del display si potrebbe fare uso di un array a 7 elementi.



Argomenti correlati:
Dado elettronico V2
Estrazione numeri al Lotto



Arduino N° 22

Nessun commento:

Posta un commento