/*---------------------------------- * afficheur 7 segments * * Created: 11/9/2014 3:11:26 PM * Author: Sidne --------------------------------*/ /*------------------------ les constantes -------------------------*/ #define LUMINOSITE_ECRAN 200 #define _ANODE_COMMUNE #ifdef _ANODE_COMMUNE #define DIGIT_ON LOW #define DIGIT_OFF HIGH #define SEGMENT_ON HIGH #define SEGMENT_OFF LOW #else #define DIGIT_ON HIGH #define DIGIT_OFF LOW #define SEGMENT_ON LOW #define SEGMENT_OFF HIGH #endif /*------------------------- le cablage 7 22 27 6 5 23 | | | | | | ° ° ° ° ° ° ---------------------------- _12 _11 _10 _9_ _8_ _7_ [ AFFICHEUR ] _1_ _2_ _3_ _4_ _5_ _6_ ° ° ° ° ° ° | | | | | | 26 25 29 24 28 4 ----------------------------*/ /*------------------------ les segments -------------------------*/ const int PIN_A =22; // broche 11 const int PIN_B =23; // broche 7 const int PIN_C =24; // broche 4 const int PIN_D =25; // broche 2 const int PIN_E =26; // broche 1 const int PIN_F =27; // broche 10 const int PIN_G =28; // broche 5 const int PIN_GP =29; // broche 3 /*------------------------ les digits -------------------------*/ const int digit1 = 7; // broche 7 const int digit2 = 6; // broche 9 const int digit3 = 5; // broche 8 const int digit4 = 4; // broche 12 const int duree = 500 ; int n=0; void setup() { /*------------------------ les digits -------------------------*/ pinMode(PIN_A, OUTPUT); pinMode(PIN_B, OUTPUT); pinMode(PIN_C, OUTPUT); pinMode(PIN_D, OUTPUT); pinMode(PIN_E, OUTPUT); pinMode(PIN_F, OUTPUT); pinMode(PIN_G, OUTPUT); pinMode(PIN_GP, OUTPUT); pinMode(digit1, OUTPUT); pinMode(digit2, OUTPUT); pinMode(digit3, OUTPUT); pinMode(digit4, OUTPUT); /*-------------------------- on eteints tout ----------------------------*/ digitalWrite(PIN_A,SEGMENT_OFF); digitalWrite(PIN_B,SEGMENT_OFF); digitalWrite(PIN_C,SEGMENT_OFF); digitalWrite(PIN_D,SEGMENT_OFF); digitalWrite(PIN_E,SEGMENT_OFF); digitalWrite(PIN_F,SEGMENT_OFF); digitalWrite(PIN_G,SEGMENT_OFF); digitalWrite(PIN_GP,SEGMENT_OFF); digitalWrite(digit1,DIGIT_OFF); digitalWrite(digit2,DIGIT_OFF); digitalWrite(digit3,DIGIT_OFF); digitalWrite(digit4,DIGIT_OFF); Serial.begin(115200); Serial.println("debut"); } void loop() { /*------------------------ la boucle -------------------------*/ long debut = millis(); while( (millis() - debut) < duree) {afficheNombre(n); } delay(10); n ++; } void afficheNombre(int nombre) { long DebutTemps = millis(); for(int digit = 4 ; digit > 0 ; digit--) { /*------------------------ AFFICHE LES DIGITS A TOUR DE ROLE -------------------------*/ switch(digit) { case 1: digitalWrite(digit1, DIGIT_ON); break; case 2: digitalWrite(digit2, DIGIT_ON); break; case 3: digitalWrite(digit3, DIGIT_ON); break; case 4: digitalWrite(digit4, DIGIT_ON); break; } /*------------------------ AFFICHE LE CHIFFRE -------------------------*/ AfficheChiffre(nombre % 10); nombre /= 10; /*--------------------------------------------- delai affiche ----------------------------------------------*/ delayMicroseconds(LUMINOSITE_ECRAN); /*------------------------ eteint tous les segments -------------------------*/ AfficheChiffre(10); /*------------------------ eteint les chiffres -------------------------*/ digitalWrite(digit1, DIGIT_OFF); digitalWrite(digit2, DIGIT_OFF); digitalWrite(digit3, DIGIT_OFF); digitalWrite(digit4, DIGIT_OFF); } /*--------------------------------------------- 20ms avant rafraichissement ----------------------------------------------*/ while( (millis() - DebutTemps) < 10) ; } /*------------------------ Affiche les segments en fct du nombre -------------------------*/ void AfficheChiffre(int nombre) { switch (nombre){ case 0: digitalWrite(PIN_A, SEGMENT_ON); digitalWrite(PIN_B, SEGMENT_ON); digitalWrite(PIN_C, SEGMENT_ON); digitalWrite(PIN_D, SEGMENT_ON); digitalWrite(PIN_E, SEGMENT_ON); digitalWrite(PIN_F, SEGMENT_ON); digitalWrite(PIN_G, SEGMENT_OFF); break; case 1: digitalWrite(PIN_A, SEGMENT_OFF); digitalWrite(PIN_B, SEGMENT_ON); digitalWrite(PIN_C, SEGMENT_ON); digitalWrite(PIN_D, SEGMENT_OFF); digitalWrite(PIN_E, SEGMENT_OFF); digitalWrite(PIN_F, SEGMENT_OFF); digitalWrite(PIN_G, SEGMENT_OFF); break; case 2: digitalWrite(PIN_A, SEGMENT_ON); digitalWrite(PIN_B, SEGMENT_ON); digitalWrite(PIN_C, SEGMENT_OFF); digitalWrite(PIN_D, SEGMENT_ON); digitalWrite(PIN_E, SEGMENT_ON); digitalWrite(PIN_F, SEGMENT_OFF); digitalWrite(PIN_G, SEGMENT_ON); break; case 3: digitalWrite(PIN_A, SEGMENT_ON); digitalWrite(PIN_B, SEGMENT_ON); digitalWrite(PIN_C, SEGMENT_ON); digitalWrite(PIN_D, SEGMENT_ON); digitalWrite(PIN_E, SEGMENT_OFF); digitalWrite(PIN_F, SEGMENT_OFF); digitalWrite(PIN_G, SEGMENT_ON); break; case 4: digitalWrite(PIN_A, SEGMENT_OFF); digitalWrite(PIN_B, SEGMENT_ON); digitalWrite(PIN_C, SEGMENT_ON); digitalWrite(PIN_D, SEGMENT_OFF); digitalWrite(PIN_E, SEGMENT_OFF); digitalWrite(PIN_F, SEGMENT_ON); digitalWrite(PIN_G, SEGMENT_ON); break; case 5: digitalWrite(PIN_A, SEGMENT_ON); digitalWrite(PIN_B, SEGMENT_OFF); digitalWrite(PIN_C, SEGMENT_ON); digitalWrite(PIN_D, SEGMENT_ON); digitalWrite(PIN_E, SEGMENT_OFF); digitalWrite(PIN_F, SEGMENT_ON); digitalWrite(PIN_G, SEGMENT_ON); break; case 6: digitalWrite(PIN_A, SEGMENT_ON); digitalWrite(PIN_B, SEGMENT_OFF); digitalWrite(PIN_C, SEGMENT_ON); digitalWrite(PIN_D, SEGMENT_ON); digitalWrite(PIN_E, SEGMENT_ON); digitalWrite(PIN_F, SEGMENT_ON); digitalWrite(PIN_G, SEGMENT_ON); break; case 7: digitalWrite(PIN_A, SEGMENT_ON); digitalWrite(PIN_B, SEGMENT_ON); digitalWrite(PIN_C, SEGMENT_ON); digitalWrite(PIN_D, SEGMENT_OFF); digitalWrite(PIN_E, SEGMENT_OFF); digitalWrite(PIN_F, SEGMENT_OFF); digitalWrite(PIN_G, SEGMENT_OFF); break; case 8: digitalWrite(PIN_A, SEGMENT_ON); digitalWrite(PIN_B, SEGMENT_ON); digitalWrite(PIN_C, SEGMENT_ON); digitalWrite(PIN_D, SEGMENT_ON); digitalWrite(PIN_E, SEGMENT_ON); digitalWrite(PIN_F, SEGMENT_ON); digitalWrite(PIN_G, SEGMENT_ON); break; case 9: digitalWrite(PIN_A, SEGMENT_ON); digitalWrite(PIN_B, SEGMENT_ON); digitalWrite(PIN_C, SEGMENT_ON); digitalWrite(PIN_D, SEGMENT_ON); digitalWrite(PIN_E, SEGMENT_OFF); digitalWrite(PIN_F, SEGMENT_ON); digitalWrite(PIN_G, SEGMENT_ON); break; case 10: digitalWrite(PIN_A, SEGMENT_OFF); digitalWrite(PIN_B, SEGMENT_OFF); digitalWrite(PIN_C, SEGMENT_OFF); digitalWrite(PIN_D, SEGMENT_OFF); digitalWrite(PIN_E, SEGMENT_OFF); digitalWrite(PIN_F, SEGMENT_OFF); digitalWrite(PIN_G, SEGMENT_OFF); break; } }