Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:c1d9d272abfc, 2021-03-05 (annotated)
- Committer:
- arnaudomanon
- Date:
- Fri Mar 05 09:57:03 2021 +0000
- Revision:
- 0:c1d9d272abfc
By manonarnaudo
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |