...

Dependencies:   mbed

Committer:
vermaelen
Date:
Mon Mar 01 14:20:53 2021 +0000
Revision:
2:ebea7fef92ea
Parent:
1:1127c87eb622
v3;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vermaelen 0:b8f42480ca37 1 #include "mbed.h"
vermaelen 0:b8f42480ca37 2 BusOut affi(D2,D3,D4,D5,D6,D7,D8,D9); //D2=segment a / D3= segment b / ... / D9 = Dot Point
vermaelen 0:b8f42480ca37 3 int conv(int); //prototype de la fonction de conversion
vermaelen 0:b8f42480ca37 4
vermaelen 0:b8f42480ca37 5 Timer chrono; //Timer permettant de mesurer le temps écoulé
vermaelen 1:1127c87eb622 6 DigitalIn BP1(D12),BP2(A5) ; // Boutons poussoirs
vermaelen 0:b8f42480ca37 7
vermaelen 0:b8f42480ca37 8 int main() // Programme principal
vermaelen 0:b8f42480ca37 9 {
vermaelen 0:b8f42480ca37 10 int b1av; // Variable stockant l'état précédent de BP1
vermaelen 0:b8f42480ca37 11 int b1=1; // Variable stockant l'état actuel de BP1
vermaelen 0:b8f42480ca37 12 int b2; // Variable stockant l'état actuel de BP2
vermaelen 0:b8f42480ca37 13 int etattimer=0;// Flag pour stocker l'état du timer arrêté=0 ou lancé=1
vermaelen 0:b8f42480ca37 14 int diz,uni,dix;// Variable pour l'affichage en boucle : dizaines, unités, dixièmes
vermaelen 0:b8f42480ca37 15
vermaelen 0:b8f42480ca37 16 BP1.mode(PullUp) ; // BP1 et BP2 en mode PullUp
vermaelen 0:b8f42480ca37 17 BP2.mode(PullUp) ;
vermaelen 0:b8f42480ca37 18 float temps; // Variable réelle pour stocker la valeur du Timer
vermaelen 0:b8f42480ca37 19 chrono.stop(); // Arrêt du Timer
vermaelen 0:b8f42480ca37 20 chrono.reset(); // Remise à zéro du Timer
vermaelen 2:ebea7fef92ea 21
vermaelen 0:b8f42480ca37 22 while(1) { // Boucle infinie
vermaelen 2:ebea7fef92ea 23
vermaelen 0:b8f42480ca37 24 b1av=b1 ; // Mémorisation de l'ancienne valeur de BP1
vermaelen 0:b8f42480ca37 25 b1=BP1.read() ; // Lecture de la nouvelle valeur de BP1
vermaelen 0:b8f42480ca37 26 b2=BP2.read() ; // Lecture de BP2
vermaelen 2:ebea7fef92ea 27
vermaelen 0:b8f42480ca37 28 if(b1av==1 && b1==0) { // Si front descendant sur BP1
vermaelen 0:b8f42480ca37 29 if(etattimer==0) { // Si le Timer est à l'arrêt
vermaelen 0:b8f42480ca37 30 chrono.start() ;// On démarre le Timer
vermaelen 0:b8f42480ca37 31 etattimer =1; // On met le Flag à 1 = Timer lancé
vermaelen 0:b8f42480ca37 32 } else { // Sinon
vermaelen 0:b8f42480ca37 33 chrono.stop() ; // On arrête le Timer
vermaelen 0:b8f42480ca37 34 etattimer=0; // On met le Flag à 0 = Timer arrêté
vermaelen 0:b8f42480ca37 35 }
vermaelen 0:b8f42480ca37 36 }
vermaelen 2:ebea7fef92ea 37
vermaelen 2:ebea7fef92ea 38 if(b2==0) {
vermaelen 2:ebea7fef92ea 39 chrono.reset() ;//Si b2 enfoncé => RAZ du Timer
vermaelen 2:ebea7fef92ea 40 }
vermaelen 2:ebea7fef92ea 41
vermaelen 0:b8f42480ca37 42 temps=chrono.read(); //On lit le Timer
vermaelen 2:ebea7fef92ea 43
vermaelen 0:b8f42480ca37 44 if(etattimer==1) { //Si le Timer est lancé
vermaelen 0:b8f42480ca37 45 if(temps<1) affi.write(conv((int)(temps*10))); //Affichage des dixièmes si temps < 1 seconde
vermaelen 0:b8f42480ca37 46 else {
vermaelen 0:b8f42480ca37 47 if(temps<10) affi.write(conv((int)temps)); //Affichage des unités si 1 < temps < 10 secondes
vermaelen 0:b8f42480ca37 48 else affi.write(conv((int)temps/10));//Affichage des unités si temps > 10 secondes
vermaelen 0:b8f42480ca37 49 }
vermaelen 0:b8f42480ca37 50 } else { // Sinon = le Timer est arrêté
vermaelen 0:b8f42480ca37 51 diz=(int)(temps/10); // Calcul des dizaines
vermaelen 0:b8f42480ca37 52 uni=((int)(temps))%10; // Calcul des unités
vermaelen 0:b8f42480ca37 53 dix=(int)((temps-uni-(10*diz))*10); // Calcul des dixièmes
vermaelen 0:b8f42480ca37 54 printf("temps=%.1f %d %d . %d \n\r",temps,diz,uni,dix);
vermaelen 0:b8f42480ca37 55 affi.write(conv(255)); // Eteindre l'afficheur 0,5s
vermaelen 0:b8f42480ca37 56 wait(0.5);
vermaelen 0:b8f42480ca37 57 affi.write(conv(diz)); // Afficher les dizaines 0,3s
vermaelen 0:b8f42480ca37 58 wait(0.3);
vermaelen 2:ebea7fef92ea 59 affi.write(conv(uni)); // Afficher les unités 0,3s
vermaelen 0:b8f42480ca37 60 wait(0.3);
vermaelen 2:ebea7fef92ea 61 affi.write(conv(16)); // Afficher le point 0,3s
vermaelen 0:b8f42480ca37 62 wait(0.3);
vermaelen 2:ebea7fef92ea 63 affi.write(conv(dix)); // Afficher les dixièmes 0,3s
vermaelen 0:b8f42480ca37 64 wait(0.3);
vermaelen 0:b8f42480ca37 65 }
vermaelen 0:b8f42480ca37 66 }
vermaelen 0:b8f42480ca37 67 }
vermaelen 0:b8f42480ca37 68 int conv(int e) // Corps de la fonction de conversion
vermaelen 0:b8f42480ca37 69 {
vermaelen 0:b8f42480ca37 70 int s;
vermaelen 0:b8f42480ca37 71 switch(e) {
vermaelen 0:b8f42480ca37 72 case 0:
vermaelen 0:b8f42480ca37 73 s=0b11000000;//ou 192 ou 0xC0 -- Affiche un Zéro
vermaelen 0:b8f42480ca37 74 break;
vermaelen 0:b8f42480ca37 75 case 1:
vermaelen 0:b8f42480ca37 76 s=0b11111001;//ou 249 ou 0xF9 -- Affiche un 1
vermaelen 0:b8f42480ca37 77 break;
vermaelen 0:b8f42480ca37 78 case 2:
vermaelen 0:b8f42480ca37 79 s=0b10100100;
vermaelen 0:b8f42480ca37 80 break;
vermaelen 0:b8f42480ca37 81 case 3:
vermaelen 0:b8f42480ca37 82 s=0b10110000;
vermaelen 0:b8f42480ca37 83 break;
vermaelen 0:b8f42480ca37 84 case 4:
vermaelen 0:b8f42480ca37 85 s=0b10011001;
vermaelen 0:b8f42480ca37 86 break;
vermaelen 0:b8f42480ca37 87 case 5:
vermaelen 0:b8f42480ca37 88 s=0b10010010;
vermaelen 0:b8f42480ca37 89 break;
vermaelen 0:b8f42480ca37 90 case 6:
vermaelen 0:b8f42480ca37 91 s=0b10000010;
vermaelen 0:b8f42480ca37 92 break;
vermaelen 0:b8f42480ca37 93 case 7:
vermaelen 0:b8f42480ca37 94 s=0b11111000;
vermaelen 0:b8f42480ca37 95 break;
vermaelen 0:b8f42480ca37 96 case 8:
vermaelen 0:b8f42480ca37 97 s=0b10000000;
vermaelen 0:b8f42480ca37 98 break;
vermaelen 0:b8f42480ca37 99 case 9:
vermaelen 0:b8f42480ca37 100 s=0b10010000;
vermaelen 0:b8f42480ca37 101 break;
vermaelen 0:b8f42480ca37 102 case 16:
vermaelen 0:b8f42480ca37 103 s=0b01111111; // Affiche le point (Dot Point)
vermaelen 0:b8f42480ca37 104 break;
vermaelen 0:b8f42480ca37 105 default : // Eteint l'afficheur
vermaelen 0:b8f42480ca37 106 s=255;
vermaelen 0:b8f42480ca37 107 }
vermaelen 0:b8f42480ca37 108 return s;
vermaelen 0:b8f42480ca37 109 }