ARNAUDO Manon / Mbed 2 deprecated Chrono

Dependencies:   mbed TextLCD

Committer:
arnaudomanon
Date:
Fri Mar 05 09:57:03 2021 +0000
Revision:
0:c1d9d272abfc
By manonarnaudo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
arnaudomanon 0:c1d9d272abfc 1 ///////////////////////////////////////////////////////////////////////////////////
arnaudomanon 0:c1d9d272abfc 2 // Machine A Etats (MAE) - Gestion d'un chronometre
arnaudomanon 0:c1d9d272abfc 3 // Cible : MBED LPC1768
arnaudomanon 0:c1d9d272abfc 4 // Langage C
arnaudomanon 0:c1d9d272abfc 5 //
arnaudomanon 0:c1d9d272abfc 6 // PhC OK le 02-03-2020
arnaudomanon 0:c1d9d272abfc 7 ///////////////////////////////////////////////////////////////////////////////////
arnaudomanon 0:c1d9d272abfc 8 // INCLUDES
arnaudomanon 0:c1d9d272abfc 9 #include "mbed.h"
arnaudomanon 0:c1d9d272abfc 10 #include "TextLCD.h"
arnaudomanon 0:c1d9d272abfc 11
arnaudomanon 0:c1d9d272abfc 12 // DEFINES
arnaudomanon 0:c1d9d272abfc 13 // Definition des constantes etats
arnaudomanon 0:c1d9d272abfc 14 #define STOP 0
arnaudomanon 0:c1d9d272abfc 15 #define RUN 1
arnaudomanon 0:c1d9d272abfc 16 #define LAP 2
arnaudomanon 0:c1d9d272abfc 17
arnaudomanon 0:c1d9d272abfc 18
arnaudomanon 0:c1d9d272abfc 19 // Constantes generales
arnaudomanon 0:c1d9d272abfc 20 #define LCD_SIZE 20 // la taille de l'afficheur LCD
arnaudomanon 0:c1d9d272abfc 21
arnaudomanon 0:c1d9d272abfc 22
arnaudomanon 0:c1d9d272abfc 23 // PROTOTYPES
arnaudomanon 0:c1d9d272abfc 24 void Init(void) ;
arnaudomanon 0:c1d9d272abfc 25 void A01(),A02(),A03(),A04(),A05(),A06(),A08();
arnaudomanon 0:c1d9d272abfc 26 void affiche ();
arnaudomanon 0:c1d9d272abfc 27 void gestion();
arnaudomanon 0:c1d9d272abfc 28
arnaudomanon 0:c1d9d272abfc 29
arnaudomanon 0:c1d9d272abfc 30 // OBJETS
arnaudomanon 0:c1d9d272abfc 31 DigitalIn BPMS(p12);
arnaudomanon 0:c1d9d272abfc 32 DigitalIn BPLR(p11);
arnaudomanon 0:c1d9d272abfc 33 Timer T1;
arnaudomanon 0:c1d9d272abfc 34 TextLCD MyLCD(p26,p25,p21,p22,p23,p24,TextLCD:: LCD20x4);
arnaudomanon 0:c1d9d272abfc 35
arnaudomanon 0:c1d9d272abfc 36
arnaudomanon 0:c1d9d272abfc 37 // GLOBALS
arnaudomanon 0:c1d9d272abfc 38 // Variable d'etat
arnaudomanon 0:c1d9d272abfc 39 int iEtat, iMs_avant=0, iLr_avant=0,iLap=0;
arnaudomanon 0:c1d9d272abfc 40
arnaudomanon 0:c1d9d272abfc 41
arnaudomanon 0:c1d9d272abfc 42 // Variables de gestion Heure, Minute, Seconde, Dixieme
arnaudomanon 0:c1d9d272abfc 43 unsigned char byH, byM,byS, byD;
arnaudomanon 0:c1d9d272abfc 44
arnaudomanon 0:c1d9d272abfc 45
arnaudomanon 0:c1d9d272abfc 46 // MAIN
arnaudomanon 0:c1d9d272abfc 47 int main()
arnaudomanon 0:c1d9d272abfc 48 {
arnaudomanon 0:c1d9d272abfc 49 // printf("\n\rDemarrage du programme\n\r") ;
arnaudomanon 0:c1d9d272abfc 50 int iMs=0, iLr=0;
arnaudomanon 0:c1d9d272abfc 51 Init() ;
arnaudomanon 0:c1d9d272abfc 52
arnaudomanon 0:c1d9d272abfc 53
arnaudomanon 0:c1d9d272abfc 54 while(true) {
arnaudomanon 0:c1d9d272abfc 55 iMs=BPMS.read();
arnaudomanon 0:c1d9d272abfc 56 iLr=BPLR.read();
arnaudomanon 0:c1d9d272abfc 57 switch(iEtat) {
arnaudomanon 0:c1d9d272abfc 58 case STOP:
arnaudomanon 0:c1d9d272abfc 59 if(iMs>iMs_avant) {
arnaudomanon 0:c1d9d272abfc 60 // printf("Evenement=MS\n\r");
arnaudomanon 0:c1d9d272abfc 61 A01();
arnaudomanon 0:c1d9d272abfc 62 //printf("Etat=RUN\n\r");
arnaudomanon 0:c1d9d272abfc 63 iEtat=RUN;
arnaudomanon 0:c1d9d272abfc 64 // wait(0.2);
arnaudomanon 0:c1d9d272abfc 65 break;
arnaudomanon 0:c1d9d272abfc 66 }
arnaudomanon 0:c1d9d272abfc 67 if(iLr>iLr_avant) {
arnaudomanon 0:c1d9d272abfc 68 // printf("Evenement=LR\n\r");
arnaudomanon 0:c1d9d272abfc 69 A08();
arnaudomanon 0:c1d9d272abfc 70 // printf("Etat=STOP\n\r");
arnaudomanon 0:c1d9d272abfc 71 iEtat=STOP;
arnaudomanon 0:c1d9d272abfc 72 // wait(0.2);
arnaudomanon 0:c1d9d272abfc 73 break;
arnaudomanon 0:c1d9d272abfc 74 }
arnaudomanon 0:c1d9d272abfc 75 break;
arnaudomanon 0:c1d9d272abfc 76
arnaudomanon 0:c1d9d272abfc 77 case RUN:
arnaudomanon 0:c1d9d272abfc 78 if(iMs>iMs_avant) {
arnaudomanon 0:c1d9d272abfc 79 //printf("Evenement=MS\n\r");
arnaudomanon 0:c1d9d272abfc 80 A02();
arnaudomanon 0:c1d9d272abfc 81 //printf("Etat=STOP\n\r");
arnaudomanon 0:c1d9d272abfc 82 iEtat=STOP;
arnaudomanon 0:c1d9d272abfc 83 //wait(0.2);
arnaudomanon 0:c1d9d272abfc 84 break;
arnaudomanon 0:c1d9d272abfc 85 }
arnaudomanon 0:c1d9d272abfc 86 if(iLr>iLr_avant) {
arnaudomanon 0:c1d9d272abfc 87 //printf("Evenement=LR\n\r");
arnaudomanon 0:c1d9d272abfc 88 A04();
arnaudomanon 0:c1d9d272abfc 89 //printf("Etat=LAP\n\r");
arnaudomanon 0:c1d9d272abfc 90 iEtat=LAP;
arnaudomanon 0:c1d9d272abfc 91 //wait(0.2);
arnaudomanon 0:c1d9d272abfc 92 break;
arnaudomanon 0:c1d9d272abfc 93 }
arnaudomanon 0:c1d9d272abfc 94 if(T1.read_ms()>=10) {
arnaudomanon 0:c1d9d272abfc 95 //printf("Evenement=TIME\n\r");
arnaudomanon 0:c1d9d272abfc 96 A03();
arnaudomanon 0:c1d9d272abfc 97 //printf("Etat=RUN\n\r");
arnaudomanon 0:c1d9d272abfc 98 iEtat=RUN;
arnaudomanon 0:c1d9d272abfc 99 break;
arnaudomanon 0:c1d9d272abfc 100 }
arnaudomanon 0:c1d9d272abfc 101 break;
arnaudomanon 0:c1d9d272abfc 102 case LAP:
arnaudomanon 0:c1d9d272abfc 103 if(iMs>iMs_avant) {
arnaudomanon 0:c1d9d272abfc 104 //printf("Evenement=MS\n\r");
arnaudomanon 0:c1d9d272abfc 105 A02();
arnaudomanon 0:c1d9d272abfc 106 //printf("Etat=STOP\n\r");
arnaudomanon 0:c1d9d272abfc 107 iEtat=STOP;
arnaudomanon 0:c1d9d272abfc 108
arnaudomanon 0:c1d9d272abfc 109 break;
arnaudomanon 0:c1d9d272abfc 110 }
arnaudomanon 0:c1d9d272abfc 111 if(iLr>iLr_avant) {
arnaudomanon 0:c1d9d272abfc 112 //printf("Evenement=LR\n\r");
arnaudomanon 0:c1d9d272abfc 113 A05();
arnaudomanon 0:c1d9d272abfc 114 //printf("Etat=RUN\n\r");
arnaudomanon 0:c1d9d272abfc 115 iEtat=RUN;
arnaudomanon 0:c1d9d272abfc 116 break;
arnaudomanon 0:c1d9d272abfc 117 }
arnaudomanon 0:c1d9d272abfc 118 if(T1.read_ms()>=10) {
arnaudomanon 0:c1d9d272abfc 119 //printf("Evenement=TIME\n\r");
arnaudomanon 0:c1d9d272abfc 120 A06();
arnaudomanon 0:c1d9d272abfc 121 //printf("Etat=LAP\n\r");
arnaudomanon 0:c1d9d272abfc 122 iEtat=LAP;
arnaudomanon 0:c1d9d272abfc 123 break;
arnaudomanon 0:c1d9d272abfc 124 }
arnaudomanon 0:c1d9d272abfc 125 break;
arnaudomanon 0:c1d9d272abfc 126 }
arnaudomanon 0:c1d9d272abfc 127
arnaudomanon 0:c1d9d272abfc 128
arnaudomanon 0:c1d9d272abfc 129
arnaudomanon 0:c1d9d272abfc 130 } // end while
arnaudomanon 0:c1d9d272abfc 131 } // end main
arnaudomanon 0:c1d9d272abfc 132
arnaudomanon 0:c1d9d272abfc 133
arnaudomanon 0:c1d9d272abfc 134
arnaudomanon 0:c1d9d272abfc 135
arnaudomanon 0:c1d9d272abfc 136 ///////////////////////////
arnaudomanon 0:c1d9d272abfc 137 // Les actions elementaires
arnaudomanon 0:c1d9d272abfc 138 ///////////////////////////
arnaudomanon 0:c1d9d272abfc 139 void Init(void)
arnaudomanon 0:c1d9d272abfc 140 {
arnaudomanon 0:c1d9d272abfc 141 BPMS.mode(PullDown);
arnaudomanon 0:c1d9d272abfc 142 BPLR.mode(PullDown);
arnaudomanon 0:c1d9d272abfc 143 // Etat initial
arnaudomanon 0:c1d9d272abfc 144 iEtat = STOP ;
arnaudomanon 0:c1d9d272abfc 145 // printf("Etat initial = STOP\n\r") ;
arnaudomanon 0:c1d9d272abfc 146
arnaudomanon 0:c1d9d272abfc 147 MyLCD.cls();
arnaudomanon 0:c1d9d272abfc 148 MyLCD.printf("Time=00.00.00.00.00\n\r");
arnaudomanon 0:c1d9d272abfc 149 MyLCD.printf("Lap=0");
arnaudomanon 0:c1d9d272abfc 150 }
arnaudomanon 0:c1d9d272abfc 151 void A01()
arnaudomanon 0:c1d9d272abfc 152 {
arnaudomanon 0:c1d9d272abfc 153 //printf("Action=A01\n\r");
arnaudomanon 0:c1d9d272abfc 154 T1.start();
arnaudomanon 0:c1d9d272abfc 155 affiche();
arnaudomanon 0:c1d9d272abfc 156 }
arnaudomanon 0:c1d9d272abfc 157
arnaudomanon 0:c1d9d272abfc 158 void A02()
arnaudomanon 0:c1d9d272abfc 159 {
arnaudomanon 0:c1d9d272abfc 160 //printf("Action=A02\n\r");
arnaudomanon 0:c1d9d272abfc 161 T1.stop();
arnaudomanon 0:c1d9d272abfc 162 affiche();
arnaudomanon 0:c1d9d272abfc 163 }
arnaudomanon 0:c1d9d272abfc 164
arnaudomanon 0:c1d9d272abfc 165 void A03()
arnaudomanon 0:c1d9d272abfc 166 {
arnaudomanon 0:c1d9d272abfc 167 //printf("Action=A03\n\r");
arnaudomanon 0:c1d9d272abfc 168 T1.reset();
arnaudomanon 0:c1d9d272abfc 169 affiche();
arnaudomanon 0:c1d9d272abfc 170 gestion();
arnaudomanon 0:c1d9d272abfc 171 }
arnaudomanon 0:c1d9d272abfc 172
arnaudomanon 0:c1d9d272abfc 173 void A04()
arnaudomanon 0:c1d9d272abfc 174 {
arnaudomanon 0:c1d9d272abfc 175 iLap++;
arnaudomanon 0:c1d9d272abfc 176 wait(0.2);
arnaudomanon 0:c1d9d272abfc 177 //printf("Action=A04\n\r");
arnaudomanon 0:c1d9d272abfc 178 }
arnaudomanon 0:c1d9d272abfc 179
arnaudomanon 0:c1d9d272abfc 180 void A05()
arnaudomanon 0:c1d9d272abfc 181 {
arnaudomanon 0:c1d9d272abfc 182 //printf("Action=A05\n\r");
arnaudomanon 0:c1d9d272abfc 183 affiche();
arnaudomanon 0:c1d9d272abfc 184 }
arnaudomanon 0:c1d9d272abfc 185
arnaudomanon 0:c1d9d272abfc 186 void A06()
arnaudomanon 0:c1d9d272abfc 187 {
arnaudomanon 0:c1d9d272abfc 188 //printf("Action=A06\n\r");
arnaudomanon 0:c1d9d272abfc 189 T1.reset();
arnaudomanon 0:c1d9d272abfc 190 gestion();
arnaudomanon 0:c1d9d272abfc 191 }
arnaudomanon 0:c1d9d272abfc 192
arnaudomanon 0:c1d9d272abfc 193 void A08()
arnaudomanon 0:c1d9d272abfc 194 {
arnaudomanon 0:c1d9d272abfc 195 //printf("Action=A08\n\r");
arnaudomanon 0:c1d9d272abfc 196 byD=byS=byM=byH=0;
arnaudomanon 0:c1d9d272abfc 197 MyLCD.cls();
arnaudomanon 0:c1d9d272abfc 198 affiche();
arnaudomanon 0:c1d9d272abfc 199 }
arnaudomanon 0:c1d9d272abfc 200
arnaudomanon 0:c1d9d272abfc 201 void affiche()
arnaudomanon 0:c1d9d272abfc 202 {
arnaudomanon 0:c1d9d272abfc 203 MyLCD.locate(0,0);
arnaudomanon 0:c1d9d272abfc 204 //sprintf(,"TIME=%02d %02d %02d %02d",gbyH, gbyM, gbyS, gbyD);
arnaudomanon 0:c1d9d272abfc 205 MyLCD.locate(0,0);
arnaudomanon 0:c1d9d272abfc 206 MyLCD.printf("TIME=%02d:%02d:%02d:%02d:%02d\n\r",00,byH, byM, byS, byD);
arnaudomanon 0:c1d9d272abfc 207 MyLCD.printf("LAP=%d",iLap);
arnaudomanon 0:c1d9d272abfc 208 }
arnaudomanon 0:c1d9d272abfc 209
arnaudomanon 0:c1d9d272abfc 210 void gestion()
arnaudomanon 0:c1d9d272abfc 211 {
arnaudomanon 0:c1d9d272abfc 212 byD++;
arnaudomanon 0:c1d9d272abfc 213 if(byD>99) {
arnaudomanon 0:c1d9d272abfc 214 byD=0;
arnaudomanon 0:c1d9d272abfc 215 byS++;
arnaudomanon 0:c1d9d272abfc 216 if(byS>59) {
arnaudomanon 0:c1d9d272abfc 217 byS=0;
arnaudomanon 0:c1d9d272abfc 218 byM++;
arnaudomanon 0:c1d9d272abfc 219 if(byM>59) {
arnaudomanon 0:c1d9d272abfc 220 byM=0;
arnaudomanon 0:c1d9d272abfc 221 byH++;
arnaudomanon 0:c1d9d272abfc 222 if(byH>23) byH=0;
arnaudomanon 0:c1d9d272abfc 223 }
arnaudomanon 0:c1d9d272abfc 224 }
arnaudomanon 0:c1d9d272abfc 225 }
arnaudomanon 0:c1d9d272abfc 226 }