// ################### // # # // # ARDUINO SONDAGE # // # Guy Magli # // # 02 juin 2019 # // # # // ################### // // Afin de supprimer les problemes d'affichage du source, les caracteres diacritiques ont ete retires. // ////////////////////////////// // // // LIBRAIRIES ET PARAMETRES // // // ////////////////////////////// // //////////// // EEPROM // //////////// // #include /////////////// // LED & KEY // /////////////// // // Parametres pour l'afficheur a LEDSs // Les positions des chiffres et des clettres correspondent aux adresses // 0xc0 0xc2 0xc4 0xc6 0xc8 0xca 0xcc 0xce // const int iStrobe = 4; // STB const int iClock = 3; // CLK const int iData = 2; // DIO // // Dessin des chiffres // Les positions des chiffres correspondent aux adresses 0xc0 0xc2 0xc4 0xc6 0xc8 0xca 0xcc 0xce // #define SEGMENT_A 0x01 // A #define SEGMENT_B 0x02 // --- #define SEGMENT_C 0x04 // F : : B #define SEGMENT_D 0x08 // -G- #define SEGMENT_E 0x10 // E : : C #define SEGMENT_F 0x20 // --- #define SEGMENT_G 0x40 // D // const unsigned char cChiffres[] = { SEGMENT_A + SEGMENT_B + SEGMENT_C + SEGMENT_D + SEGMENT_E + SEGMENT_F, // 0 SEGMENT_B + SEGMENT_C, // 1 SEGMENT_A + SEGMENT_B + SEGMENT_G + SEGMENT_E + SEGMENT_D, // 2 SEGMENT_A + SEGMENT_B + SEGMENT_G + SEGMENT_C + SEGMENT_D, // 3 SEGMENT_F + SEGMENT_G + SEGMENT_B + SEGMENT_C, // 4 SEGMENT_A + SEGMENT_F + SEGMENT_G + SEGMENT_C + SEGMENT_D, // 5 SEGMENT_A + SEGMENT_F + SEGMENT_G + SEGMENT_E + SEGMENT_C + SEGMENT_D, // 6 SEGMENT_A + SEGMENT_B + SEGMENT_C, // 7 SEGMENT_A + SEGMENT_F + SEGMENT_B + SEGMENT_G + SEGMENT_E + SEGMENT_C + SEGMENT_D, // 8 SEGMENT_A + SEGMENT_B + SEGMENT_C + SEGMENT_F + SEGMENT_G + SEGMENT_D, // 9 }; // // Dessin des lettres (celles qui peuvent etre dessinees) // const unsigned char clettreA = SEGMENT_E + SEGMENT_F + SEGMENT_A + SEGMENT_B + SEGMENT_C + SEGMENT_G; // Comme le R const unsigned char clettreB = SEGMENT_A + SEGMENT_B + SEGMENT_C + SEGMENT_D + SEGMENT_E + SEGMENT_F + SEGMENT_G; const unsigned char clettreC = SEGMENT_A + SEGMENT_F + SEGMENT_E + SEGMENT_D; const unsigned char clettreD = SEGMENT_A + SEGMENT_B + SEGMENT_C + SEGMENT_D + SEGMENT_E + SEGMENT_F; // Comme le O et le Q const unsigned char clettreE = SEGMENT_A + SEGMENT_F + SEGMENT_G + SEGMENT_E + SEGMENT_D; const unsigned char clettreF = SEGMENT_A + SEGMENT_F + SEGMENT_E + SEGMENT_G; const unsigned char clettreG = SEGMENT_A + SEGMENT_F + SEGMENT_E + SEGMENT_D + SEGMENT_C; // Comme le N const unsigned char clettreH = SEGMENT_F + SEGMENT_E + SEGMENT_G + SEGMENT_B + SEGMENT_C; const unsigned char clettreI = SEGMENT_B + SEGMENT_C; const unsigned char clettreJ = SEGMENT_B + SEGMENT_C + SEGMENT_D; // Pas de K const unsigned char clettreL = SEGMENT_F + SEGMENT_E + SEGMENT_D; const unsigned char clettreM = SEGMENT_E + SEGMENT_F + SEGMENT_A + SEGMENT_B + SEGMENT_C; // Comme le N const unsigned char clettreN = SEGMENT_E + SEGMENT_F + SEGMENT_A + SEGMENT_B + SEGMENT_C; // Comme le M const unsigned char clettreO = SEGMENT_A + SEGMENT_B + SEGMENT_C + SEGMENT_D + SEGMENT_E + SEGMENT_F; // Comme le D et le Q const unsigned char clettreP = SEGMENT_E + SEGMENT_F + SEGMENT_A + SEGMENT_B + SEGMENT_G; const unsigned char clettreQ = SEGMENT_A + SEGMENT_B + SEGMENT_C + SEGMENT_D + SEGMENT_E + SEGMENT_F; // Comme le D et le 0 const unsigned char clettreR = SEGMENT_E + SEGMENT_F + SEGMENT_A + SEGMENT_B + SEGMENT_C + SEGMENT_G; // Comme le A const unsigned char clettreS = SEGMENT_A + SEGMENT_F + SEGMENT_G + SEGMENT_C + SEGMENT_D; const unsigned char clettreT = SEGMENT_F + SEGMENT_E + SEGMENT_G; // en minuscule const unsigned char clettreU = SEGMENT_F + SEGMENT_E + SEGMENT_D + SEGMENT_C + SEGMENT_B; // Comme le V const unsigned char clettreV = SEGMENT_F + SEGMENT_E + SEGMENT_D + SEGMENT_C + SEGMENT_B; // Comme le U // Pas de W // Pas de X const unsigned char clettreY = SEGMENT_F + SEGMENT_G + SEGMENT_B + SEGMENT_C + SEGMENT_D; // Pas de Z // //////////////////////// // // // VARIABLES GLOBALES // // CONSTANTES // // // //////////////////////// // ///////////////// // Les boutons // ///////////////// // #define PIN_ENTREE_BOUTON_EFFACEMENT 5 #define PIN_ENTREE_BOUTON_VERT 6 #define PIN_ENTREE_BOUTON_BLEU 7 #define PIN_ENTREE_BOUTON_ROUGE 8 #define PIN_SORTIE_BOUTON_VERT 9 #define PIN_SORTIE_BOUTON_BLEU 10 #define PIN_SORTIE_BOUTON_ROUGE 11 #define PIN_ENTREE_BOUTON_RESULTATS 12 #define TEMPS_ANTI_REBOND_MS 30 bool bBoutonAppuye_Vert = false; bool bBoutonAppuye_Bleu = false; bool bBoutonAppuye_Rouge = false; bool bBoutonAppuye_Effacement = false; bool bBoutonAppuye_Resultats = false; unsigned long lDateAntiRebond_Vert = 0; unsigned long lDateAntiRebond_Bleu = 0; unsigned long lDateAntiRebond_Rouge = 0; unsigned long lDateAntiRebond_Effacement = 0; unsigned long lDateAntiRebond_Resultats = 0; int iCompteurDeClicks_Verts = 0; int iCompteurDeClicks_Bleus = 0; int iCompteurDeClicks_Rouges = 0; int iCompteurDeClicks_Effacement = 0; int iCompteurDeClicks_Resultats = 0; // /////////////////// // Les resultats // /////////////////// // int iOctetVert1, iOctetVert2, iOctetBleu1, iOctetBleu2, iOctetRouge1, iOctetRouge2; // EEPROM long int iNbVerts = 0; // Nombre de pressions sur le bouton vert long int iNbBleus = 0; // Nombre de pressions sur le bouton bleu long int iNbRouges = 0; // Nombre de pressions sur le bouton rouge // /////////// // // // SETUP // // // /////////// // void setup() { // // Indispensable pour l'afficheur a LEDs // pinMode(iStrobe, OUTPUT); pinMode(iClock, OUTPUT); pinMode(iData, OUTPUT); SendCommand(0x8f); Reset(); SendCommand(0x44); // // Pour les boutons // pinMode(PIN_ENTREE_BOUTON_EFFACEMENT, INPUT_PULLUP); pinMode(PIN_ENTREE_BOUTON_RESULTATS, INPUT_PULLUP); pinMode(PIN_ENTREE_BOUTON_VERT, INPUT_PULLUP); pinMode(PIN_ENTREE_BOUTON_BLEU, INPUT_PULLUP); pinMode(PIN_ENTREE_BOUTON_ROUGE, INPUT_PULLUP); pinMode(PIN_SORTIE_BOUTON_VERT, OUTPUT); pinMode(PIN_SORTIE_BOUTON_BLEU, OUTPUT); pinMode(PIN_SORTIE_BOUTON_ROUGE, OUTPUT); // // Ecrit le titree SONDAGE_ durant cinq secondes // digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc0); shiftOut(iData, iClock, LSBFIRST, clettreS); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc2); shiftOut(iData, iClock, LSBFIRST, clettreO); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc4); shiftOut(iData, iClock, LSBFIRST, clettreN); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc6); shiftOut(iData, iClock, LSBFIRST, clettreD); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc8); shiftOut(iData, iClock, LSBFIRST, clettreA); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xca); shiftOut(iData, iClock, LSBFIRST, clettreG); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xcc); shiftOut(iData, iClock, LSBFIRST, clettreE); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xce); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); delay(5000); EffaceTout(); // // Affiche les resultats une premiere fois // LitLesDonnees(); AfficheLesResultats(); } // ////////// // // // LOOP // // // ////////// // void loop() { // On boucle tant qu'aucun bouton n'a ete presse // Cela inclut les boutons d'effacement et de resultat while ((bBoutonAppuye_Vert == false) & (bBoutonAppuye_Bleu == false)& (bBoutonAppuye_Rouge == false) & (bBoutonAppuye_Effacement == false) & (bBoutonAppuye_Resultats == false)) { EtatDuBouton(PIN_ENTREE_BOUTON_VERT, bBoutonAppuye_Vert, lDateAntiRebond_Vert, iCompteurDeClicks_Verts); EtatDuBouton(PIN_ENTREE_BOUTON_BLEU, bBoutonAppuye_Bleu, lDateAntiRebond_Bleu, iCompteurDeClicks_Bleus); EtatDuBouton(PIN_ENTREE_BOUTON_ROUGE, bBoutonAppuye_Rouge, lDateAntiRebond_Rouge, iCompteurDeClicks_Rouges); EtatDuBouton(PIN_ENTREE_BOUTON_EFFACEMENT, bBoutonAppuye_Effacement, lDateAntiRebond_Effacement, iCompteurDeClicks_Effacement); EtatDuBouton(PIN_ENTREE_BOUTON_RESULTATS, bBoutonAppuye_Resultats, lDateAntiRebond_Resultats, iCompteurDeClicks_Resultats); } // // On a presse sur le bouton vert // if (bBoutonAppuye_Vert == true) { // Allume le bouton vert durant dix secondes digitalWrite(PIN_SORTIE_BOUTON_VERT, HIGH); delay(3000); digitalWrite(PIN_SORTIE_BOUTON_VERT, LOW); iNbVerts++; // On compte une pression de plus if (iNbVerts > 9999) { iNbVerts = 9999; } bBoutonAppuye_Vert = false; // Ce bouton a ete pris en compte ecritLesDonnees(); } // // On a presse sur le bouton bleu // if (bBoutonAppuye_Bleu == true) { // Allume le bouton bleu durant dix secondes digitalWrite(PIN_SORTIE_BOUTON_BLEU, HIGH); delay(3000); digitalWrite(PIN_SORTIE_BOUTON_BLEU, LOW); iNbBleus++; // On compte une pression de plus if (iNbBleus > 9999) { iNbBleus = 9999; } bBoutonAppuye_Bleu = false; // Ce bouton a ete pris en compte ecritLesDonnees(); } // // On a presse sur le bouton rouge // if (bBoutonAppuye_Rouge == true) { // Allume le bouton rouge durant dix secondes digitalWrite(PIN_SORTIE_BOUTON_ROUGE, HIGH); delay(3000); digitalWrite(PIN_SORTIE_BOUTON_ROUGE, LOW); iNbRouges++; // On compte une pression de plus if (iNbRouges > 9999) { iNbRouges = 9999; } bBoutonAppuye_Rouge = false; // Ce bouton a ete pris en compte ecritLesDonnees(); } // On a presse sur le bouton RESULTATS // if (bBoutonAppuye_Resultats == true) { LitLesDonnees(); AfficheLesResultats(); } // /////////////////////// // Bouton EFFACEMENT // /////////////////////// // if (bBoutonAppuye_Effacement == true) { // On efface les six octets de l'EEPROM contenant les resultats int t = 0; for (t = 1; t <= 6; t++) { EEPROM.write(t, 0); } // Ecrit EFFACE__ durant cinq secondes digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc0); shiftOut(iData, iClock, LSBFIRST, clettreE); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc2); shiftOut(iData, iClock, LSBFIRST, clettreF); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc4); shiftOut(iData, iClock, LSBFIRST, clettreF); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc6); shiftOut(iData, iClock, LSBFIRST, clettreA); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc8); shiftOut(iData, iClock, LSBFIRST, clettreC); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xca); shiftOut(iData, iClock, LSBFIRST, clettreE); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xcc); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xce); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); delay(5000); EffaceTout(); bBoutonAppuye_Effacement = false; // Ce bouton a ete pris en compte } } // //////////////// // // // PROCEDURES // // // //////////////// // //////////////////////////////// // Efface les Leds de LED&KEY // //////////////////////////////// // void EffaceTout() { // Ecrit _______ digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc0); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc2); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc4); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc6); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc8); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xca); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xcc); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xce); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); } // /////////////////////////////////////////////////////////////////////////// // Gere la pression sur les boutons // // Voir la page // // http://www.diegoyourself.com/index.php?article=arduino_bouton&page=0 // /////////////////////////////////////////////////////////////////////////// // void EtatDuBouton(int entreeDigitale, // Parametre : entree digitale a lire bool& iBoutonAppuye, // Parametre : etat du bouton unsigned long& lDateAntiRebond, // Parametre : etat de l'anti-rebond int& iCompteurDeClicks) // Parametre : compteur de clicks { // lire l'etat de l'entree dans une nouvelle variable temporaire bool etatSignal = !digitalRead(entreeDigitale); // si le bouton semble avoir ete appuye (pas de signal, ou signal = 0/false) if (etatSignal) { // si l'anti-rebond est deja en train d'ignorer les rebonds if (lDateAntiRebond != 0) { // obtenir et determiner combien de temps s'est ecoule depuis le debut // de l'anti-rebond ( = date actuelle - date de debut) unsigned long tempsEcoule = millis() - lDateAntiRebond; // si le temps ecoule est superieur ou egal au temps d'anti-rebond if (tempsEcoule >= TEMPS_ANTI_REBOND_MS) { // Considerer alors que le bouton est appuye iBoutonAppuye = true; // arreter l'anti-rebond lDateAntiRebond = 0; // comme le bouton vient d'etre considere comme appuye (front montant) // c'est le moment d'incrementer le compteur de clicks iCompteurDeClicks++; // Afficher le compteur de clicks } } // sinon, si le bouton est actuellement considere comme relache else if (!iBoutonAppuye) { // activer l'anti-rebond en obtenant la date actuelle du systeme lDateAntiRebond = millis(); } // sinon, le bouton est deja considere comme appuye, il n'y a rien a faire } // sinon, le bouton semble avoir ete relache else { // si le bouton etait appuye if (iBoutonAppuye) { // le considerer maintenant comme relache iBoutonAppuye = false; } // sinon, le bouton etait deja relache ou l'anti-rebond etait en cours else { // arreter l'anti-rebond s'il etait en cours lDateAntiRebond = 0; } } } ///////////////////////// // Gestion de l'EEPROM // ///////////////////////// // // Lit les donnees // void LitLesDonnees() { iOctetVert1 = EEPROM.read(1); // Deux octets pour stocker les valeurs du bouton vert iOctetVert2 = EEPROM.read(2); // 256 * 256 = 65536 au maximum iOctetBleu1 = EEPROM.read(3); // Idem bleu iOctetBleu2 = EEPROM.read(4); iOctetRouge1 = EEPROM.read(5); // Idem rouge iOctetRouge2 = EEPROM.read(6); iNbVerts = (iOctetVert2 * 256) + iOctetVert1; iNbBleus = (iOctetBleu2 * 256) + iOctetBleu1; iNbRouges = (iOctetRouge2 * 256) + iOctetRouge1; } // // Ecrit les donnees // void ecritLesDonnees() { iOctetVert2 = iNbVerts / 256; iOctetVert1 = iNbVerts - (iOctetVert2 * 256); iOctetBleu2 = iNbBleus / 256; iOctetBleu1 = iNbBleus - (iOctetBleu2 * 256); iOctetRouge2 = iNbRouges / 256; iOctetRouge1 = iNbRouges - (iOctetRouge2 * 256); EEPROM.write(1, iOctetVert1); EEPROM.write(2, iOctetVert2); EEPROM.write(3, iOctetBleu1); EEPROM.write(4, iOctetBleu2); EEPROM.write(5, iOctetRouge1); EEPROM.write(6, iOctetRouge2); } // //////////////////////// // Gere les resultats // //////////////////////// // // Affiche les resultats // void AfficheLesResultats() { // Ecrit REPONSES durant cinq secondes digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc0); shiftOut(iData, iClock, LSBFIRST, clettreR); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc2); shiftOut(iData, iClock, LSBFIRST, clettreE); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc4); shiftOut(iData, iClock, LSBFIRST, clettreP); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc6); shiftOut(iData, iClock, LSBFIRST, clettreO); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc8); shiftOut(iData, iClock, LSBFIRST, clettreN); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xca); shiftOut(iData, iClock, LSBFIRST, clettreS); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xcc); shiftOut(iData, iClock, LSBFIRST, clettreE); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xce); shiftOut(iData, iClock, LSBFIRST, clettreS); digitalWrite(iStrobe, HIGH); delay(5000); EffaceTout(); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc0); shiftOut(iData, iClock, LSBFIRST, clettreV); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc2); shiftOut(iData, iClock, LSBFIRST, clettreE); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc4); shiftOut(iData, iClock, LSBFIRST, clettreR); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc6); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); AfficheLeNombre(iNbVerts); digitalWrite(PIN_SORTIE_BOUTON_VERT, HIGH); delay(3000); digitalWrite(PIN_SORTIE_BOUTON_VERT, LOW); // Les bleus digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc0); shiftOut(iData, iClock, LSBFIRST, clettreB); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc2); shiftOut(iData, iClock, LSBFIRST, clettreL); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc4); shiftOut(iData, iClock, LSBFIRST, clettreE); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc6); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); AfficheLeNombre(iNbBleus); digitalWrite(PIN_SORTIE_BOUTON_BLEU, HIGH); delay(3000); digitalWrite(PIN_SORTIE_BOUTON_BLEU, LOW); // Les rouges digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc0); shiftOut(iData, iClock, LSBFIRST, clettreR); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc2); shiftOut(iData, iClock, LSBFIRST, clettreO); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc4); shiftOut(iData, iClock, LSBFIRST, clettreU); digitalWrite(iStrobe, HIGH); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc6); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); AfficheLeNombre(iNbRouges); digitalWrite(PIN_SORTIE_BOUTON_ROUGE, HIGH); delay(3000); digitalWrite(PIN_SORTIE_BOUTON_ROUGE, LOW); EffaceTout(); bBoutonAppuye_Resultats = false; } // // Affiche les resultats chiffres // void AfficheLeNombre(int iNombre) { int iMilliers = 0; int iCentaines = 0; int iDizaines = 0; int iUnites = 0; bool bPremierNonZero = false; // Pour afficher ou non les zeros dans les resultats if (iNombre > 1000) { iMilliers = iNombre / 1000; iNombre = iNombre - (iMilliers * 1000); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc8); shiftOut(iData, iClock, LSBFIRST, cChiffres[iMilliers]); digitalWrite(iStrobe, HIGH); bPremierNonZero = true; } else { digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc8); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); } if (iNombre > 100) { iCentaines = iNombre / 100; iNombre = iNombre - (iCentaines * 100); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xca); shiftOut(iData, iClock, LSBFIRST, cChiffres[iCentaines]); digitalWrite(iStrobe, HIGH); bPremierNonZero = true; } else { if (bPremierNonZero == false) { digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xca); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); } else { digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xca); shiftOut(iData, iClock, LSBFIRST, cChiffres[0]); digitalWrite(iStrobe, HIGH); } } if (iNombre > 10) { iDizaines = iNombre / 10; iNombre = iNombre - (iDizaines * 10); digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xcc); shiftOut(iData, iClock, LSBFIRST, cChiffres[iDizaines]); digitalWrite(iStrobe, HIGH); bPremierNonZero = true; } else { if (bPremierNonZero == false) { digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xcc); shiftOut(iData, iClock, LSBFIRST, 0x00); digitalWrite(iStrobe, HIGH); } else { digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xcc); shiftOut(iData, iClock, LSBFIRST, cChiffres[0]); digitalWrite(iStrobe, HIGH); } } iUnites = iNombre; digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xce); shiftOut(iData, iClock, LSBFIRST, cChiffres[iUnites]); digitalWrite(iStrobe, HIGH); } // //////////////////////////////////////// // Initialisation du compteur digital // //////////////////////////////////////// // void SendCommand(uint8_t value) { digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, value); digitalWrite(iStrobe, HIGH); } // void Reset() { SendCommand(0x40); // set auto increment mode digitalWrite(iStrobe, LOW); shiftOut(iData, iClock, LSBFIRST, 0xc0); for (uint8_t i = 0; i < 16; i++) { shiftOut(iData, iClock, LSBFIRST, 0x00); } digitalWrite(iStrobe, HIGH); } //