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.
Dependencies: TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG lvgl_RB FastPWM millis
main.cpp
00001 #include "mbed.h" 00002 #include "TS_DISCO_F746NG.h" 00003 #include "LCD_DISCO_F746NG.h" 00004 #include "lvgl/lvgl.h" 00005 #include "lv_conf.h " 00006 #include "millis.h" 00007 #include "FastPWM.h" 00008 #include <string> 00009 #include "lv_i18n.h" 00010 00011 #include "lv_theme_rb.h" //GABOR 00012 00013 Ticker ticker; //Initialize system tick 00014 LCD_DISCO_F746NG lcd; //Initialize display driver 00015 TS_DISCO_F746NG ts; //Initialize touchpad driver 00016 TS_StateTypeDef TS_State; //Initialize touch state sctruct 00017 00018 Serial serial(USBTX, USBRX); 00019 00020 /********************* 00021 * ENTREES SORTIES 00022 *********************/ 00023 //TENSION BATTERIE 00024 AnalogIn AI_TENSION_BAT(A4); 00025 00026 //PWM 00027 FastPWM fastpwm(D12,1); //steup pwm output on pin d12 with a prescaler of 1 00028 00029 //MARCHE POMPE 00030 DigitalOut DO_POMPE(D13); 00031 00032 //COMPTEUR IMPULSION 00033 DigitalIn DI_CPTPuls(D7); 00034 //InterruptIn DI_CPTPuls(D7); // 00035 00036 00037 00038 /********************** 00039 * VARIABLES GENERALES 00040 **********************/ 00041 int X; 00042 int Y; 00043 Timer tempo; 00044 bool Top1ms; 00045 bool Top10ms; 00046 bool Top100ms; 00047 bool Top1s; 00048 bool Top5s; 00049 bool Top1min; 00050 char text[100]; 00051 char text2[100]; 00052 00053 float TensionBat; 00054 float MoyTensBat[101]; 00055 int CsgPompe=0; 00056 00057 uint64_t Micros=0; 00058 uint64_t CalcTpsCy=0; 00059 float TpsCy=0; 00060 00061 uint64_t MemMicros0=0; 00062 uint64_t MemMicros1=0; 00063 uint64_t MemMicros2=0; 00064 uint64_t MemMicros3=0; 00065 uint64_t MemMicros4=0; 00066 uint64_t MemMicros5=0; 00067 00068 00069 int CalcFmPuls; 00070 int CalcFdPuls; 00071 bool FmCPTPuls; 00072 uint64_t TimerPuls=0; 00073 uint64_t TpsPuls=0; 00074 float Calcul=0; 00075 uint64_t MemTpsPuls=0; 00076 uint64_t MemTps16Puls=0; 00077 int NumDent=0; 00078 uint64_t CptPuls=0; 00079 uint64_t CalcDebit=0; 00080 float Debit; 00081 float TpsEntre2Puls[20]; 00082 float TpsMinEntre2Puls; 00083 float TpsMaxEntre2Puls; 00084 float Volume; 00085 float VolParTour=1200;//en ml 00086 00087 int hres = 480; 00088 int vres = 272; 00089 bool CDA_POMPE; 00090 00091 00092 uint64_t test=0; 00093 00094 //VARIABLES GESTION MOT DE PASSE 00095 00096 00097 /********************* 00098 * OBJET PAGES 00099 *********************/ 00100 static lv_obj_t * BandeauHaut; 00101 static void AFFBandeauHaut(int Num); 00102 static lv_obj_t * SousMenu; 00103 static void AFFSousMenu(int Num); 00104 static lv_obj_t * Page; 00105 int PageAff=0; 00106 int MemPageAff=0; 00107 static void AFFPage(int Num); 00108 00109 00110 static lv_obj_t * PopupMDP; 00111 static void AFFPopupMDP(); 00112 00113 static void init_all_themes(uint16_t hue); 00114 00115 /********************* 00116 * OBJET GENERAUX 00117 *********************/ 00118 static lv_obj_t *mbox; 00119 00120 /***************************** 00121 * VARIABLES/OBJETS CONNEXION 00122 *****************************/ 00123 static lv_obj_t * SelectID; 00124 static lv_obj_t * MDP; 00125 static void SelectID_ACT(lv_obj_t * obj, lv_event_t event); 00126 uint32_t TpsMdpEnCours=0; 00127 struct Personne 00128 { 00129 string Nom; 00130 string MDP; //mot de passe à 4 chiffres 00131 int Niveau; //0:aucun 1:Opérateur 2:superviseur 3:constructeur 00132 int Tps; //Temps de connexion 00133 }; 00134 Personne User[100]; 00135 Personne UserEC; 00136 static void BpValidMDP_ACT(lv_obj_t * btn, lv_event_t event); 00137 static void BpAnnulMDP_ACT(lv_obj_t * btn, lv_event_t event); 00138 static void mboxMdp_ACT(lv_obj_t * btn, lv_event_t event); 00139 static void mboxMdp_ACT2(lv_obj_t * btn, lv_event_t event); 00140 00141 /********************* 00142 * OBJETS BP MENU 00143 *********************/ 00144 static lv_obj_t * M100; 00145 static lv_obj_t * M200; 00146 static lv_obj_t * M300; 00147 static lv_obj_t * M400; 00148 static lv_obj_t * M500; 00149 static lv_obj_t * M600; 00150 00151 static lv_obj_t * SM101; 00152 static lv_obj_t * SM102; 00153 static lv_obj_t * SM103; 00154 static lv_obj_t * SM104; 00155 static lv_obj_t * SM105; 00156 00157 static lv_obj_t * SM201; 00158 static lv_obj_t * SM202; 00159 00160 static lv_obj_t * SM301; 00161 00162 //FONCTIONS ASSOCIEES 00163 static void M100_ACT(lv_obj_t * btn, lv_event_t event); 00164 static void M200_ACT(lv_obj_t * btn, lv_event_t event); 00165 static void M300_ACT(lv_obj_t * btn, lv_event_t event); 00166 static void M400_ACT(lv_obj_t * btn, lv_event_t event); 00167 static void M500_ACT(lv_obj_t * btn, lv_event_t event); 00168 static void M600_ACT(lv_obj_t * btn, lv_event_t event); 00169 00170 static void SM101_ACT(lv_obj_t * btn, lv_event_t event); 00171 static void SM102_ACT(lv_obj_t * btn, lv_event_t event); 00172 static void SM103_ACT(lv_obj_t * btn, lv_event_t event); 00173 static void SM104_ACT(lv_obj_t * btn, lv_event_t event); 00174 static void SM105_ACT(lv_obj_t * btn, lv_event_t event); 00175 00176 static void SM201_ACT(lv_obj_t * btn, lv_event_t event); 00177 static void SM202_ACT(lv_obj_t * btn, lv_event_t event); 00178 static void SM203_ACT(lv_obj_t * btn, lv_event_t event); 00179 00180 static void SM301_ACT(lv_obj_t * btn, lv_event_t event); 00181 00182 /********************* 00183 * OBJETS 00184 *********************/ 00185 static lv_obj_t *FondGris ; 00186 static lv_obj_t *FondGris2 ; 00187 00188 /********************* 00189 * MATRICE DE BOUTONS 00190 *********************/ 00191 static const char * PAVE_NUMERIQUE_MAP[] = {"7", "8", "9","\n", 00192 "4", "5","6", "\n", 00193 "1", "2", "3","\n", 00194 "0", LV_SYMBOL_BACKSPACE, ""}; 00195 /********************* 00196 * STYLES 00197 *********************/ 00198 static lv_style_t Style_texte1; 00199 static lv_style_t Style_texte2; 00200 static lv_style_t Style_BPM; 00201 static lv_style_t Style_BPSM; 00202 static lv_style_t Style_BPSMInactif; 00203 static lv_style_t Style_BP; 00204 00205 /********************* 00206 * MULTILANGUE 00207 *********************/ 00208 int Langue=1; 00209 static void LANGUE_FR_ACT(lv_obj_t * btn, lv_event_t event); 00210 static void LANGUE_EN_ACT(lv_obj_t * btn, lv_event_t event); 00211 00212 /********************* 00213 * FONCTION 00214 *********************/ 00215 void initialisation(); 00216 void interruptCompteur(); 00217 00218 static void BPRAZ_ACT(lv_obj_t * btn, lv_event_t event); 00219 static void BPPOMPE_ACT(lv_obj_t * btn, lv_event_t event); 00220 static lv_theme_t * th_act; 00221 static lv_obj_t * label; 00222 static lv_obj_t * label1; 00223 00224 00225 static lv_obj_t * AffTensionBat; 00226 static lv_obj_t * AffTpsCy; 00227 static lv_obj_t * AffCptPuls; 00228 static lv_obj_t * AffDebit; 00229 static lv_obj_t * Aff1TpsEntre2Puls; 00230 static lv_obj_t * Aff2TpsEntre2Puls; 00231 static lv_obj_t * AffTpsMinEntre2Puls; 00232 static lv_obj_t * AffTpsMaxEntre2Puls; 00233 static lv_obj_t * AffVolume; 00234 static lv_obj_t * BPRAZ; 00235 static lv_obj_t * BPPOMPE; 00236 00237 int NumSousMenu=1; 00238 00239 LV_FONT_DECLARE(arial_20) //Declare a font 00240 00241 void lv_ticker_func(); 00242 void my_disp_flush(lv_disp_drv_t* disp_drv, const lv_area_t* area, lv_color_t* color_p); 00243 bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data); 00244 static void event_handler(lv_obj_t * obj, lv_event_t event); 00245 //void btn_event_cb(lv_obj_t * btn, lv_event_t event); 00246 00247 00248 00249 static void ddlist_event_cb(lv_obj_t * ddlist, lv_event_t event); 00250 static lv_obj_t * slider; 00251 00252 int PosX_MenuDepart = 0; 00253 int PosX_MenuCible = 0; 00254 bool DdeAlignMenu = 0; 00255 00256 int PosY_AnimSousMenu = 0; 00257 int AnimSousMenu=0; 00258 int TpsAvFermSousMenu=2000; 00259 00260 static void Reglage_R_RGB(lv_obj_t * obj, lv_event_t event); 00261 00262 int TestAff = 0; 00263 00264 00265 static lv_obj_t * Val_R; 00266 00267 static lv_obj_t * R; 00268 00269 00270 int Reglage_R; 00271 uint8_t Reglage_G; 00272 uint8_t Reglage_B; 00273 uint32_t Reglage_RGB; 00274 00275 00276 uint8_t R1=255,G1=255,B1=255, 00277 R2=0 ,G2=0 ,B2=0, 00278 R3=255 ,G3=255 ,B3=255, 00279 R4=0,G4=0,B4=0, 00280 R5=145,G5=145,B5=145, 00281 R6=255,G6=255,B6=255, 00282 R7=0,G7=0,B7=0, 00283 R8=73,G8=143,B8=64, 00284 R9=0,G9=255,B9=0, 00285 R10=155,G10=238,B10=131, 00286 R11=145,G11=145,B11=145, 00287 R12=51,G12=37,B12=22, 00288 R13=255,G13=255,B13=255, 00289 R14=153,G14=158,B14=117, 00290 R15=107,G15=154,B15=199, 00291 R16=107,G16=154,B16=199, 00292 R17=107,G17=154,B17=199, 00293 R18=107,G18=154,B18=199, 00294 R19=107,G19=154,B19=199; 00295 00296 00297 int NumCouleur=0; 00298 00299 00300 static lv_theme_t * themes[8]; 00301 00302 00303 int main() 00304 { 00305 //demarrage communication avec PC 00306 serial.baud(9600); 00307 serial.printf("DEBUT DE PROGRAMME\r\n"); 00308 //Entree impulsion 00309 DI_CPTPuls.mode(PullUp); 00310 00311 //lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"LittlevGL DEMO", CENTER_MODE); 00312 ticker.attach(&lv_ticker_func,0.005);// Appel de la fonction LittlVGL toutes les 5ms 00313 wait(0.5); 00314 lv_init(); //Initialize the LittlevGL 00315 00316 static lv_disp_buf_t disp_buf; 00317 static lv_color_t buf[LV_HOR_RES_MAX * 10]; //Declare a buffer for 10 lines 00318 lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX * 10); //Initialize the display buffer 00319 00320 //Implement and register a function which can copy a pixel array to an area of your display 00321 lv_disp_drv_t disp_drv; //Descriptor of a display driver 00322 lv_disp_drv_init(&disp_drv); //Basic initialization 00323 disp_drv.flush_cb = my_disp_flush; //Set your driver function 00324 disp_drv.buffer = &disp_buf; //Assign the buffer to the display 00325 lv_disp_drv_register(&disp_drv); //Finally register the driver 00326 00327 //Implement and register a function which can read an input device. E.g. for a touch pad 00328 ts.Init(lcd.GetXSize(), lcd.GetYSize()); //ST touch initialization 00329 lv_indev_drv_t indev_drv; //Descriptor of a input device driver 00330 lv_indev_drv_init(&indev_drv); //Basic initialization 00331 indev_drv.type = LV_INDEV_TYPE_POINTER; //Touch pad is a pointer-like device 00332 indev_drv.read_cb = my_touchpad_read; //Set your driver function 00333 lv_indev_drv_register(&indev_drv); //Finally register the driver 00334 00335 //INITIALISATION MULTILANGUE 00336 lv_i18n_init(lv_i18n_language_pack); 00337 lv_i18n_set_locale("fr"); 00338 //lv_i18n_set_locale("en-GB"); 00339 00340 initialisation(); 00341 AFFBandeauHaut(0); 00342 AFFPage(101); 00343 00344 //demarrage tempo générale 00345 tempo.start(); 00346 //Interruption compteur 00347 // DI_CPTPuls.rise(&interruptCompteur); 00348 00349 while(1) { 00350 00351 //TEMPO GENERALE 00352 Micros=tempo.read_high_resolution_us(); 00353 //TOP base de temps 00354 Top1ms=false; if (Micros>=MemMicros0+1000) { Top1ms=true; MemMicros0=MemMicros0+1000; } 00355 Top10ms=false; if (Micros>=MemMicros1+10000) { Top10ms=true; MemMicros1=MemMicros1+10000; } 00356 Top100ms=false; if (Micros>=MemMicros2+100000) { Top100ms=true; MemMicros2=MemMicros2+100000; } 00357 Top1s=false; if (Micros>=MemMicros3+1000000) { Top1s=true; MemMicros3=MemMicros3+1000000; } 00358 Top5s=false; if (Micros>=MemMicros4+5000000) { Top5s=true; MemMicros4=MemMicros4+5000000; } 00359 Top1min=false; if (Micros>=MemMicros5+60000000) { Top1min=true; MemMicros5=MemMicros5+60000000; } 00360 00361 //CALCUL TEMPS DE CYCLE 00362 CalcTpsCy++; 00363 if (Top1s){ 00364 TpsCy=1000000000/CalcTpsCy; 00365 TpsCy=TpsCy/1000; 00366 test=CalcTpsCy; 00367 CalcTpsCy=0; 00368 } 00369 //Raffraichissement affichage toutes les 10ms 00370 if (Top10ms){ 00371 lv_task_handler(); 00372 } 00373 00374 //MISE A JOUR DES VARIABLES AFFICHEES 00375 if (Top1s or MemPageAff!=PageAff){ 00376 MemPageAff=PageAff; 00377 if (PageAff==101){ 00378 sprintf(text, _("Temps de cycle = %3.3f us"),TpsCy); lv_label_set_text(AffTpsCy, text); 00379 sprintf(text, _("Tension= %3.3f V "),TensionBat ); lv_label_set_text(AffTensionBat, text); 00380 sprintf(text, "Nombre d'impulsion= %d ",CptPuls ); lv_label_set_text(AffCptPuls, text); 00381 sprintf(text, "Volume = %3.3f L",Volume ); lv_label_set_text(AffVolume, text); 00382 sprintf(text, "Debit= %3.3f L/min ",Debit ); lv_label_set_text(AffDebit, text); 00383 sprintf(text, "%3.0f / %3.0f / %3.0f / %3.0f / %3.0f / %3.0f / %3.0f / %3.0f ",TpsEntre2Puls[1],TpsEntre2Puls[2],TpsEntre2Puls[3],TpsEntre2Puls[4],TpsEntre2Puls[5],TpsEntre2Puls[6],TpsEntre2Puls[7],TpsEntre2Puls[8]); lv_label_set_text(Aff1TpsEntre2Puls, text); 00384 sprintf(text, "%3.0f / %3.0f / %3.0f / %3.0f / %3.0f / %3.0f / %3.0f / %3.0f ",TpsEntre2Puls[9],TpsEntre2Puls[10],TpsEntre2Puls[11],TpsEntre2Puls[12],TpsEntre2Puls[13],TpsEntre2Puls[14],TpsEntre2Puls[15],TpsEntre2Puls[16]); lv_label_set_text(Aff2TpsEntre2Puls, text); 00385 sprintf(text, "Temps mini entre 2 impulsions = %d ",Micros ); lv_label_set_text(AffTpsMinEntre2Puls, text); 00386 sprintf(text, "Temps maxi entre 2 impulsions = %d",test ); lv_label_set_text(AffTpsMaxEntre2Puls, text); 00387 } 00388 if (PageAff==301){ 00389 00390 } 00391 00392 } 00393 00394 //DETECTION IMPULSION 00395 if (DI_CPTPuls and Top1ms){ CalcFdPuls=0;CalcFmPuls++;} 00396 if (not DI_CPTPuls and Top1ms){ CalcFmPuls=0;CalcFdPuls++;} 00397 if (CalcFmPuls>20 and not FmCPTPuls){interruptCompteur();FmCPTPuls=true;} 00398 if (CalcFdPuls>20 and FmCPTPuls){FmCPTPuls=false;} 00399 if (CalcFmPuls>500){CalcFmPuls=500;} 00400 if (CalcFdPuls>500){CalcFdPuls=500;} 00401 00402 //MESURE TENSION BATTERIE 00403 if (Top10ms){ 00404 MoyTensBat[0]=AI_TENSION_BAT.read()*3.3*2+0.018; 00405 TensionBat=0; 00406 for (int i=100;i>0;i--){ 00407 MoyTensBat[i]=MoyTensBat[i-1]; 00408 TensionBat=TensionBat+MoyTensBat[i]; 00409 } 00410 TensionBat=TensionBat/100; 00411 } 00412 00413 //COMMANDE POMPE PWM 00414 if (Top100ms){ 00415 CsgPompe=Reglage_R; 00416 fastpwm.period_ticks (10000); //setup the period for 100Khz 00417 fastpwm.pulsewidth_ticks(CsgPompe);//setup duty cycle to 50% 00418 } 00419 00420 //RAZ MOT DE PASSE 00421 if (TpsMdpEnCours>0 and Top1s){ 00422 TpsMdpEnCours--; 00423 if (TpsMdpEnCours==0){ 00424 mbox=lv_mbox_create(lv_disp_get_scr_act(NULL), NULL); 00425 sprintf(text, "Fin de connexion pour %s",UserEC.Nom ); 00426 lv_mbox_set_text(mbox, text); 00427 lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0); 00428 lv_mbox_start_auto_close(mbox, 3000); 00429 UserEC.Nom=""; 00430 UserEC.Niveau=0; 00431 } 00432 } 00433 00434 //ANIMATION MENU 00435 if (Top1ms){ 00436 if (DdeAlignMenu) { 00437 if (PosX_MenuDepart>PosX_MenuCible) { 00438 PosX_MenuDepart=PosX_MenuDepart-1; 00439 lv_obj_set_pos(BandeauHaut, PosX_MenuDepart, 0); 00440 } 00441 if (PosX_MenuDepart<PosX_MenuCible) { 00442 PosX_MenuDepart=PosX_MenuDepart+1; 00443 lv_obj_set_pos(BandeauHaut, PosX_MenuDepart, 0); 00444 } 00445 if (PosX_MenuDepart==PosX_MenuCible) { 00446 DdeAlignMenu=0; 00447 AFFSousMenu(NumSousMenu);//affichage page sous menu 00448 } 00449 } 00450 } 00451 00452 //ANIMATION SOUS MENU 00453 if (Top1ms){ 00454 00455 //OUVERTURE SOUS MENU 00456 if (AnimSousMenu>0) { 00457 PosY_AnimSousMenu=PosY_AnimSousMenu+2; 00458 lv_obj_set_size(SousMenu, 100, PosY_AnimSousMenu); 00459 if (PosY_AnimSousMenu>=AnimSousMenu){AnimSousMenu=0;} 00460 TpsAvFermSousMenu=4000; 00461 } 00462 //TEMPS AVANT FERMEURE 00463 if (SousMenu and TpsAvFermSousMenu>0){TpsAvFermSousMenu--;} 00464 //FERMETURE SOUS MENU 00465 if (SousMenu and TpsAvFermSousMenu<=0) { 00466 PosY_AnimSousMenu=PosY_AnimSousMenu-2; 00467 lv_obj_set_size(SousMenu, 100, PosY_AnimSousMenu); 00468 if (PosY_AnimSousMenu<=0){ 00469 lv_obj_del_async(SousMenu); 00470 SousMenu=NULL; 00471 } 00472 } 00473 } 00474 if (SousMenu and X>0){TpsAvFermSousMenu=4000;} 00475 00476 /**/ 00477 }//FIN BOUCLE 00478 }//FIN MAIN 00479 00480 00481 //FONCTION INTERRUPTION COMPTEUR D'IMPULSION 00482 void interruptCompteur() 00483 { 00484 //Timestamp pulsation 00485 TimerPuls=tempo.read_high_resolution_us(); 00486 00487 // Calcul temps entre 2 impulsions 00488 TpsPuls=TimerPuls-MemTpsPuls; 00489 MemTpsPuls=TimerPuls; 00490 00491 //Incrementation numéro de dent roue 00492 NumDent++; 00493 00494 //Memorisation ecart entre chaque impulsion et Calcul des Min Max 00495 Calcul=TpsPuls; 00496 Calcul=Calcul/1000; 00497 TpsEntre2Puls[NumDent]=Calcul; 00498 if (Calcul<TpsMinEntre2Puls){TpsMinEntre2Puls=Calcul;} 00499 if (Calcul>TpsMaxEntre2Puls){TpsMaxEntre2Puls=Calcul;} 00500 00501 //Calcul débit 00502 if (NumDent>=16){ 00503 CalcDebit=VolParTour; 00504 CalcDebit=60000000*CalcDebit/(TimerPuls-MemTps16Puls); 00505 Debit=CalcDebit; 00506 Debit=Debit/1000; 00507 MemTps16Puls=TimerPuls; 00508 NumDent=0; 00509 } 00510 00511 //Nombre d'impulsion total 00512 CptPuls++; 00513 00514 //Calcul Volume 00515 Volume=CptPuls*VolParTour/16000; 00516 00517 } 00518 00519 void initialisation(void) 00520 { 00521 //CHARGEMENT DU THEME 00522 th_act = lv_theme_rb_init(0, &RB_lv_font_roboto_12); //Gabor: When i change something in my Theme nothing's happen. Can you see in /lvgl_RB/lv_theme_rb.c 00523 // th_act = lv_theme_night_init(0, NULL); 00524 lv_theme_set_current(th_act); 00525 00526 lv_obj_t * scr = lv_obj_create(NULL, NULL); 00527 lv_disp_load_scr(scr); 00528 00529 //INITIALISATION TABLEAU UTILISATEUR 00530 User[1].Nom="Romain BECAN"; User[1].MDP="1234"; User[1].Niveau=3; User[1].Tps=1; 00531 User[2].Nom="Guy HERVE"; User[2].MDP="5678"; User[2].Niveau=2; User[2].Tps=120; 00532 User[31].Nom="OPERATEUR 1"; User[31].MDP="4321"; User[31].Niveau=1; User[31].Tps=1; 00533 User[32].Nom="OPERATEUR 2"; User[32].MDP="4321"; User[32].Niveau=1; User[32].Tps=60; 00534 User[33].Nom="OPERATEUR 3"; User[33].MDP="4321"; User[33].Niveau=1; User[33].Tps=40; 00535 User[34].Nom="OPERATEUR 4"; User[34].MDP="4321"; User[34].Niveau=1; User[34].Tps=30; 00536 User[35].Nom="OPERATEUR 5"; User[35].MDP="4321"; User[35].Niveau=3; User[35].Tps=30; 00537 User[36].Nom="OPERATEUR 6"; User[36].MDP="4321"; User[36].Niveau=3; User[36].Tps=30; 00538 User[99].Nom="OPERATEUR 100"; User[99].MDP="4321"; User[99].Niveau=3; User[99].Tps=30; 00539 } 00540 00541 00542 00543 static void AFFBandeauHaut(int Num) 00544 { 00545 if(BandeauHaut) { 00546 lv_obj_del(BandeauHaut); 00547 BandeauHaut = NULL; 00548 } 00549 00550 // CREATION OBJET BANDEAU HAUT 00551 BandeauHaut = lv_cont_create(lv_scr_act(), NULL); 00552 lv_obj_set_size(BandeauHaut,900,40); 00553 lv_cont_set_fit2(BandeauHaut,LV_FIT_TIGHT, LV_FIT_NONE); 00554 lv_obj_set_pos(BandeauHaut, 50, 0); 00555 lv_obj_set_drag_dir(BandeauHaut, LV_DRAG_DIR_HOR); 00556 lv_obj_set_drag_throw(BandeauHaut, true); 00557 00558 //MENU 1 00559 M100 = lv_btn_create(BandeauHaut, NULL); 00560 lv_btn_set_ink_in_time(M100, 200); 00561 lv_btn_set_ink_wait_time(M100, 100); 00562 lv_btn_set_ink_out_time(M100, 500); 00563 lv_obj_t * label = lv_label_create(M100, NULL); 00564 lv_label_set_text(label, _("M100")); 00565 lv_obj_set_size(M100,100,40); 00566 lv_obj_set_drag_parent(M100, true); 00567 lv_obj_set_event_cb(M100, M100_ACT); 00568 00569 //MENU 2 00570 M200 = lv_btn_create(BandeauHaut, NULL); 00571 lv_btn_set_ink_in_time(M200, 200); 00572 lv_btn_set_ink_wait_time(M200, 100); 00573 lv_btn_set_ink_out_time(M200, 500); 00574 label = lv_label_create(M200, NULL); 00575 lv_label_set_text(label, _("M200")); 00576 lv_obj_set_size(M200,100,40); 00577 //lv_btn_set_toggle(M200, true); 00578 // lv_btn_toggle(M200); 00579 // lv_obj_set_drag(M200, true); 00580 lv_obj_align(M200, M100, LV_ALIGN_OUT_RIGHT_MID, 0, 0); 00581 lv_obj_set_drag_parent(M200, true); 00582 lv_obj_set_event_cb(M200, M200_ACT); 00583 00584 //MENU 3 00585 M300 = lv_btn_create(BandeauHaut, NULL); 00586 label = lv_label_create(M300, NULL); 00587 lv_label_set_text(label, _("M300")); 00588 lv_obj_set_size(M300,100,40); 00589 lv_obj_align(M300, M200, LV_ALIGN_OUT_RIGHT_MID, 0, 0); 00590 lv_obj_set_drag_parent(M300, true); 00591 lv_obj_set_event_cb(M300, M300_ACT); 00592 00593 //MENU 4 00594 M400 = lv_btn_create(BandeauHaut, NULL); 00595 label = lv_label_create(M400, NULL); 00596 lv_label_set_text(label, _("M400")); 00597 lv_obj_set_size(M400,100,40); 00598 lv_obj_align(M400, M300, LV_ALIGN_OUT_RIGHT_MID, 0, 0); 00599 lv_obj_set_drag_parent(M400, true); 00600 lv_obj_set_event_cb(M400, M400_ACT); 00601 00602 //MENU 5 00603 M500 = lv_btn_create(BandeauHaut, NULL); 00604 label = lv_label_create(M500, NULL); 00605 lv_label_set_text(label, _("M500")); 00606 lv_obj_set_size(M500,100,40); 00607 lv_obj_align(M500, M400, LV_ALIGN_OUT_RIGHT_MID, 0, 0); 00608 lv_obj_set_drag_parent(M500, true); 00609 lv_obj_set_event_cb(M500, M500_ACT); 00610 00611 //BP BPMENU6 00612 M600 = lv_btn_create(BandeauHaut, NULL); 00613 label = lv_label_create(M600, NULL); 00614 lv_label_set_text(label, _("M600")); 00615 lv_obj_set_size(M600,100,40); 00616 lv_obj_align(M600, M500, LV_ALIGN_OUT_RIGHT_MID, 0, 0); 00617 lv_obj_set_drag_parent(M600, true); 00618 lv_obj_set_event_cb(M600, M600_ACT); 00619 00620 } 00621 00622 00623 static void AFFSousMenu(int Num) 00624 { 00625 //SI SOUS MENU DEJA AFFICHE : SUPPRIMER PAGE AVANT CREATION NOUVELLE 00626 if(SousMenu) { 00627 lv_obj_del(SousMenu); 00628 SousMenu = NULL; 00629 } 00630 00631 /*Create a list*/ 00632 SousMenu = lv_list_create(lv_scr_act(), NULL); 00633 lv_obj_set_size(SousMenu, 100, 100); 00634 lv_obj_set_pos(SousMenu, 0, 40); 00635 00636 lv_style_copy(&Style_BPSM, &lv_style_btn_rel); 00637 Style_BPSM.text.font = &lv_font_roboto_12; 00638 Style_BPSM.body.main_color = LV_COLOR_RED; 00639 Style_BPSM.body.padding.top = LV_DPI / 40; 00640 Style_BPSM.body.padding.bottom = LV_DPI / 40; 00641 // G/ABOR: How to change the height of button in a list ? 00642 // ROMAIN: You need to modify the paddings. See here: https://docs.littlevgl.com/en/html/object-types/list.html#style-usage 00643 // Your intention with looked good you just need to apply it with lv_btn_set_style(SM101, LV_BTN_STYLE_REL, &Style_BPSM); 00644 00645 //SOUS MENU 100 00646 if (Num==100){ 00647 AnimSousMenu=200;//TAILLE FENETRE 00648 SM101 = lv_list_add_btn(SousMenu, NULL, "SM101"); 00649 lv_btn_set_style(SM101, LV_BTN_STYLE_REL, &Style_BPSM); 00650 lv_btn_set_style(SM101, LV_BTN_STYLE_PR, &Style_BPSM); 00651 if (UserEC.Niveau<0){lv_btn_set_state(SM101, LV_BTN_STATE_INA );} 00652 lv_obj_set_event_cb(SM101, SM101_ACT); 00653 00654 SM102 = lv_list_add_btn(SousMenu, NULL, "SM102"); 00655 if (UserEC.Niveau<0){lv_btn_set_state(SM102, LV_BTN_STATE_INA );} 00656 lv_obj_set_event_cb(SM102, SM102_ACT); 00657 00658 SM103 = lv_list_add_btn(SousMenu, NULL, "SM103"); 00659 if (UserEC.Niveau<1){lv_btn_set_state(SM103, LV_BTN_STATE_INA );} 00660 lv_obj_set_event_cb(SM103, SM103_ACT); 00661 00662 SM104 = lv_list_add_btn(SousMenu, NULL, "NOM DE MENU LONG"); 00663 if (UserEC.Niveau<0){lv_btn_set_state(SM104, LV_BTN_STATE_INA );} 00664 lv_obj_set_event_cb(SM104, SM104_ACT); 00665 00666 SM105 = lv_list_add_btn(SousMenu, NULL, "SM104"); 00667 if (UserEC.Niveau<0){lv_btn_set_state(SM105, LV_BTN_STATE_INA );} 00668 lv_obj_set_event_cb(SM105, SM105_ACT); 00669 } 00670 00671 //SOUS MENU 200 00672 if (Num==200){ 00673 AnimSousMenu=100;//TAILLE FENETRE 00674 SM201 = lv_list_add_btn(SousMenu, NULL, "SM201"); 00675 if (UserEC.Niveau<0){lv_btn_set_state(SM201, LV_BTN_STATE_INA );} 00676 lv_obj_set_event_cb(SM201, SM201_ACT); 00677 00678 SM202 = lv_list_add_btn(SousMenu, NULL, "SM202"); 00679 if (UserEC.Niveau<0){lv_btn_set_state(SM202, LV_BTN_STATE_INA );} 00680 lv_obj_set_event_cb(SM202, SM202_ACT); 00681 00682 } 00683 //SOUS MENU 300 00684 if (Num==300){ 00685 AnimSousMenu=300;//TAILLE FENETRE 00686 SM301 = lv_list_add_btn(SousMenu, NULL, _("SM301")); 00687 if (UserEC.Niveau<0){lv_btn_set_state(SM301, LV_BTN_STATE_INA );} 00688 lv_obj_set_event_cb(SM301, SM301_ACT); 00689 } 00690 00691 } 00692 00693 00694 static void AFFPage(int Num) 00695 { 00696 if(Page) { 00697 lv_obj_del(Page); 00698 // lv_obj_clean(Page); 00699 Page = NULL; 00700 } 00701 //MEMORISATION PAGE AFFICHEE 00702 PageAff=Num; 00703 00704 Page = lv_page_create(lv_scr_act(), NULL); 00705 lv_obj_set_size(Page, hres, vres); 00706 lv_obj_set_pos(Page, 0, 40); 00707 00708 00709 lv_page_set_scrl_layout(Page, LV_LAYOUT_OFF); 00710 lv_page_set_scrl_fit2(Page, LV_FIT_FLOOD, LV_FIT_TIGHT); 00711 lv_coord_t max_w = lv_page_get_fit_width(Page); 00712 00713 // PAGE 101: Mesures 00714 if (Num==101){ 00715 00716 //affichage données 00717 int i=0; 00718 AffTensionBat = lv_label_create(Page, NULL); 00719 lv_obj_set_pos(AffTensionBat, 50, i); 00720 00721 AffTpsCy = lv_label_create(Page, NULL); 00722 i=i+16;lv_obj_set_pos(AffTpsCy, 50, i); 00723 00724 AffCptPuls = lv_label_create(Page, NULL); 00725 i=i+16;lv_obj_set_pos(AffCptPuls, 50, i); 00726 00727 AffVolume = lv_label_create(Page, NULL); 00728 i=i+16;lv_obj_set_pos(AffVolume, 50, i); 00729 00730 AffDebit = lv_label_create(Page, NULL); 00731 i=i+16;lv_obj_set_pos(AffDebit, 50, i); 00732 00733 Aff1TpsEntre2Puls = lv_label_create(Page, NULL); 00734 i=i+16;lv_obj_set_pos(Aff1TpsEntre2Puls, 50, i); 00735 00736 Aff2TpsEntre2Puls = lv_label_create(Page, NULL); 00737 i=i+16;lv_obj_set_pos(Aff2TpsEntre2Puls, 50, i); 00738 00739 AffTpsMinEntre2Puls = lv_label_create(Page, NULL); 00740 i=i+16;lv_obj_set_pos(AffTpsMinEntre2Puls, 50, i); 00741 00742 AffTpsMaxEntre2Puls = lv_label_create(Page, NULL); 00743 i=i+16;lv_obj_set_pos(AffTpsMaxEntre2Puls, 50, i); 00744 00745 //BP RAZ 00746 BPRAZ = lv_btn_create(Page, NULL); 00747 i=i+30;lv_obj_set_pos(BPRAZ, 50, i); 00748 label = lv_label_create(BPRAZ, NULL); 00749 lv_label_set_text(label, "RAZ"); 00750 lv_obj_set_size(BPRAZ,60,40); 00751 lv_obj_set_event_cb(BPRAZ, BPRAZ_ACT); 00752 00753 //BP POMPE 00754 BPPOMPE = lv_btn_create(Page, NULL); 00755 lv_obj_set_pos(BPPOMPE, 150, i); 00756 label = lv_label_create(BPPOMPE, NULL); 00757 lv_label_set_text(label, "POMPE"); 00758 lv_obj_set_size(BPPOMPE,90,40); 00759 lv_btn_set_toggle(BPPOMPE, true); 00760 lv_obj_set_event_cb(BPPOMPE, BPPOMPE_ACT); 00761 00762 // SLIDER 00763 static lv_style_t style_bg,style_knob; 00764 static lv_style_t style_indic_R; 00765 00766 00767 lv_style_copy(&style_bg, &lv_style_pretty); 00768 style_bg.body.main_color = LV_COLOR_BLACK; 00769 style_bg.body.grad_color = LV_COLOR_BLACK; 00770 style_bg.body.radius = LV_RADIUS_CIRCLE; 00771 style_bg.body.border.color = LV_COLOR_SILVER; 00772 00773 lv_style_copy(&style_indic_R, &lv_style_pretty_color); 00774 style_indic_R.body.main_color = LV_COLOR_RED; 00775 style_indic_R.body.grad_color = LV_COLOR_RED; 00776 style_indic_R.body.radius = LV_RADIUS_CIRCLE; 00777 style_indic_R.body.shadow.width = 4; 00778 style_indic_R.body.shadow.color = LV_COLOR_RED; 00779 style_indic_R.body.padding.left = 3; 00780 style_indic_R.body.padding.right = 3; 00781 style_indic_R.body.padding.top = 3; 00782 style_indic_R.body.padding.bottom = 3; 00783 00784 lv_style_copy(&style_knob, &lv_style_pretty); 00785 style_knob.body.radius = LV_RADIUS_CIRCLE; 00786 style_knob.body.opa = LV_OPA_70; 00787 style_knob.body.padding.top = 10 ; 00788 style_knob.body.padding.bottom = 10 ; 00789 00790 /*Create a slider ROUGE*/ 00791 R = lv_slider_create(Page, NULL); 00792 lv_obj_set_pos(R, 10, 40); 00793 lv_obj_set_width(R, 30); 00794 lv_obj_set_height(R, 180); 00795 lv_slider_set_range(R, 0, 10000); 00796 lv_slider_set_value(R, Reglage_R, false); 00797 style_indic_R.body.main_color = LV_COLOR_RED; 00798 style_indic_R.body.grad_color = LV_COLOR_RED; 00799 style_indic_R.body.shadow.color = LV_COLOR_RED; 00800 lv_slider_set_style(R, LV_SLIDER_STYLE_BG, &style_bg); 00801 lv_slider_set_style(R, LV_SLIDER_STYLE_INDIC,&style_indic_R); 00802 lv_slider_set_style(R, LV_SLIDER_STYLE_KNOB, &style_knob); 00803 lv_obj_set_event_cb(R, Reglage_R_RGB); 00804 Val_R = lv_label_create(Page, NULL); 00805 lv_obj_align(Val_R, R, LV_ALIGN_OUT_TOP_MID, 0, -5); 00806 sprintf(text, " %d ", lv_slider_get_value(R)); 00807 lv_label_set_text(Val_R, text); 00808 } 00809 00810 //PAGE 301 SELECTION LANGUE 00811 if (Num==301){ 00812 //TITRE 00813 label = lv_label_create(Page, NULL); 00814 lv_label_set_text(label, _("SELECTION LANGUE")); 00815 lv_obj_align(label, Page, LV_ALIGN_IN_TOP_MID, 0, 5); 00816 00817 //BP SELECTION LANGUE: FRANCAIS 00818 lv_obj_t * LANGUE_FR = lv_btn_create(Page, NULL); 00819 lv_obj_align(LANGUE_FR, Page, LV_ALIGN_IN_TOP_MID, -80, 50); 00820 label = lv_label_create(LANGUE_FR, NULL); 00821 lv_label_set_text(label, _("Francais")); 00822 lv_obj_set_size(LANGUE_FR,100,40); 00823 lv_obj_set_event_cb(LANGUE_FR, LANGUE_FR_ACT); 00824 00825 //BP SELECTION LANGUE: ANGLAIS 00826 lv_obj_t * LANGUE_EN = lv_btn_create(Page, NULL); 00827 lv_obj_align(LANGUE_EN, Page, LV_ALIGN_IN_TOP_MID, 80, 50); 00828 label = lv_label_create(LANGUE_EN, NULL); 00829 lv_label_set_text(label, _("English")); 00830 lv_obj_set_size(LANGUE_EN,100,40); 00831 lv_obj_set_event_cb(LANGUE_EN, LANGUE_EN_ACT); 00832 } 00833 00834 00835 } 00836 00837 00838 00839 00840 //******************** 00841 // POPUP CONNEXION MDP 00842 //******************** 00843 static void AFFPopupMDP(){ 00844 //FOND GRISE 00845 static lv_style_t modal_style; 00846 lv_style_copy(&modal_style, &lv_style_plain_color); 00847 modal_style.body.main_color = modal_style.body.grad_color = LV_COLOR_BLACK; 00848 modal_style.body.opa = LV_OPA_50; 00849 FondGris = lv_obj_create(lv_scr_act(), NULL); 00850 lv_obj_set_style(FondGris, &modal_style); 00851 lv_obj_set_pos(FondGris, 0, 0); 00852 lv_obj_set_size(FondGris, LV_HOR_RES, LV_VER_RES); 00853 lv_obj_set_opa_scale_enable(FondGris, true); 00854 00855 // CREATION POPUP CONNEXION MDP 00856 PopupMDP = lv_obj_create(FondGris, NULL); 00857 lv_obj_set_size(PopupMDP,400,260); 00858 lv_obj_align(PopupMDP, FondGris, LV_ALIGN_CENTER, 0, 0); 00859 lv_obj_set_opa_scale_enable(PopupMDP, true); 00860 lv_obj_set_opa_scale(PopupMDP, 240); 00861 00862 //TITRE 00863 label = lv_label_create(PopupMDP, NULL); 00864 lv_label_set_text(label, _("IDENTIFICATION")); 00865 lv_obj_align(label, PopupMDP, LV_ALIGN_IN_TOP_MID, 0, 3); 00866 lv_obj_set_opa_scale_enable(label, true); 00867 lv_obj_set_opa_scale(label, LV_OPA_COVER); 00868 00869 //CREATION LISTE UTILISATEUR POUR AFFICHAGE 00870 //G/ABOR: Mabye you have a better solution than: 00871 //ROMAIN: There is no much better way, but I have a few comments 00872 int i; 00873 int j; 00874 int k=0; 00875 char p[2200]; 00876 00877 //ROMAIN: 00878 // - p[i]=='\0'; it should be p[i]='\0'; isn't it? 00879 // - If so why not start from i = 0 to initalize? 00880 // - memset(p, '\0', sizeof(p)) can be a clearer option to initialize 00881 for (i = 1; i < 2200; i++) { p[i]=='\0';} 00882 00883 for (i = 1; i < 100; i++) { //ROMAIN: Why start from 1? 00884 string s=User[i].Nom; 00885 if (s.length()>0){ 00886 //ROMAIN: I suggest using memcpy instead 00887 // memcpy(&p[k], s, s.length()) 00888 // k += s.length(); 00889 // p[k] = '\n'; 00890 // k++; 00891 for (j = 0; j < s.length(); j++) { 00892 p[k] = s[j]; 00893 k++; 00894 } 00895 p[k]='\n'; 00896 k++; 00897 } 00898 } 00899 //ROMAIN: 00900 // - you alraedy incremented k, so it should p[k] = '\0', shouldn't it? 00901 // - and you initialized p to '\0' so it's not required 00902 p[k+1]='\0'; 00903 char * ListeUser= p ; 00904 00905 //SELECTEUR UTILISATEUR 00906 SelectID = lv_roller_create(PopupMDP, NULL); 00907 lv_roller_set_options(SelectID,ListeUser,LV_ROLLER_MODE_NORMAL); 00908 lv_roller_set_visible_row_count(SelectID, 9); 00909 lv_roller_set_fix_width(SelectID, 170); 00910 lv_obj_align(SelectID, PopupMDP, LV_ALIGN_IN_TOP_LEFT, 10, 20); 00911 00912 //CHAMPS MOT DE PASSE 00913 MDP = lv_ta_create(PopupMDP, NULL); 00914 lv_ta_set_text(MDP, ""); 00915 lv_ta_set_pwd_mode(MDP, true); 00916 lv_ta_set_one_line(MDP, true); 00917 lv_obj_set_width(MDP, 170); 00918 lv_obj_align(MDP, PopupMDP, LV_ALIGN_IN_TOP_RIGHT, -10, 20); 00919 lv_obj_set_opa_scale_enable(MDP, true); 00920 lv_obj_set_opa_scale(MDP, LV_OPA_COVER); 00921 lv_ta_set_max_length(MDP, 4); 00922 00923 // PAVE NUMERIQUE SAISIE MOT DE PASSE 00924 static lv_style_t rel_style, pr_style; //STYLE CLAVIER 00925 lv_style_copy(&rel_style, &lv_style_btn_rel); 00926 rel_style.body.radius = 0; 00927 rel_style.body.border.width = 1; 00928 lv_style_copy(&pr_style, &lv_style_btn_pr); 00929 pr_style.body.radius = 0; 00930 pr_style.body.border.width = 1; 00931 00932 lv_obj_t * PaveNumerique = lv_kb_create(PopupMDP, NULL); 00933 lv_obj_set_size(PaveNumerique,170,170); 00934 lv_btnm_set_map(PaveNumerique, PAVE_NUMERIQUE_MAP); 00935 lv_btnm_set_btn_width(PaveNumerique, 10, 2); 00936 lv_obj_align(PaveNumerique, PopupMDP, LV_ALIGN_IN_TOP_RIGHT, -10, 50); 00937 lv_obj_set_opa_scale_enable(PaveNumerique, true); 00938 lv_obj_set_opa_scale(PaveNumerique, LV_OPA_COVER); 00939 lv_kb_set_cursor_manage(PaveNumerique, true); 00940 lv_kb_set_style(PaveNumerique, LV_KB_STYLE_BG, &lv_style_transp_tight); 00941 lv_kb_set_style(PaveNumerique, LV_KB_STYLE_BTN_REL, &rel_style); 00942 lv_kb_set_style(PaveNumerique, LV_KB_STYLE_BTN_PR, &pr_style); 00943 lv_kb_set_ta(PaveNumerique, MDP); //ASSOCIATION CLAVIER ET CHAMPS MDP 00944 00945 // STYLE DES BOUTONS 00946 lv_style_copy(&Style_BP, &lv_style_btn_rel); 00947 Style_BP.text.font = &lv_font_roboto_12; 00948 Style_BP.body.main_color = LV_COLOR_MAKE(R3, G3, B3); 00949 00950 //BP VALIDER 00951 lv_obj_t * BpValidMDP=lv_btn_create(PopupMDP, NULL); 00952 lv_btn_set_style(BpValidMDP, LV_BTN_STYLE_REL,&Style_BP); 00953 lv_obj_set_size(BpValidMDP,100,30); 00954 lv_obj_align(BpValidMDP, PopupMDP, LV_ALIGN_IN_BOTTOM_MID, -60, -5); 00955 label = lv_label_create(BpValidMDP, NULL); 00956 lv_label_set_text(label, "Valider"); 00957 lv_obj_set_drag_parent(BpValidMDP, true); 00958 lv_obj_set_event_cb(BpValidMDP, BpValidMDP_ACT); 00959 lv_obj_set_opa_scale_enable(BpValidMDP, true); 00960 lv_obj_set_opa_scale(BpValidMDP, LV_OPA_COVER); 00961 00962 //BP ANNULER 00963 lv_obj_t * BpAnnulMDP=lv_btn_create(PopupMDP, NULL); 00964 lv_btn_set_style(BpAnnulMDP, LV_BTN_STYLE_REL,&Style_BP); 00965 lv_obj_set_size(BpAnnulMDP,100,30); 00966 lv_obj_align(BpAnnulMDP, PopupMDP, LV_ALIGN_IN_BOTTOM_MID, 60, -5); 00967 label = lv_label_create(BpAnnulMDP, NULL); 00968 lv_label_set_text(label, _("Annuler")); 00969 00970 lv_obj_set_drag_parent(BpAnnulMDP, true); 00971 lv_obj_set_event_cb(BpAnnulMDP, BpAnnulMDP_ACT); 00972 lv_obj_set_opa_scale_enable(BpAnnulMDP, true); 00973 lv_obj_set_opa_scale(BpAnnulMDP, LV_OPA_COVER); 00974 00975 } 00976 00977 static void BpValidMDP_ACT(lv_obj_t * obj, lv_event_t event) 00978 { 00979 if(event == LV_EVENT_CLICKED) { 00980 //RECUPERATION DU NOM DE L'UTILISATEUR SELECTIONNE 00981 char NomSelect[20]; 00982 lv_roller_get_selected_str(SelectID, NomSelect, sizeof(NomSelect)); 00983 00984 //RECUPERATION MOT DE PASSE SAISIE 00985 string MdpSaisie; 00986 MdpSaisie = lv_ta_get_text(MDP); 00987 00988 //FOND GRISE 00989 static lv_style_t modal_style; 00990 lv_style_copy(&modal_style, &lv_style_plain_color); 00991 modal_style.body.main_color = modal_style.body.grad_color = LV_COLOR_BLACK; 00992 modal_style.body.opa = LV_OPA_50; 00993 FondGris2 = lv_obj_create(lv_scr_act(), NULL); 00994 lv_obj_set_style(FondGris2, &modal_style); 00995 lv_obj_set_pos(FondGris2, 0, 0); 00996 lv_obj_set_size(FondGris2, LV_HOR_RES, LV_VER_RES); 00997 lv_obj_set_opa_scale_enable(FondGris2, true); 00998 //COMPARAISON AVEC LISTE 00999 static const char * btns2[] = {"Ok", ""}; 01000 for (int i = 1; i < 100; i++) { 01001 if (User[i].Nom==NomSelect) 01002 if (User[i].MDP==MdpSaisie){ 01003 mbox=lv_mbox_create(FondGris2, NULL); 01004 lv_mbox_add_btns(mbox, btns2); 01005 if (User[i].Niveau==1){sprintf(text2, "qu'operateur" );} 01006 if (User[i].Niveau==2){sprintf(text2, "que superviseur");} 01007 if (User[i].Niveau==3){sprintf(text2, "que constructeur");} 01008 sprintf(text, "Connexion autorisee a %s en tant %s pour une duree de %d min",User[i].Nom ,text2,User[i].Tps ); 01009 lv_mbox_set_text(mbox, text); 01010 lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0); 01011 lv_obj_set_event_cb(mbox, mboxMdp_ACT); 01012 TpsMdpEnCours=User[i].Tps*60; 01013 UserEC=User[i]; 01014 //RECLASSEMENT DU TABLEAU DES UTILISATEURS POUR AVOIR LE DERNIER CONNECTé EN PREMIER 01015 User[0]=User[i]; 01016 for (int j = i; j >0; j--) { //DECALAGE TABLEAU 01017 User[j]=User[j-1]; 01018 } 01019 return; 01020 } 01021 } 01022 mbox=lv_mbox_create(FondGris2, NULL); 01023 lv_mbox_add_btns(mbox, btns2); 01024 lv_mbox_set_text(mbox, "MOT DE PASSE ERRONE"); 01025 lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0); 01026 lv_obj_set_event_cb(mbox, mboxMdp_ACT2); 01027 } 01028 } 01029 static void BpAnnulMDP_ACT(lv_obj_t * obj, lv_event_t event) 01030 { 01031 if(event == LV_EVENT_CLICKED) { 01032 // lv_obj_del_async(PopupMDP); 01033 lv_obj_del_async(FondGris); 01034 } 01035 } 01036 01037 static void mboxMdp_ACT(lv_obj_t * obj, lv_event_t event) 01038 { 01039 lv_obj_del_async(FondGris); 01040 lv_obj_del_async(FondGris2); 01041 01042 01043 } 01044 static void mboxMdp_ACT2(lv_obj_t * obj, lv_event_t event) 01045 { 01046 lv_obj_del_async(FondGris2); 01047 lv_ta_set_text(MDP, ""); 01048 } 01049 01050 01051 //************************** 01052 // ACTION BOUTONS MENUS 01053 //************************** 01054 01055 static void Reglage_R_RGB(lv_obj_t * obj, lv_event_t event) 01056 { 01057 if(event == LV_EVENT_PRESSING) { 01058 Reglage_R= lv_slider_get_value(obj); 01059 sprintf(text, " %d ",Reglage_R ); 01060 lv_label_set_text(Val_R, text); 01061 } 01062 } 01063 01064 static void BPRAZ_ACT(lv_obj_t * btn, lv_event_t event) 01065 { 01066 if(event == LV_EVENT_CLICKED) { 01067 TpsMinEntre2Puls=999999; 01068 TpsMaxEntre2Puls=0; 01069 CptPuls=0; 01070 Volume=0; 01071 for (NumDent=20;NumDent>0;NumDent--){ 01072 TpsEntre2Puls[NumDent]=0; 01073 MemTpsPuls=0; 01074 MemTps16Puls=0; 01075 } 01076 } 01077 } 01078 static void BPPOMPE_ACT(lv_obj_t * btn, lv_event_t event) 01079 { 01080 if(event == LV_EVENT_CLICKED) { 01081 DO_POMPE=!DO_POMPE; 01082 } 01083 } 01084 static void LANGUE_FR_ACT(lv_obj_t * btn, lv_event_t event) 01085 { 01086 if(event == LV_EVENT_CLICKED) { 01087 lv_i18n_set_locale("fr"); 01088 AFFBandeauHaut(0); 01089 AFFPage(PageAff); 01090 } 01091 } 01092 static void LANGUE_EN_ACT(lv_obj_t * btn, lv_event_t event) 01093 { 01094 if(event == LV_EVENT_CLICKED) { 01095 lv_i18n_set_locale("en-GB"); 01096 AFFBandeauHaut(0); 01097 AFFPage(PageAff); 01098 } 01099 } 01100 static void M100_ACT(lv_obj_t * btn, lv_event_t event) 01101 { 01102 if(event == LV_EVENT_CLICKED) { 01103 PosX_MenuDepart = lv_obj_get_x(BandeauHaut); 01104 PosX_MenuCible = -lv_obj_get_x(M100); 01105 DdeAlignMenu=1; 01106 NumSousMenu=100; 01107 } 01108 } 01109 static void M200_ACT(lv_obj_t * btn, lv_event_t event) 01110 { 01111 if(event == LV_EVENT_CLICKED) { 01112 PosX_MenuDepart = lv_obj_get_x(BandeauHaut); 01113 PosX_MenuCible = -lv_obj_get_x(M200); 01114 DdeAlignMenu=1; 01115 NumSousMenu=200; 01116 } 01117 } 01118 static void M300_ACT(lv_obj_t * btn, lv_event_t event) 01119 { 01120 if(event == LV_EVENT_CLICKED) { 01121 PosX_MenuDepart = lv_obj_get_x(BandeauHaut); 01122 PosX_MenuCible = -lv_obj_get_x(M300); 01123 DdeAlignMenu=1; 01124 NumSousMenu=300; 01125 } 01126 } 01127 static void M400_ACT(lv_obj_t * btn, lv_event_t event) 01128 { 01129 if(event == LV_EVENT_CLICKED) { 01130 PosX_MenuDepart = lv_obj_get_x(BandeauHaut); 01131 PosX_MenuCible = -lv_obj_get_x(M400); 01132 DdeAlignMenu=1; 01133 NumSousMenu=400; 01134 } 01135 } 01136 static void M500_ACT(lv_obj_t * btn, lv_event_t event) 01137 { 01138 if(event == LV_EVENT_CLICKED) { 01139 PosX_MenuDepart = lv_obj_get_x(BandeauHaut); 01140 PosX_MenuCible = -lv_obj_get_x(M500); 01141 DdeAlignMenu=1; 01142 NumSousMenu=500; 01143 } 01144 } 01145 static void M600_ACT(lv_obj_t * btn, lv_event_t event) 01146 { 01147 if(event == LV_EVENT_CLICKED) { 01148 PosX_MenuDepart = lv_obj_get_x(BandeauHaut); 01149 PosX_MenuCible = -lv_obj_get_x(M600); 01150 DdeAlignMenu=1; 01151 NumSousMenu=600; 01152 } 01153 } 01154 //************************** 01155 // ACTION BOUTONS SOUS MENUS 01156 //************************** 01157 static void SM101_ACT(lv_obj_t * btn, lv_event_t event) 01158 { 01159 if(event == LV_EVENT_CLICKED) { 01160 //VERIFICATION AUTORISATION ACCES 01161 uint8_t EtatBp = lv_btn_get_state(btn); 01162 if (EtatBp==LV_BTN_STATE_INA){ 01163 AFFPopupMDP(); 01164 } 01165 else{ 01166 TpsAvFermSousMenu=0; 01167 AFFPage(101); 01168 } 01169 } 01170 } 01171 01172 static void SM102_ACT(lv_obj_t * btn, lv_event_t event) 01173 { 01174 if(event == LV_EVENT_CLICKED) { 01175 //VERIFICATION AUTORISATION ACCES 01176 uint8_t EtatBp = lv_btn_get_state(btn); 01177 if (EtatBp==LV_BTN_STATE_INA){ 01178 AFFPopupMDP(); 01179 } 01180 else{ 01181 TpsAvFermSousMenu=0; 01182 } 01183 } 01184 } 01185 static void SM103_ACT(lv_obj_t * btn, lv_event_t event) 01186 { 01187 if(event == LV_EVENT_CLICKED) { 01188 //VERIFICATION AUTORISATION ACCES 01189 uint8_t EtatBp = lv_btn_get_state(btn); 01190 if (EtatBp==LV_BTN_STATE_INA){ 01191 AFFPopupMDP(); 01192 } 01193 else{ 01194 TpsAvFermSousMenu=0; 01195 } 01196 } 01197 } 01198 static void SM104_ACT(lv_obj_t * btn, lv_event_t event) 01199 { 01200 if(event == LV_EVENT_CLICKED) { 01201 //VERIFICATION AUTORISATION ACCES 01202 uint8_t EtatBp = lv_btn_get_state(btn); 01203 if (EtatBp==LV_BTN_STATE_INA){ 01204 AFFPopupMDP(); 01205 } 01206 else{ 01207 TpsAvFermSousMenu=0; 01208 } 01209 } 01210 } 01211 static void SM105_ACT(lv_obj_t * btn, lv_event_t event) 01212 { 01213 if(event == LV_EVENT_CLICKED) { 01214 //VERIFICATION AUTORISATION ACCES 01215 uint8_t EtatBp = lv_btn_get_state(btn); 01216 if (EtatBp==LV_BTN_STATE_INA){ 01217 AFFPopupMDP(); 01218 } 01219 else{ 01220 TpsAvFermSousMenu=0; 01221 } 01222 } 01223 } 01224 01225 static void SM201_ACT(lv_obj_t * btn, lv_event_t event) 01226 { 01227 if(event == LV_EVENT_CLICKED) { 01228 //VERIFICATION AUTORISATION ACCES 01229 uint8_t EtatBp = lv_btn_get_state(btn); 01230 if (EtatBp==LV_BTN_STATE_INA){ 01231 AFFPopupMDP(); 01232 } 01233 else{ 01234 TpsAvFermSousMenu=0; 01235 } 01236 } 01237 } 01238 static void SM202_ACT(lv_obj_t * btn, lv_event_t event) 01239 { 01240 if(event == LV_EVENT_CLICKED) { 01241 //VERIFICATION AUTORISATION ACCES 01242 uint8_t EtatBp = lv_btn_get_state(btn); 01243 if (EtatBp==LV_BTN_STATE_INA){ 01244 AFFPopupMDP(); 01245 } 01246 else{ 01247 TpsAvFermSousMenu=0; 01248 } 01249 } 01250 } 01251 01252 01253 static void SM301_ACT(lv_obj_t * btn, lv_event_t event) 01254 { 01255 if(event == LV_EVENT_CLICKED) { 01256 //VERIFICATION AUTORISATION ACCES 01257 uint8_t EtatBp = lv_btn_get_state(btn); 01258 if (EtatBp==LV_BTN_STATE_INA){ 01259 AFFPopupMDP(); 01260 } 01261 else{ 01262 TpsAvFermSousMenu=0; 01263 AFFPage(301); 01264 } 01265 } 01266 } 01267 01268 01269 //******************** 01270 // FONCTIONS GENERALES 01271 //******************** 01272 void lv_ticker_func() 01273 { 01274 lv_tick_inc(5); //Call lv_tick_inc(x) every x milliseconds in a Timer or Task (x should be between 1 and 10). It is required for the internal timing of LittlevGL. 01275 } 01276 01277 //FONCTION D'AFFICHAGE 01278 void my_disp_flush(lv_disp_drv_t* disp_drv, const lv_area_t* area, lv_color_t* color_p) 01279 { 01280 //The most simple case (but also the slowest) to put all pixels to the screen one-by-one 01281 uint16_t x, y; 01282 for(y = area->y1; y <= area->y2; y++) { 01283 for(x = area->x1; x <= area->x2; x++) { 01284 01285 lcd.DrawPixel( x, y, color_p->full); 01286 color_p++; 01287 } 01288 } 01289 01290 // IMPORTANT!!! 01291 // Inform the graphics library that you are ready with the flushing 01292 lv_disp_flush_ready(disp_drv); 01293 } 01294 01295 //FONCTION RECUPERATION COORDONNEES APPUI 01296 bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) 01297 { 01298 static lv_coord_t last_x = 0; 01299 static lv_coord_t last_y = 0; 01300 01301 //Save the state and save the pressed coordinate 01302 ts.GetState(&TS_State); 01303 01304 if(TS_State.touchDetected == 1) { 01305 data->state = LV_INDEV_STATE_PR; 01306 } else { 01307 data->state = LV_INDEV_STATE_REL; 01308 } 01309 01310 //data->state = tttt ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL; 01311 // if(data->state == LV_INDEV_STATE_PR){ 01312 if(data->state == LV_INDEV_STATE_PR) { 01313 //touchpad_get_xy(&last_x, &last_y); 01314 last_x = TS_State.touchX[0]; 01315 last_y = TS_State.touchY[0]; 01316 } 01317 01318 //Set the coordinates (if released use the last pressed coordinates) 01319 data->point.x = last_x; 01320 data->point.y = last_y; 01321 01322 X = TS_State.touchDetected ; 01323 01324 01325 01326 return false; //Return `false` because we are not buffering and no more data to read 01327 } 01328
Generated on Thu Jul 14 2022 09:39:43 by
