19. 4 - Dé numérique
- L C
- 18 sept. 2024
- 2 min de lecture
Dernière mise à jour : 6 déc. 2024
Objectif
Simulation d'un lancer de dé
Matériel
1 carte Arduino Uno
1 breadboard
1 bouton poussoir BP
1 résistance 10 KΩ
1 buzzer
1 afficheur 7 segments
8 résistances 330 Ω
fils de connexion
Montage

Sketch
// Durée
#define Filtre_parasites 50
// Brochage de l'afficheur
#define Segment_A 4
#define Segment_B 5
#define Segment_C 9
#define Segment_D 11
#define Segment_E 12
#define Segment_F 3
#define Segment_G 2
#define Segment_DP 8
// Etat des leds de l'afficheur
#define ON true
#define OFF false
// Brochage du bouton poussoir
#define Bouton 7
// Brochage du buzzer
#define Buzzer 6
//Déclaration globales
int Chiffre[8] = { Segment_A, Segment_B, Segment_C, Segment_D, Segment_E, Segment_F, Segment_G, Segment_DP};
void setup()
{
for(int s=0; s<8; s++)
{
pinMode(Chiffre[s],OUTPUT);
}
effacerEcran();
pinMode(Buzzer, OUTPUT);
pinMode(Bouton, INPUT_PULLUP);
}
void loop()
{
if(digitalRead(Bouton) == LOW)
{
// Attente relachement bouton poussoir
delay(Filtre_parasites);
while(digitalRead(Bouton) == LOW);
traiterLancer();
}
}
void afficherChiffre(uint8_t chiffre_p)
{
bool AffichageChiffres[10][8] = {
{ ON, ON, ON, ON, ON, ON, OFF, OFF}, // 0
{ OFF, ON, ON, OFF, OFF, OFF, OFF, OFF}, // 1
{ ON, ON, OFF, ON, ON, OFF, ON, OFF}, // 2
{ ON, ON, ON, ON, OFF, OFF, ON, OFF}, // 3
{ OFF, ON, ON, OFF, OFF, ON, ON, OFF}, // 4
{ ON, OFF, ON, ON, OFF, ON, ON, OFF}, // 5
{ ON,OFF, ON, ON, ON, ON, ON, OFF}, // 6
{ ON, ON, ON, OFF, OFF, OFF, OFF, OFF}, // 7
{ ON, ON, ON, ON, ON, ON, ON, OFF}, // 8
{ ON, ON, ON, OFF, OFF, ON, ON, OFF}}; // 9
for(uint8_t s=0; s< 8; s++)
{
digitalWrite(Segment[s],
AffichageChiffres[chiffre_p][s]);
}
}
void traiterLancer(void)
{
uint8_t chiffre_L;
uint8_t s, x;
randomSeed(millis());
// Affichage d'un chenillard
effacerEcran();
for(x=0; x<3; x++)
{
for(s=0; s<6; s++)
{
digitalWrite(Chiffre[s],ON);
delay(60);
digitalWrite(Chiffre[s],OFF);
}
}
// Simule le dé qui roule
for(s=0; s<7; s++)
{
chiffre_L = random(1, 6+1);
afficherChiffre(chiffre_L);
delay(s*20+300);
}
// Le résultat clignotte avec bips
for(s=0; s<2; s++)
{
effacerEcran();
delay(300);
afficherChiffre(chiffre_L);
sonner(300);
}
}
void effacerEcran(void)
{
for(uint8_t ii_l=0; ii_l< 8; ii_l++)
{
digitalWrite(Chiffre[ii_l],OFF);
}
}
void sonner(int dureeMillisecondes_p)
{
digitalWrite(Buzzer, true);
delay(dureeMillisecondes_p);
digitalWrite(Buzzer, false);
}