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
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.
Dado elettronico V2
Estrazione numeri al Lotto
> Arduino N° 22
Nessun commento:
Posta un commento