TP_capteur_courant_v1

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed

Committer:
MoussOudj
Date:
Thu Jun 21 10:25:32 2018 +0000
Revision:
2:e28e2a1a6d78
Parent:
1:724f5e3b485a
TP_capteur_courant_V2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MoussOudj 0:3cfe1338ab3d 1 #include "mbed.h"
MoussOudj 0:3cfe1338ab3d 2 #include "TS_DISCO_F746NG.h"
MoussOudj 0:3cfe1338ab3d 3 #include "LCD_DISCO_F746NG.h"
MoussOudj 0:3cfe1338ab3d 4 #include "Smiley.h"
MoussOudj 0:3cfe1338ab3d 5
MoussOudj 2:e28e2a1a6d78 6
MoussOudj 0:3cfe1338ab3d 7 LCD_DISCO_F746NG lcd;
MoussOudj 0:3cfe1338ab3d 8 TS_DISCO_F746NG ts;
MoussOudj 0:3cfe1338ab3d 9 AnalogIn anal(A4);
MoussOudj 0:3cfe1338ab3d 10 TS_StateTypeDef TS_State;
MoussOudj 2:e28e2a1a6d78 11 //LocalFileSystem local("local");
MoussOudj 0:3cfe1338ab3d 12
MoussOudj 0:3cfe1338ab3d 13 ///////////////////////////////////Déclaration des variables///////////////////////////////////////////
MoussOudj 1:724f5e3b485a 14 float tension = 0;
MoussOudj 1:724f5e3b485a 15 float amp = 0;
MoussOudj 0:3cfe1338ab3d 16 int active=0;
MoussOudj 0:3cfe1338ab3d 17
MoussOudj 0:3cfe1338ab3d 18
MoussOudj 0:3cfe1338ab3d 19 uint16_t x, y;
MoussOudj 0:3cfe1338ab3d 20 uint8_t text[30];
MoussOudj 0:3cfe1338ab3d 21 uint8_t status;
MoussOudj 0:3cfe1338ab3d 22 uint8_t idx;
MoussOudj 0:3cfe1338ab3d 23 uint8_t cleared = 0;
MoussOudj 0:3cfe1338ab3d 24 uint8_t prev_nb_touches = 0;
MoussOudj 0:3cfe1338ab3d 25 ///////////////////////////////////Déclaration des variables///////////////////////////////////////////
MoussOudj 0:3cfe1338ab3d 26
MoussOudj 0:3cfe1338ab3d 27
MoussOudj 0:3cfe1338ab3d 28
MoussOudj 0:3cfe1338ab3d 29 //////////////////////////////////////////PROTOTYPE////////////////////////////////////////////////////
MoussOudj 0:3cfe1338ab3d 30 void Init_TS(void); //Fonction d'initialisation du TouchScreen
MoussOudj 0:3cfe1338ab3d 31 void Init_Bouton(void); //Fonction d'initalisation des boutons
MoussOudj 0:3cfe1338ab3d 32 void Affichage_valeurs(void); //Fonction d'affichage de la tension et du courant
MoussOudj 0:3cfe1338ab3d 33 void Action_bouton(void); //Fonction d'action à l'appui des bouton
MoussOudj 0:3cfe1338ab3d 34 //////////////////////////////////////////PROTOTYPE////////////////////////////////////////////////////
MoussOudj 0:3cfe1338ab3d 35
MoussOudj 0:3cfe1338ab3d 36
MoussOudj 0:3cfe1338ab3d 37
MoussOudj 0:3cfe1338ab3d 38
MoussOudj 0:3cfe1338ab3d 39 int main()
MoussOudj 0:3cfe1338ab3d 40 {
MoussOudj 0:3cfe1338ab3d 41
MoussOudj 0:3cfe1338ab3d 42
MoussOudj 0:3cfe1338ab3d 43
MoussOudj 0:3cfe1338ab3d 44 Init_TS(); //Appel de la fonction d'initialisation du TouchScreen
MoussOudj 0:3cfe1338ab3d 45
MoussOudj 0:3cfe1338ab3d 46 Init_Bouton(); //Appel de la fonction d'initialisation des boutons
MoussOudj 0:3cfe1338ab3d 47
MoussOudj 2:e28e2a1a6d78 48 //lcd.DrawBitmap(20,20,(uint8_t*)"local\stop.bmp");
MoussOudj 0:3cfe1338ab3d 49
MoussOudj 0:3cfe1338ab3d 50
MoussOudj 0:3cfe1338ab3d 51 while(1) {
MoussOudj 0:3cfe1338ab3d 52
MoussOudj 0:3cfe1338ab3d 53
MoussOudj 0:3cfe1338ab3d 54 Affichage_valeurs(); //Appel de la fonction pour calculer et afficher sur l'ecran LCD la tension et le courant
MoussOudj 0:3cfe1338ab3d 55
MoussOudj 0:3cfe1338ab3d 56 ts.GetState(&TS_State); //Récupération de l'état du TouchScreen
MoussOudj 0:3cfe1338ab3d 57
MoussOudj 0:3cfe1338ab3d 58 if (TS_State.touchDetected) { //Si touché détecté
MoussOudj 0:3cfe1338ab3d 59
MoussOudj 0:3cfe1338ab3d 60
MoussOudj 0:3cfe1338ab3d 61 for (idx = 0; idx < TS_State.touchDetected; idx++) { //Récupération de l'axe x et y
MoussOudj 0:3cfe1338ab3d 62 x = TS_State.touchX[idx]; //Récupération de l'axe x
MoussOudj 0:3cfe1338ab3d 63 y = TS_State.touchY[idx]; //Récupération de l'axey
MoussOudj 0:3cfe1338ab3d 64 }
MoussOudj 0:3cfe1338ab3d 65
MoussOudj 0:3cfe1338ab3d 66
MoussOudj 0:3cfe1338ab3d 67 Action_bouton(); //Appel de la fonction qui permet d'effectuer l'action des boutons Start et Stop
MoussOudj 0:3cfe1338ab3d 68
MoussOudj 0:3cfe1338ab3d 69
MoussOudj 0:3cfe1338ab3d 70 }
MoussOudj 0:3cfe1338ab3d 71 }
MoussOudj 0:3cfe1338ab3d 72 }
MoussOudj 0:3cfe1338ab3d 73
MoussOudj 0:3cfe1338ab3d 74
MoussOudj 0:3cfe1338ab3d 75
MoussOudj 0:3cfe1338ab3d 76
MoussOudj 0:3cfe1338ab3d 77
MoussOudj 0:3cfe1338ab3d 78
MoussOudj 0:3cfe1338ab3d 79
MoussOudj 0:3cfe1338ab3d 80 ///////////////////////////////////////Initialisation TouchScreen//////////////////////////////////
MoussOudj 0:3cfe1338ab3d 81 void Init_TS(void)
MoussOudj 0:3cfe1338ab3d 82 {
MoussOudj 0:3cfe1338ab3d 83 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"Capteur courant DEMO", CENTER_MODE); //Affichage titre projet
MoussOudj 0:3cfe1338ab3d 84
MoussOudj 0:3cfe1338ab3d 85 wait(4); //Temporisation
MoussOudj 0:3cfe1338ab3d 86
MoussOudj 0:3cfe1338ab3d 87 status = ts.Init(lcd.GetXSize(), lcd.GetYSize()); //Acquisition des dimensions de l'écran
MoussOudj 0:3cfe1338ab3d 88
MoussOudj 0:3cfe1338ab3d 89 if (status != TS_OK) { //Si TouchScreen différent de OK
MoussOudj 0:3cfe1338ab3d 90 lcd.Clear(LCD_COLOR_RED);
MoussOudj 0:3cfe1338ab3d 91 lcd.SetBackColor(LCD_COLOR_RED);
MoussOudj 0:3cfe1338ab3d 92 lcd.SetTextColor(LCD_COLOR_WHITE);
MoussOudj 0:3cfe1338ab3d 93 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE); //Afficher Etat fail
MoussOudj 0:3cfe1338ab3d 94 } else { //Sinon
MoussOudj 0:3cfe1338ab3d 95 lcd.Clear(LCD_COLOR_GREEN);
MoussOudj 0:3cfe1338ab3d 96 lcd.SetBackColor(LCD_COLOR_GREEN);
MoussOudj 0:3cfe1338ab3d 97 lcd.SetTextColor(LCD_COLOR_WHITE);
MoussOudj 0:3cfe1338ab3d 98 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE); //Afficher Etat OK
MoussOudj 0:3cfe1338ab3d 99 }
MoussOudj 0:3cfe1338ab3d 100
MoussOudj 0:3cfe1338ab3d 101 wait(1); //Temporisation
MoussOudj 0:3cfe1338ab3d 102
MoussOudj 0:3cfe1338ab3d 103
MoussOudj 0:3cfe1338ab3d 104 }
MoussOudj 0:3cfe1338ab3d 105 ///////////////////////////////////////Initialisation TouchScreen//////////////////////////////////
MoussOudj 0:3cfe1338ab3d 106
MoussOudj 0:3cfe1338ab3d 107
MoussOudj 0:3cfe1338ab3d 108
MoussOudj 0:3cfe1338ab3d 109 ///////////////////////////////////////Initialisation Bouton///////////////////////////////////////
MoussOudj 0:3cfe1338ab3d 110 void Init_Bouton(void)
MoussOudj 0:3cfe1338ab3d 111 {
MoussOudj 2:e28e2a1a6d78 112
MoussOudj 2:e28e2a1a6d78 113
MoussOudj 0:3cfe1338ab3d 114
MoussOudj 2:e28e2a1a6d78 115 lcd.Clear(LCD_COLOR_WHITE); //Effacer l'affichage actuel
MoussOudj 0:3cfe1338ab3d 116 lcd.SetFont(&Font16);
MoussOudj 2:e28e2a1a6d78 117 lcd.SetBackColor(LCD_COLOR_WHITE); //Background en bleu
MoussOudj 2:e28e2a1a6d78 118
MoussOudj 2:e28e2a1a6d78 119
MoussOudj 2:e28e2a1a6d78 120
MoussOudj 2:e28e2a1a6d78 121
MoussOudj 0:3cfe1338ab3d 122
MoussOudj 0:3cfe1338ab3d 123 lcd.SetTextColor(LCD_COLOR_RED); //Dessine le premier bouton en rouge
MoussOudj 0:3cfe1338ab3d 124 lcd.DrawCircle(350, 230, 30); //Dessine le bouton (x,y,rayon)
MoussOudj 0:3cfe1338ab3d 125 lcd.FillCircle(350, 230, 30); //Remplis le bouton (x,y,rayon)
MoussOudj 0:3cfe1338ab3d 126
MoussOudj 0:3cfe1338ab3d 127 lcd.SetTextColor(LCD_COLOR_GREEN);
MoussOudj 0:3cfe1338ab3d 128 lcd.DrawCircle(150, 230, 30);
MoussOudj 0:3cfe1338ab3d 129 lcd.FillCircle(150, 230, 30);
MoussOudj 0:3cfe1338ab3d 130
MoussOudj 2:e28e2a1a6d78 131 lcd.SetTextColor(LCD_COLOR_BLUE); //Remettre l'écriture du texte en blanc
MoussOudj 2:e28e2a1a6d78 132
MoussOudj 2:e28e2a1a6d78 133 lcd.DrawRect(140,100,215,60);
MoussOudj 2:e28e2a1a6d78 134 sprintf((char*)text, "Capteur de courant"); //Efface l'affichage de l'état Start
MoussOudj 2:e28e2a1a6d78 135 lcd.DisplayStringAt(155, LINE(3), (uint8_t *)&text, LEFT_MODE);
MoussOudj 0:3cfe1338ab3d 136
MoussOudj 0:3cfe1338ab3d 137
MoussOudj 0:3cfe1338ab3d 138 }
MoussOudj 0:3cfe1338ab3d 139 ///////////////////////////////////////Initialisation Bouton//////////////////////////////////
MoussOudj 0:3cfe1338ab3d 140
MoussOudj 0:3cfe1338ab3d 141
MoussOudj 0:3cfe1338ab3d 142
MoussOudj 0:3cfe1338ab3d 143 ///////////////////////////////////////Affichage des valeurs//////////////////////////////////
MoussOudj 0:3cfe1338ab3d 144 void Affichage_valeurs(void)
MoussOudj 0:3cfe1338ab3d 145 {
MoussOudj 0:3cfe1338ab3d 146
MoussOudj 0:3cfe1338ab3d 147 if(active==1) //Si flag à 1
MoussOudj 0:3cfe1338ab3d 148 {
MoussOudj 0:3cfe1338ab3d 149
MoussOudj 1:724f5e3b485a 150 tension = 0.8*tension + 0.2*anal.read()*3.3; //Acquisition de la tension en entrée du port A4
MoussOudj 0:3cfe1338ab3d 151
MoussOudj 0:3cfe1338ab3d 152 amp = (23.307*tension) - (38.521); //Calcul du courant à l'aide de l'équation generée sur excel //y = 23.307x - 38.521
MoussOudj 0:3cfe1338ab3d 153
MoussOudj 0:3cfe1338ab3d 154 }
MoussOudj 0:3cfe1338ab3d 155
MoussOudj 2:e28e2a1a6d78 156 if(amp<0)
MoussOudj 2:e28e2a1a6d78 157 {
MoussOudj 2:e28e2a1a6d78 158
MoussOudj 2:e28e2a1a6d78 159 /*sprintf((char*)text, " "); //Affichage de l'état Start
MoussOudj 2:e28e2a1a6d78 160 lcd.DisplayStringAt(220, LINE(13), (uint8_t *)&text, LEFT_MODE);*/
MoussOudj 2:e28e2a1a6d78 161
MoussOudj 2:e28e2a1a6d78 162
MoussOudj 2:e28e2a1a6d78 163
MoussOudj 2:e28e2a1a6d78 164 sprintf((char*)text, "Calibration"); //Affichage de l'état Start
MoussOudj 2:e28e2a1a6d78 165 lcd.DisplayStringAt(200, LINE(11), (uint8_t *)&text, LEFT_MODE);
MoussOudj 2:e28e2a1a6d78 166 }
MoussOudj 2:e28e2a1a6d78 167 else
MoussOudj 2:e28e2a1a6d78 168 {
MoussOudj 2:e28e2a1a6d78 169
MoussOudj 2:e28e2a1a6d78 170
MoussOudj 2:e28e2a1a6d78 171 sprintf((char*)text, " "); //Efface l'affichage de l'état Stop
MoussOudj 2:e28e2a1a6d78 172 lcd.DisplayStringAt(200, LINE(11), (uint8_t *)&text, LEFT_MODE);
MoussOudj 2:e28e2a1a6d78 173
MoussOudj 2:e28e2a1a6d78 174 /*sprintf((char*)text, "Mesure"); //Affichage de l'état Start
MoussOudj 2:e28e2a1a6d78 175 lcd.DisplayStringAt(220, LINE(13), (uint8_t *)&text, LEFT_MODE);*/
MoussOudj 2:e28e2a1a6d78 176
MoussOudj 2:e28e2a1a6d78 177 lcd.ClearStringLine(8);
MoussOudj 2:e28e2a1a6d78 178 lcd.DrawRect(140,100,215,60);
MoussOudj 2:e28e2a1a6d78 179 sprintf((char*)text, "Intensite : %.2f",amp);
MoussOudj 2:e28e2a1a6d78 180 lcd.DisplayStringAt(150, LINE(8),(uint8_t *)&text, LEFT_MODE);
MoussOudj 2:e28e2a1a6d78 181 }
MoussOudj 2:e28e2a1a6d78 182
MoussOudj 2:e28e2a1a6d78 183
MoussOudj 2:e28e2a1a6d78 184
MoussOudj 0:3cfe1338ab3d 185 lcd.ClearStringLine(7); //Effacement de la ligne pour actualiser la valeur
MoussOudj 2:e28e2a1a6d78 186 lcd.DrawRect(140,100,215,60);
MoussOudj 0:3cfe1338ab3d 187 sprintf((char*)text, "Tension : %.2f",tension); //Ecriture de la valeur
MoussOudj 0:3cfe1338ab3d 188 lcd.DisplayStringAt(150, LINE(7),(uint8_t *)&text, LEFT_MODE); //Affichage de la valeur
MoussOudj 0:3cfe1338ab3d 189
MoussOudj 2:e28e2a1a6d78 190
MoussOudj 2:e28e2a1a6d78 191
MoussOudj 0:3cfe1338ab3d 192
MoussOudj 0:3cfe1338ab3d 193 wait(0.3); //Temporisation
MoussOudj 0:3cfe1338ab3d 194
MoussOudj 0:3cfe1338ab3d 195
MoussOudj 0:3cfe1338ab3d 196 }
MoussOudj 0:3cfe1338ab3d 197 ///////////////////////////////////////Affichage des valeurs//////////////////////////////////
MoussOudj 0:3cfe1338ab3d 198
MoussOudj 0:3cfe1338ab3d 199
MoussOudj 0:3cfe1338ab3d 200
MoussOudj 0:3cfe1338ab3d 201
MoussOudj 0:3cfe1338ab3d 202 ///////////////////////////////////////Action des boutons//////////////////////////////////
MoussOudj 0:3cfe1338ab3d 203 void Action_bouton(void)
MoussOudj 0:3cfe1338ab3d 204 {
MoussOudj 0:3cfe1338ab3d 205
MoussOudj 0:3cfe1338ab3d 206 if ((TS_State.touchDetected) & (x>320&x<380) & (y>200&y<260)) { //Quand touche détectée à la position du bouton Stop
MoussOudj 0:3cfe1338ab3d 207
MoussOudj 2:e28e2a1a6d78 208 sprintf((char*)text, " "); //Efface l'affichage de l'état Start
MoussOudj 2:e28e2a1a6d78 209 lcd.DisplayStringAt(220, LINE(13), (uint8_t *)&text, LEFT_MODE);
MoussOudj 0:3cfe1338ab3d 210
MoussOudj 2:e28e2a1a6d78 211 sprintf((char*)text, "Arret"); //Affichage de l'état Stop
MoussOudj 2:e28e2a1a6d78 212 lcd.DisplayStringAt(220, LINE(13), (uint8_t *)&text, LEFT_MODE);
MoussOudj 0:3cfe1338ab3d 213
MoussOudj 0:3cfe1338ab3d 214 lcd.ClearStringLine(8); //Mise à 0 du courant quand la lecture est stoppée
MoussOudj 0:3cfe1338ab3d 215 sprintf((char*)text, "Intensite : %.2f",amp);
MoussOudj 0:3cfe1338ab3d 216 lcd.DisplayStringAt(150, LINE(8),(uint8_t *)&text, LEFT_MODE);
MoussOudj 0:3cfe1338ab3d 217 amp = 0;
MoussOudj 0:3cfe1338ab3d 218
MoussOudj 0:3cfe1338ab3d 219 lcd.ClearStringLine(7); //Mise à 0 de la tension quand la lecture est stoppée
MoussOudj 0:3cfe1338ab3d 220 sprintf((char*)text, "Tension : %.2f",tension);
MoussOudj 0:3cfe1338ab3d 221 lcd.DisplayStringAt(150, LINE(7),(uint8_t *)&text, LEFT_MODE);
MoussOudj 0:3cfe1338ab3d 222 tension = 0;
MoussOudj 0:3cfe1338ab3d 223
MoussOudj 0:3cfe1338ab3d 224
MoussOudj 0:3cfe1338ab3d 225 active=0; //mise à 0 du drapeau
MoussOudj 0:3cfe1338ab3d 226
MoussOudj 0:3cfe1338ab3d 227
MoussOudj 2:e28e2a1a6d78 228 lcd.SetTextColor(LCD_COLOR_BLUE);
MoussOudj 0:3cfe1338ab3d 229 }
MoussOudj 0:3cfe1338ab3d 230
MoussOudj 0:3cfe1338ab3d 231 else if((TS_State.touchDetected) & (x>130&x<180) & (y>200&y<260) ) { //Quand touche détectée à la position du bouton Start
MoussOudj 0:3cfe1338ab3d 232
MoussOudj 2:e28e2a1a6d78 233 sprintf((char*)text, " "); //Efface l'affichage de l'état Stop
MoussOudj 2:e28e2a1a6d78 234 lcd.DisplayStringAt(220, LINE(13), (uint8_t *)&text, LEFT_MODE);
MoussOudj 2:e28e2a1a6d78 235
MoussOudj 2:e28e2a1a6d78 236
MoussOudj 2:e28e2a1a6d78 237
MoussOudj 2:e28e2a1a6d78 238 //active=1; //mise à 1 du drapeau
MoussOudj 2:e28e2a1a6d78 239
MoussOudj 2:e28e2a1a6d78 240
MoussOudj 2:e28e2a1a6d78 241
MoussOudj 0:3cfe1338ab3d 242
MoussOudj 2:e28e2a1a6d78 243 sprintf((char*)text, "Mesure"); //Affichage de l'état Start
MoussOudj 2:e28e2a1a6d78 244 lcd.DisplayStringAt(220, LINE(13), (uint8_t *)&text, LEFT_MODE);
MoussOudj 0:3cfe1338ab3d 245
MoussOudj 2:e28e2a1a6d78 246 active=1; //mise à 1 du drapeau
MoussOudj 2:e28e2a1a6d78 247
MoussOudj 2:e28e2a1a6d78 248
MoussOudj 0:3cfe1338ab3d 249
MoussOudj 2:e28e2a1a6d78 250 lcd.SetTextColor(LCD_COLOR_BLUE);
MoussOudj 0:3cfe1338ab3d 251 }
MoussOudj 0:3cfe1338ab3d 252
MoussOudj 0:3cfe1338ab3d 253
MoussOudj 0:3cfe1338ab3d 254
MoussOudj 0:3cfe1338ab3d 255 }
MoussOudj 0:3cfe1338ab3d 256 ///////////////////////////////////////Action des boutons//////////////////////////////////
MoussOudj 0:3cfe1338ab3d 257
MoussOudj 0:3cfe1338ab3d 258
MoussOudj 0:3cfe1338ab3d 259
MoussOudj 0:3cfe1338ab3d 260
MoussOudj 0:3cfe1338ab3d 261
MoussOudj 0:3cfe1338ab3d 262
MoussOudj 0:3cfe1338ab3d 263
MoussOudj 0:3cfe1338ab3d 264
MoussOudj 0:3cfe1338ab3d 265
MoussOudj 0:3cfe1338ab3d 266