christophe vermaelen
/
Chrono_1_Afficheur
...
main.cpp@0:b8f42480ca37, 2021-03-01 (annotated)
- Committer:
- vermaelen
- Date:
- Mon Mar 01 10:29:00 2021 +0000
- Revision:
- 0:b8f42480ca37
- Child:
- 1:1127c87eb622
v1
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:b8f42480ca37 | 6 | DigitalIn BP1(A4),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 | 0:b8f42480ca37 | 21 | while(1) { // Boucle infinie |
vermaelen | 0:b8f42480ca37 | 22 | b1av=b1 ; // Mémorisation de l'ancienne valeur de BP1 |
vermaelen | 0:b8f42480ca37 | 23 | b1=BP1.read() ; // Lecture de la nouvelle valeur de BP1 |
vermaelen | 0:b8f42480ca37 | 24 | b2=BP2.read() ; // Lecture de BP2 |
vermaelen | 0:b8f42480ca37 | 25 | if(b1av==1 && b1==0) { // Si front descendant sur BP1 |
vermaelen | 0:b8f42480ca37 | 26 | if(etattimer==0) { // Si le Timer est à l'arrêt |
vermaelen | 0:b8f42480ca37 | 27 | chrono.start() ;// On démarre le Timer |
vermaelen | 0:b8f42480ca37 | 28 | etattimer =1; // On met le Flag à 1 = Timer lancé |
vermaelen | 0:b8f42480ca37 | 29 | } else { // Sinon |
vermaelen | 0:b8f42480ca37 | 30 | chrono.stop() ; // On arrête le Timer |
vermaelen | 0:b8f42480ca37 | 31 | etattimer=0; // On met le Flag à 0 = Timer arrêté |
vermaelen | 0:b8f42480ca37 | 32 | } |
vermaelen | 0:b8f42480ca37 | 33 | } |
vermaelen | 0:b8f42480ca37 | 34 | if(b2==0) chrono.reset() ;//Si b2 enfoncé |
vermaelen | 0:b8f42480ca37 | 35 | temps=chrono.read(); //On lit le Timer |
vermaelen | 0:b8f42480ca37 | 36 | if(etattimer==1) { //Si le Timer est lancé |
vermaelen | 0:b8f42480ca37 | 37 | if(temps<1) affi.write(conv((int)(temps*10))); //Affichage des dixièmes si temps < 1 seconde |
vermaelen | 0:b8f42480ca37 | 38 | else { |
vermaelen | 0:b8f42480ca37 | 39 | if(temps<10) affi.write(conv((int)temps)); //Affichage des unités si 1 < temps < 10 secondes |
vermaelen | 0:b8f42480ca37 | 40 | else affi.write(conv((int)temps/10));//Affichage des unités si temps > 10 secondes |
vermaelen | 0:b8f42480ca37 | 41 | } |
vermaelen | 0:b8f42480ca37 | 42 | } else { // Sinon = le Timer est arrêté |
vermaelen | 0:b8f42480ca37 | 43 | diz=(int)(temps/10); // Calcul des dizaines |
vermaelen | 0:b8f42480ca37 | 44 | uni=((int)(temps))%10; // Calcul des unités |
vermaelen | 0:b8f42480ca37 | 45 | dix=(int)((temps-uni-(10*diz))*10); // Calcul des dixièmes |
vermaelen | 0:b8f42480ca37 | 46 | printf("temps=%.1f %d %d . %d \n\r",temps,diz,uni,dix); |
vermaelen | 0:b8f42480ca37 | 47 | affi.write(conv(255)); // Eteindre l'afficheur 0,5s |
vermaelen | 0:b8f42480ca37 | 48 | wait(0.5); |
vermaelen | 0:b8f42480ca37 | 49 | affi.write(conv(diz)); // Afficher les dizaines 0,3s |
vermaelen | 0:b8f42480ca37 | 50 | wait(0.3); |
vermaelen | 0:b8f42480ca37 | 51 | affi.write(conv(uni)); // Afficher les unités |
vermaelen | 0:b8f42480ca37 | 52 | wait(0.3); |
vermaelen | 0:b8f42480ca37 | 53 | affi.write(conv(16)); // Afficher le point |
vermaelen | 0:b8f42480ca37 | 54 | wait(0.3); |
vermaelen | 0:b8f42480ca37 | 55 | affi.write(conv(dix)); // Afficher les dixièmes |
vermaelen | 0:b8f42480ca37 | 56 | wait(0.3); |
vermaelen | 0:b8f42480ca37 | 57 | } |
vermaelen | 0:b8f42480ca37 | 58 | } |
vermaelen | 0:b8f42480ca37 | 59 | } |
vermaelen | 0:b8f42480ca37 | 60 | int conv(int e) // Corps de la fonction de conversion |
vermaelen | 0:b8f42480ca37 | 61 | { |
vermaelen | 0:b8f42480ca37 | 62 | int s; |
vermaelen | 0:b8f42480ca37 | 63 | switch(e) { |
vermaelen | 0:b8f42480ca37 | 64 | case 0: |
vermaelen | 0:b8f42480ca37 | 65 | s=0b11000000;//ou 192 ou 0xC0 -- Affiche un Zéro |
vermaelen | 0:b8f42480ca37 | 66 | break; |
vermaelen | 0:b8f42480ca37 | 67 | case 1: |
vermaelen | 0:b8f42480ca37 | 68 | s=0b11111001;//ou 249 ou 0xF9 -- Affiche un 1 |
vermaelen | 0:b8f42480ca37 | 69 | break; |
vermaelen | 0:b8f42480ca37 | 70 | case 2: |
vermaelen | 0:b8f42480ca37 | 71 | s=0b10100100; |
vermaelen | 0:b8f42480ca37 | 72 | break; |
vermaelen | 0:b8f42480ca37 | 73 | case 3: |
vermaelen | 0:b8f42480ca37 | 74 | s=0b10110000; |
vermaelen | 0:b8f42480ca37 | 75 | break; |
vermaelen | 0:b8f42480ca37 | 76 | case 4: |
vermaelen | 0:b8f42480ca37 | 77 | s=0b10011001; |
vermaelen | 0:b8f42480ca37 | 78 | break; |
vermaelen | 0:b8f42480ca37 | 79 | case 5: |
vermaelen | 0:b8f42480ca37 | 80 | s=0b10010010; |
vermaelen | 0:b8f42480ca37 | 81 | break; |
vermaelen | 0:b8f42480ca37 | 82 | case 6: |
vermaelen | 0:b8f42480ca37 | 83 | s=0b10000010; |
vermaelen | 0:b8f42480ca37 | 84 | break; |
vermaelen | 0:b8f42480ca37 | 85 | case 7: |
vermaelen | 0:b8f42480ca37 | 86 | s=0b11111000; |
vermaelen | 0:b8f42480ca37 | 87 | break; |
vermaelen | 0:b8f42480ca37 | 88 | case 8: |
vermaelen | 0:b8f42480ca37 | 89 | s=0b10000000; |
vermaelen | 0:b8f42480ca37 | 90 | break; |
vermaelen | 0:b8f42480ca37 | 91 | case 9: |
vermaelen | 0:b8f42480ca37 | 92 | s=0b10010000; |
vermaelen | 0:b8f42480ca37 | 93 | break; |
vermaelen | 0:b8f42480ca37 | 94 | case 16: |
vermaelen | 0:b8f42480ca37 | 95 | s=0b01111111; // Affiche le point (Dot Point) |
vermaelen | 0:b8f42480ca37 | 96 | break; |
vermaelen | 0:b8f42480ca37 | 97 | default : // Eteint l'afficheur |
vermaelen | 0:b8f42480ca37 | 98 | s=255; |
vermaelen | 0:b8f42480ca37 | 99 | } |
vermaelen | 0:b8f42480ca37 | 100 | return s; |
vermaelen | 0:b8f42480ca37 | 101 | } |