TP_capteur_courant_v1
Dependencies: BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed
main.cpp
- Committer:
- MoussOudj
- Date:
- 2018-06-21
- Revision:
- 2:e28e2a1a6d78
- Parent:
- 1:724f5e3b485a
File content as of revision 2:e28e2a1a6d78:
#include "mbed.h" #include "TS_DISCO_F746NG.h" #include "LCD_DISCO_F746NG.h" #include "Smiley.h" LCD_DISCO_F746NG lcd; TS_DISCO_F746NG ts; AnalogIn anal(A4); TS_StateTypeDef TS_State; //LocalFileSystem local("local"); ///////////////////////////////////Déclaration des variables/////////////////////////////////////////// float tension = 0; float amp = 0; int active=0; uint16_t x, y; uint8_t text[30]; uint8_t status; uint8_t idx; uint8_t cleared = 0; uint8_t prev_nb_touches = 0; ///////////////////////////////////Déclaration des variables/////////////////////////////////////////// //////////////////////////////////////////PROTOTYPE//////////////////////////////////////////////////// void Init_TS(void); //Fonction d'initialisation du TouchScreen void Init_Bouton(void); //Fonction d'initalisation des boutons void Affichage_valeurs(void); //Fonction d'affichage de la tension et du courant void Action_bouton(void); //Fonction d'action à l'appui des bouton //////////////////////////////////////////PROTOTYPE//////////////////////////////////////////////////// int main() { Init_TS(); //Appel de la fonction d'initialisation du TouchScreen Init_Bouton(); //Appel de la fonction d'initialisation des boutons //lcd.DrawBitmap(20,20,(uint8_t*)"local\stop.bmp"); while(1) { Affichage_valeurs(); //Appel de la fonction pour calculer et afficher sur l'ecran LCD la tension et le courant ts.GetState(&TS_State); //Récupération de l'état du TouchScreen if (TS_State.touchDetected) { //Si touché détecté for (idx = 0; idx < TS_State.touchDetected; idx++) { //Récupération de l'axe x et y x = TS_State.touchX[idx]; //Récupération de l'axe x y = TS_State.touchY[idx]; //Récupération de l'axey } Action_bouton(); //Appel de la fonction qui permet d'effectuer l'action des boutons Start et Stop } } } ///////////////////////////////////////Initialisation TouchScreen////////////////////////////////// void Init_TS(void) { lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"Capteur courant DEMO", CENTER_MODE); //Affichage titre projet wait(4); //Temporisation status = ts.Init(lcd.GetXSize(), lcd.GetYSize()); //Acquisition des dimensions de l'écran if (status != TS_OK) { //Si TouchScreen différent de OK lcd.Clear(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); lcd.SetTextColor(LCD_COLOR_WHITE); lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE); //Afficher Etat fail } else { //Sinon lcd.Clear(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); lcd.SetTextColor(LCD_COLOR_WHITE); lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE); //Afficher Etat OK } wait(1); //Temporisation } ///////////////////////////////////////Initialisation TouchScreen////////////////////////////////// ///////////////////////////////////////Initialisation Bouton/////////////////////////////////////// void Init_Bouton(void) { lcd.Clear(LCD_COLOR_WHITE); //Effacer l'affichage actuel lcd.SetFont(&Font16); lcd.SetBackColor(LCD_COLOR_WHITE); //Background en bleu lcd.SetTextColor(LCD_COLOR_RED); //Dessine le premier bouton en rouge lcd.DrawCircle(350, 230, 30); //Dessine le bouton (x,y,rayon) lcd.FillCircle(350, 230, 30); //Remplis le bouton (x,y,rayon) lcd.SetTextColor(LCD_COLOR_GREEN); lcd.DrawCircle(150, 230, 30); lcd.FillCircle(150, 230, 30); lcd.SetTextColor(LCD_COLOR_BLUE); //Remettre l'écriture du texte en blanc lcd.DrawRect(140,100,215,60); sprintf((char*)text, "Capteur de courant"); //Efface l'affichage de l'état Start lcd.DisplayStringAt(155, LINE(3), (uint8_t *)&text, LEFT_MODE); } ///////////////////////////////////////Initialisation Bouton////////////////////////////////// ///////////////////////////////////////Affichage des valeurs////////////////////////////////// void Affichage_valeurs(void) { if(active==1) //Si flag à 1 { tension = 0.8*tension + 0.2*anal.read()*3.3; //Acquisition de la tension en entrée du port A4 amp = (23.307*tension) - (38.521); //Calcul du courant à l'aide de l'équation generée sur excel //y = 23.307x - 38.521 } if(amp<0) { /*sprintf((char*)text, " "); //Affichage de l'état Start lcd.DisplayStringAt(220, LINE(13), (uint8_t *)&text, LEFT_MODE);*/ sprintf((char*)text, "Calibration"); //Affichage de l'état Start lcd.DisplayStringAt(200, LINE(11), (uint8_t *)&text, LEFT_MODE); } else { sprintf((char*)text, " "); //Efface l'affichage de l'état Stop lcd.DisplayStringAt(200, LINE(11), (uint8_t *)&text, LEFT_MODE); /*sprintf((char*)text, "Mesure"); //Affichage de l'état Start lcd.DisplayStringAt(220, LINE(13), (uint8_t *)&text, LEFT_MODE);*/ lcd.ClearStringLine(8); lcd.DrawRect(140,100,215,60); sprintf((char*)text, "Intensite : %.2f",amp); lcd.DisplayStringAt(150, LINE(8),(uint8_t *)&text, LEFT_MODE); } lcd.ClearStringLine(7); //Effacement de la ligne pour actualiser la valeur lcd.DrawRect(140,100,215,60); sprintf((char*)text, "Tension : %.2f",tension); //Ecriture de la valeur lcd.DisplayStringAt(150, LINE(7),(uint8_t *)&text, LEFT_MODE); //Affichage de la valeur wait(0.3); //Temporisation } ///////////////////////////////////////Affichage des valeurs////////////////////////////////// ///////////////////////////////////////Action des boutons////////////////////////////////// void Action_bouton(void) { if ((TS_State.touchDetected) & (x>320&x<380) & (y>200&y<260)) { //Quand touche détectée à la position du bouton Stop sprintf((char*)text, " "); //Efface l'affichage de l'état Start lcd.DisplayStringAt(220, LINE(13), (uint8_t *)&text, LEFT_MODE); sprintf((char*)text, "Arret"); //Affichage de l'état Stop lcd.DisplayStringAt(220, LINE(13), (uint8_t *)&text, LEFT_MODE); lcd.ClearStringLine(8); //Mise à 0 du courant quand la lecture est stoppée sprintf((char*)text, "Intensite : %.2f",amp); lcd.DisplayStringAt(150, LINE(8),(uint8_t *)&text, LEFT_MODE); amp = 0; lcd.ClearStringLine(7); //Mise à 0 de la tension quand la lecture est stoppée sprintf((char*)text, "Tension : %.2f",tension); lcd.DisplayStringAt(150, LINE(7),(uint8_t *)&text, LEFT_MODE); tension = 0; active=0; //mise à 0 du drapeau lcd.SetTextColor(LCD_COLOR_BLUE); } else if((TS_State.touchDetected) & (x>130&x<180) & (y>200&y<260) ) { //Quand touche détectée à la position du bouton Start sprintf((char*)text, " "); //Efface l'affichage de l'état Stop lcd.DisplayStringAt(220, LINE(13), (uint8_t *)&text, LEFT_MODE); //active=1; //mise à 1 du drapeau sprintf((char*)text, "Mesure"); //Affichage de l'état Start lcd.DisplayStringAt(220, LINE(13), (uint8_t *)&text, LEFT_MODE); active=1; //mise à 1 du drapeau lcd.SetTextColor(LCD_COLOR_BLUE); } } ///////////////////////////////////////Action des boutons//////////////////////////////////