From bb675b31c5ca6b1b25d526e846a45d106fd5d186 Mon Sep 17 00:00:00 2001 From: Patrick PIGNOL Date: Mon, 3 May 2021 00:31:50 +0200 Subject: [PATCH 1/2] Update electronicdice.ino --- electronicdice.ino | 228 ++++++++++++++++++++++++--------------------- 1 file changed, 124 insertions(+), 104 deletions(-) diff --git a/electronicdice.ino b/electronicdice.ino index ac13f9b..f184974 100644 --- a/electronicdice.ino +++ b/electronicdice.ino @@ -1,122 +1,142 @@ +// Code original de HELIOX optimisé par Patrick PIGNOL patrick.pignol@gmail.com + // ----- DECLARATION DES VARIABLES ------ // Pour les LED -int pinLeds1 = 0; -int pinLeds2 = 1; -int pinLeds3 = 2; -int pinLed4 = 3; +const int vPinLeds1 = 0; +const int vPinLeds2 = 1; +const int vPinLeds3 = 2; +const int vPinLed4 = 3; // on indique la pin du capteur d'inclinaison -int buttonPin = 4; +const int vButtonPin = 4; + +const int vTime = 7000; //"time" est normalement un mot réservé, c'est pour ça qu'il est coloré. +// Nombre minimum de roulades inclus +const int vMinRoll = 5; +// Nombre maximum de roulades exlus +const int vMaxRoll = 10; + // On vérifie l'état du capteur d'inclinaison -int buttonState; -// Variable pour le random de l'animation -long ranim; -// Variable pour le random du résultat final -long ran; +int vButtonState; +// Variable pour random le nombre de roulades +int vRandomRoll; +// Variable pour le résultat intermédiaire de l'animation +int vRandomAnimation; // Il n'y a pas encore eu de lancement de dé -int last = 0; +int vLastAnimation = 0; // Temps que le dé reste affiché 1000 ms = 1 seconde -int time = 7000; +void mClearDice()// effacement du dé +{ + digitalWrite (vPinLeds1, LOW); + digitalWrite (vPinLeds2, LOW); + digitalWrite (vPinLeds3, LOW); + digitalWrite (vPinLed4, LOW); +} -// ----- DECLARATION ENTREES ET SORTIES ------ -void setup () +void mShowDice1() // affiche 1 +{ + digitalWrite (vPinLed4, HIGH); +} + +void mShowDice2() // affiche 2 { - //On indique que les LED sont des sorties - pinMode (pinLeds1, OUTPUT); - pinMode (pinLeds2, OUTPUT); - pinMode (pinLeds3, OUTPUT); - pinMode (pinLed4, OUTPUT); - // On indique que le detecteur d'inclinaison est une entrée. - pinMode (buttonPin, INPUT); + digitalWrite (vPinLeds1, HIGH); +} + +void mShowDice3() // affiche 3 +{ + digitalWrite (vPinLeds3, HIGH); + digitalWrite (vPinLed4, HIGH); +} - randomSeed(analogRead(0)); // on initialise le fait de pouvoir lancer des randoms +void mShowDice4() // affiche 4 +{ + digitalWrite (vPinLeds1, HIGH); + digitalWrite (vPinLeds3, HIGH); +} + +void mShowDice5() // affiche 5 +{ + digitalWrite (vPinLeds1, HIGH); + digitalWrite (vPinLeds3, HIGH); + digitalWrite (vPinLed4, HIGH); +} + +void mShowDice6() // affiche 6 +{ + digitalWrite (vPinLeds1, HIGH); + digitalWrite (vPinLeds2, HIGH); + digitalWrite (vPinLeds3, HIGH); +} + +// ----- DECLARATION ENTREES ET SORTIES ------ +void setup () +{ + //On indique que les LED sont des sorties + pinMode (vPinLeds1, OUTPUT); + pinMode (vPinLeds2, OUTPUT); + pinMode (vPinLeds3, OUTPUT); + pinMode (vPinLed4, OUTPUT); + // On indique que le detecteur d'inclinaison est une entrée. + pinMode (vButtonPin, INPUT); + + randomSeed(analogRead(0)); // on initialise le fait de pouvoir lancer des randoms à peu près aléatoires + mClearDice();//on efface le dé (rien ne garanti que les pines soient à LOW par défaut, tout dépend le compilateur) } // ----- ACTIONS A EFFECTUER ------ void loop() -{ - buttonState = digitalRead(buttonPin); - if (buttonState == LOW){ // Si on bouge le dé - - for (int i=0; i <= 7; i++){ // Animation pour 8 affichages de dé avec 200 ms entre chaque - - ranim = random(1, 7); // on effectue un random pour chaque affichage - - while (ranim == last){ // On verifie que deux affichages consécutifs ne sont pas les mêmes - ranim = random(1, 7); // Sinon on random un autre chiffre - } - last = ranim; // On stock le chiffre pour éviter d'afficher les 2 mêmes valeurs de dé pendant l'animation - if (ranim == 1){ - digitalWrite (pinLed4, HIGH); - } - if (ranim == 2){ - digitalWrite (pinLeds1, HIGH); - } - if (ranim == 3){ - digitalWrite (pinLeds3, HIGH); - digitalWrite (pinLed4, HIGH); - } - if (ranim == 4){ - digitalWrite (pinLeds1, HIGH); - digitalWrite (pinLeds3, HIGH); - } - if (ranim == 5){ - digitalWrite (pinLeds1, HIGH); - digitalWrite (pinLeds3, HIGH); - digitalWrite (pinLed4, HIGH); - } - if (ranim == 6){ - digitalWrite (pinLeds1, HIGH); - digitalWrite (pinLeds2, HIGH); - digitalWrite (pinLeds3, HIGH); - } - delay(200); // Pause entre l'affichage de l'animation : 200ms led éteintes - digitalWrite (pinLeds1, LOW); - digitalWrite (pinLeds2, LOW); - digitalWrite (pinLeds3, LOW); - digitalWrite (pinLed4, LOW); - delay(50); - } - - -// RANDOM DU RESULTAT FINAL - ran = random(1, 7); - if (ran == 1){ - digitalWrite (pinLed4, HIGH); - delay (time); // time étant la variable qui vaut 7000ms donc affichage du résultat pendant 7 secondes - } - if (ran == 2){ - digitalWrite (pinLeds1, HIGH); - delay (time); - } - if (ran == 3){ - digitalWrite (pinLeds3, HIGH); - digitalWrite (pinLed4, HIGH); - delay (time); - } - if (ran == 4){ - digitalWrite (pinLeds1, HIGH); - digitalWrite (pinLeds3, HIGH); - delay (time); +{ + //Lire l'état du capteur à mercure + vButtonState = digitalRead(vButtonPin); + // Si on bouge le dé + if (vButtonState == LOW) + { + vRandomRoll = random(vMinRoll, vMaxRoll); // le dé roulera aléatoirement entre vMinRoll et vMaxRoll + for (int vIndex=0; vIndex <= vRandomRoll; vIndex++) // Animation pour 8 affichages de dé avec 200 ms entre chaque + { + mClearDice();//On efface le dé + delay(50);//On attend un peu pour que l'utilisateur distingue la transition entre 2 roulades + // On verifie que deux affichages consécutifs ne sont pas les mêmes sinon on random un autre chiffre + do // faire + { + vRandomAnimation = random(1, 7); // on effectue un random entre 1 inclus et 7 exclus (soit entre 1 et 6 inclus) pour chaque affichage + } while (vRandomAnimation == vLastAnimation); //tant que vRandomAnimation == vLastAnimation + vLastAnimation = vRandomAnimation; // On stock le chiffre pour éviter d'afficher les 2 mêmes valeurs de dé pendant l'animation + switch(vRandomAnimation) + { + case 1: + { + mShowDice1(); + }break; + case 2: + { + mShowDice2(); + }break; + case 3: + { + mShowDice3(); + }break; + case 4: + { + mShowDice4(); + }break; + case 5: + { + mShowDice5(); + }break; + case 6: + { + mShowDice6(); + }break; + } + delay(200); // Pause entre l'affichage de l'animation : 200ms led éteintes + } + //ici on garde le dernier affichage + delay (vTime); + //Après le délais on efface le dé + mClearDice(); } - if (ran == 5){ - digitalWrite (pinLeds1, HIGH); - digitalWrite (pinLeds3, HIGH); - digitalWrite (pinLed4, HIGH); - delay (time); - } - if (ran == 6){ - digitalWrite (pinLeds1, HIGH); - digitalWrite (pinLeds2, HIGH); - digitalWrite (pinLeds3, HIGH); - delay (time); - } - } - // On éteint tout pour pouvoir relancer le dé - digitalWrite (pinLeds1, LOW); - digitalWrite (pinLeds2, LOW); - digitalWrite (pinLeds3, LOW); - digitalWrite (pinLed4, LOW); } From a9db3725bede9e45cdb7c4357cdd90e8dfb5d6c5 Mon Sep 17 00:00:00 2001 From: Patrick PIGNOL Date: Mon, 3 May 2021 00:53:31 +0200 Subject: [PATCH 2/2] Update electronicdice.ino --- electronicdice.ino | 78 +++++++++++++++++++++++++--------------------- 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/electronicdice.ino b/electronicdice.ino index f184974..a787ac8 100644 --- a/electronicdice.ino +++ b/electronicdice.ino @@ -3,19 +3,24 @@ // ----- DECLARATION DES VARIABLES ------ // Pour les LED -const int vPinLeds1 = 0; -const int vPinLeds2 = 1; -const int vPinLeds3 = 2; -const int vPinLed4 = 3; + +#define PINLEDS1 0 +#define PINLEDS2 1 +#define PINLEDS3 2 +#define PINLEDS4 3 // on indique la pin du capteur d'inclinaison -const int vButtonPin = 4; +#define BUTTONPIN 4 -const int vTime = 7000; //"time" est normalement un mot réservé, c'est pour ça qu'il est coloré. +#define SHOWTIME 7000 //"time" est normalement un mot réservé, c'est pour ça qu'il est coloré. // Nombre minimum de roulades inclus -const int vMinRoll = 5; +#define MINROLL 5 // Nombre maximum de roulades exlus -const int vMaxRoll = 10; +#define MAXROLL 10 +// Délais d'animation +#define ANIMATIONDELAY 200 +// Délais d'effacement +#define CLEARDELAY 50 // On vérifie l'état du capteur d'inclinaison int vButtonState; @@ -29,58 +34,58 @@ int vLastAnimation = 0; void mClearDice()// effacement du dé { - digitalWrite (vPinLeds1, LOW); - digitalWrite (vPinLeds2, LOW); - digitalWrite (vPinLeds3, LOW); - digitalWrite (vPinLed4, LOW); + digitalWrite (PINLEDS1, LOW); + digitalWrite (PINLEDS2, LOW); + digitalWrite (PINLEDS3, LOW); + digitalWrite (PINLEDS4, LOW); } void mShowDice1() // affiche 1 { - digitalWrite (vPinLed4, HIGH); + digitalWrite (PINLEDS4, HIGH); } void mShowDice2() // affiche 2 { - digitalWrite (vPinLeds1, HIGH); + digitalWrite (PINLEDS1, HIGH); } void mShowDice3() // affiche 3 { - digitalWrite (vPinLeds3, HIGH); - digitalWrite (vPinLed4, HIGH); + digitalWrite (PINLEDS3, HIGH); + digitalWrite (PINLEDS4, HIGH); } void mShowDice4() // affiche 4 { - digitalWrite (vPinLeds1, HIGH); - digitalWrite (vPinLeds3, HIGH); + digitalWrite (PINLEDS1, HIGH); + digitalWrite (PINLEDS3, HIGH); } void mShowDice5() // affiche 5 { - digitalWrite (vPinLeds1, HIGH); - digitalWrite (vPinLeds3, HIGH); - digitalWrite (vPinLed4, HIGH); + digitalWrite (PINLEDS1, HIGH); + digitalWrite (PINLEDS3, HIGH); + digitalWrite (PINLEDS4, HIGH); } void mShowDice6() // affiche 6 { - digitalWrite (vPinLeds1, HIGH); - digitalWrite (vPinLeds2, HIGH); - digitalWrite (vPinLeds3, HIGH); + digitalWrite (PINLEDS1, HIGH); + digitalWrite (PINLEDS2, HIGH); + digitalWrite (PINLEDS3, HIGH); } // ----- DECLARATION ENTREES ET SORTIES ------ void setup () { //On indique que les LED sont des sorties - pinMode (vPinLeds1, OUTPUT); - pinMode (vPinLeds2, OUTPUT); - pinMode (vPinLeds3, OUTPUT); - pinMode (vPinLed4, OUTPUT); + pinMode (PINLEDS1, OUTPUT); + pinMode (PINLEDS2, OUTPUT); + pinMode (PINLEDS3, OUTPUT); + pinMode (PINLEDS4, OUTPUT); // On indique que le detecteur d'inclinaison est une entrée. - pinMode (vButtonPin, INPUT); + pinMode (BUTTONPIN, INPUT); randomSeed(analogRead(0)); // on initialise le fait de pouvoir lancer des randoms à peu près aléatoires mClearDice();//on efface le dé (rien ne garanti que les pines soient à LOW par défaut, tout dépend le compilateur) @@ -90,22 +95,23 @@ void setup () void loop() { //Lire l'état du capteur à mercure - vButtonState = digitalRead(vButtonPin); + vButtonState = digitalRead(BUTTONPIN); // Si on bouge le dé if (vButtonState == LOW) { - vRandomRoll = random(vMinRoll, vMaxRoll); // le dé roulera aléatoirement entre vMinRoll et vMaxRoll - for (int vIndex=0; vIndex <= vRandomRoll; vIndex++) // Animation pour 8 affichages de dé avec 200 ms entre chaque + vRandomRoll = random(MINROLL, MAXROLL); // le dé roulera aléatoirement entre vMinRoll et vMaxRoll + for (int vIndex = 0; vIndex <= vRandomRoll; vIndex++) // Animation pour 8 affichages de dé avec 200 ms entre chaque { mClearDice();//On efface le dé - delay(50);//On attend un peu pour que l'utilisateur distingue la transition entre 2 roulades + delay(CLEARDELAY);//On attend un peu pour que l'utilisateur distingue la transition entre 2 roulades // On verifie que deux affichages consécutifs ne sont pas les mêmes sinon on random un autre chiffre do // faire { vRandomAnimation = random(1, 7); // on effectue un random entre 1 inclus et 7 exclus (soit entre 1 et 6 inclus) pour chaque affichage } while (vRandomAnimation == vLastAnimation); //tant que vRandomAnimation == vLastAnimation vLastAnimation = vRandomAnimation; // On stock le chiffre pour éviter d'afficher les 2 mêmes valeurs de dé pendant l'animation - switch(vRandomAnimation) + + switch(vRandomAnimation) // appliquer le traitement dédié à chaque valeurs de vRandomAnimation { case 1: { @@ -132,10 +138,10 @@ void loop() mShowDice6(); }break; } - delay(200); // Pause entre l'affichage de l'animation : 200ms led éteintes + delay(ANIMATIONDELAY); // Pause entre l'affichage de l'animation : 200ms led éteintes } //ici on garde le dernier affichage - delay (vTime); + delay (SHOWTIME); //Après le délais on efface le dé mClearDice(); }