![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
fini
main.cpp
- Committer:
- Pmpolo
- Date:
- 2021-06-24
- Revision:
- 27:1478931d1205
- Parent:
- 26:31abf8bdcddb
File content as of revision 27:1478931d1205:
#include "mbed.h" #include "F746_GUI.hpp" #include "CCLogo.h" Serial Communication(PC_6, PC_7,115200); //Declaration serial Timer timerEnvoieTrame; // Timer pour l'envoie de trame int tailleBuffer=100; // timer pour l'envoie de trame // fonction pour affichage de l'image void drawImage_CCLogo(int offsetX, int offsetY) { int x = 0; int y = 0; uint32_t* dataPtr = (uint32_t*)CCLogo.data; while(y < CCLogo.height) { while(x < CCLogo.width) { BSP_LCD_DrawPixel(x + offsetX, y + offsetY, *dataPtr); dataPtr++; x++; } x = 0; y++; } } //Recupère à quel emplacement il y a une valeur dans le buffer int EmpDerVal(int *ptab){ int Emplacement=-1; if(*ptab==-1) Emplacement=0; else{ for(int i=2;i<=tailleBuffer*2;i=i+2){ if(*(ptab+i)==-1){ Emplacement=i/2; i=tailleBuffer*2+1; } } } return Emplacement*2; // revoie l'emplacement *2 car tab 2 dimension } // Ajoute une valeur dans le buffer void AppendTableau(int *ptab, int index, int data){ int LastEmplacment=EmpDerVal((int*) ptab); *(ptab+LastEmplacment)=index; *(ptab+LastEmplacment+1)=data; } // Envoie une valeur void SendVal(int *ptab){ int LastEmplacment=EmpDerVal((int*) ptab), index=-1, data=-1; if(LastEmplacment==0 || LastEmplacment==-1){ //Buffer vide } else{ // buffer non vide index=*ptab; // l'ecture de l'index data=*(ptab+1); // l'ecture de la data Communication.putc(0xfb); //debut de la trame Communication.putc(index); // index Communication.putc(data); // data Communication.putc(0xfe); // fin de trame for(int i=0;i<LastEmplacment;i=i+2){ //actualisation du buffer *(ptab+i)=*(ptab+i+2); *(ptab+i+1)=*(ptab+i+3); } } } int main() { // Variables d'état qui récupère le nombre du bouton appuyé pour switch cases int NumBoutonGroupMode=0, NumBoutonGroupeLeds=0; int TabBuffer[tailleBuffer][2]; int NivoBatt = 75,Vitesse=0, VitesseMax=25; //initialisation du buffer for(int i=0; i<tailleBuffer-1; i++) { TabBuffer[i][0]=-1; TabBuffer[i][1]=-1; } //////////////////////// Déclaration des groupes de boutons et mise en forme //////////////////////// Label Titre(240, 2, "Interface Trottinette", Label::CENTER, Font20); // titre SeekBar barVitesse(20, 230, 200, 0, 100, 0, "0", "Vitesse km/h",""); NumericLabel<float> numLabeVitesse(90, 250, "%5.1f", barVitesse.GetValue(),Label::CENTER,Font12,0xFFFFFFFF, 0xFF000000); NumericLabel<int> ValMaxVitesse(220, 200, "%d", VitesseMax,Label::CENTER,Font12,0xFFFFFFFF, 0xFF000000); SeekBar barBatterie(260, 230, 200, 0, 100, 75, "0", "Niveau Batterie %", "100"); NumericLabel<float> numLabelBatterie(340, 250, "%5.1f", barBatterie.GetValue(),Label::CENTER,Font12,0xFFFFFFFF, 0xFF000000); ButtonGroup boutonGroupeMode(300, 80, 66, 35, 4,(string[]) { "Sport", "Normal", "ECO", "Pieton" }, 2, 2, 2, 1, Font12, LCD_COLOR_WHITE, 0xFFFEAAAA, 0xFFFF0000, 0xFFFF0000); boutonGroupeMode.Inactivate(0); Label TitreMode(370, 60, "Mode", Label::CENTER, Font16); ButtonGroup boutonsGroupeLed(80, 80, 66, 35, 2,(string[]) { "ON", "OFF" }, 2, 2, 1, 1, Font12, LCD_COLOR_BLACK, 0xFFFE0000, 0xFFFFFF00, 0xFFFFFF00); boutonsGroupeLed.Inactivate(0); Label TitreLeds(120, 60, "Lumiere", Label::CENTER, Font16); ButtonGroup boutonGroupeBatt(415, 5, 10, 5, 4,(string[]) { "", "", "", "" }, 2, 2, 4, 1, Font12); boutonGroupeBatt.InactivateAll(); ////////////////////////////////////////////////////////////////////////////////////////////////// drawImage_CCLogo(0,0); // Appel de la fonction pour afficher l'image timerEnvoieTrame.start(); while(1) { BSP_LCD_SetBackColor(LCD_COLOR_BLACK); // change le parametre de couleur du fond pour label if (barVitesse.Slide()) { numLabeVitesse.Draw("%5.1f", (barVitesse.GetValue()*VitesseMax)/100); //calcul val barslide a partir d'une bar sur 100 Vitesse = (int) (barVitesse.GetValue()*VitesseMax)/100; AppendTableau(*TabBuffer,0x01,Vitesse); } if (barBatterie.Slide()) { numLabelBatterie.Draw("%5.1f", barBatterie.GetValue()); NivoBatt = (int) barBatterie.GetValue(); AppendTableau(*TabBuffer,0x02,NivoBatt); //Manipulation de la valeur du niveau de batterie if (NivoBatt < 25 && NivoBatt > 0){ // si batterie < 25% boutonGroupeBatt.Activate(0); // Affichage de la premiere barre boutonGroupeBatt.Inactivate(1); boutonGroupeBatt.Inactivate(2); boutonGroupeBatt.Inactivate(3); boutonGroupeBatt.Draw(0, 0xFFFF0000, 0xFFFF0000); // Barre en couleur rouge } else if (NivoBatt < 50 && NivoBatt > 26){ // si env 50% batterie boutonGroupeBatt.Activate(0); // activer les deux premières barres boutonGroupeBatt.Activate(1); boutonGroupeBatt.Inactivate(2); boutonGroupeBatt.Inactivate(3); boutonGroupeBatt.Draw(0, 0xFFFFAA00, 0xFFFFAA00); // Barres en orange boutonGroupeBatt.Draw(1, 0xFFFFAA00, 0xFFFFAA00); } else if (NivoBatt < 75 && NivoBatt > 51){ // Si env 75% batterie boutonGroupeBatt.Activate(0); // activer 3 barres boutonGroupeBatt.Activate(1); boutonGroupeBatt.Activate(2); boutonGroupeBatt.Inactivate(3); boutonGroupeBatt.Draw(0, 0xFFFCFF00, 0xFFFCFF00); // Barres en jaune boutonGroupeBatt.Draw(1, 0xFFFCFF00, 0xFFFCFF00); boutonGroupeBatt.Draw(2, 0xFFFCFF00, 0xFFFCFF00); } else if (NivoBatt > 76){ // si +75% boutonGroupeBatt.ActivateAll(); // Activer toutes les barres boutonGroupeBatt.Draw(0, 0xFF47FF00, 0xFF47FF00); // Barres en vert boutonGroupeBatt.Draw(1, 0xFF47FF00, 0xFF47FF00); boutonGroupeBatt.Draw(2, 0xFF47FF00, 0xFF47FF00); boutonGroupeBatt.Draw(3, 0xFF47FF00, 0xFF47FF00); } else if (NivoBatt < 0){ // Si plus de batterie boutonGroupeBatt.InactivateAll(); // Ne pas afficher de barres } } NumBoutonGroupMode=boutonGroupeMode.GetTouchedNumber(); //lecture de la valeur du bouton appuyé // Switch case en fonction du bouton appuyé pour selection du mode de la trottinette if (boutonGroupeMode.GetTouchedNumber(NumBoutonGroupMode)) switch (NumBoutonGroupMode) { case 0: //mode Sport 25km/h Max VitesseMax=25; // mise à jour de la vmax possible avec ce mode boutonGroupeMode.Inactivate(0); // désactiver le bouton appuyé boutonGroupeMode.Activate(1); // Activer les autres boutons boutonGroupeMode.Activate(2); boutonGroupeMode.Activate(3); AppendTableau(*TabBuffer,0x03,0x01); // envoie de la trame liée à l'appuis de ce bouton BSP_LCD_SetBackColor(LCD_COLOR_BLACK); ValMaxVitesse.Draw("%d",VitesseMax); //recalcul de la vitesse à partir de l'emplacement curseur du slide numLabeVitesse.Draw("%5.1f", (barVitesse.GetValue()*VitesseMax)/100); Vitesse = (int) (barVitesse.GetValue()*VitesseMax)/100; //AppendTableau(*TabBuffer,0x01,Vitesse); break; case 1: //mode Normal 20km/h Max VitesseMax=20; // mise à jour de la vmax possible avec ce mode boutonGroupeMode.Inactivate(1); // désactiver le bouton appuyé boutonGroupeMode.Activate(0); // Activer les autres boutons boutonGroupeMode.Activate(2); boutonGroupeMode.Activate(3); AppendTableau(*TabBuffer,0x03,0x02); // envoie de la trame liée à l'appuis de ce bouton BSP_LCD_SetBackColor(LCD_COLOR_BLACK); ValMaxVitesse.Draw("%d",VitesseMax); //recalcul de la vitesse à partir de l'emplacement curseur du slide numLabeVitesse.Draw("%5.1f", (barVitesse.GetValue()*VitesseMax)/100); Vitesse = (int) (barVitesse.GetValue()*VitesseMax)/100; //AppendTableau(*TabBuffer,0x01,Vitesse); break; case 2: //mode Eco 15km/h Max VitesseMax=15; // mise à jour de la vmax possible avec ce mode boutonGroupeMode.Inactivate(2); // désactiver le bouton appuyé boutonGroupeMode.Activate(0); // Activer les autres boutons boutonGroupeMode.Activate(1); boutonGroupeMode.Activate(3); AppendTableau(*TabBuffer,0x03,0x03); // envoie de la trame liée à l'appuis de ce bouton BSP_LCD_SetBackColor(LCD_COLOR_BLACK); ValMaxVitesse.Draw("%d",VitesseMax); //recalcul de la vitesse à partir de l'emplacement curseur du slide numLabeVitesse.Draw("%5.1f", (barVitesse.GetValue()*VitesseMax)/100); Vitesse = (int) (barVitesse.GetValue()*VitesseMax)/100; //AppendTableau(*TabBuffer,0x01,Vitesse); break; case 3: //mode Pieton 6km/h Max VitesseMax=6; // mise à jour de la vmax possible avec ce mode boutonGroupeMode.Inactivate(3); // désactiver le bouton appuyé boutonGroupeMode.Activate(0); // Activer les autres boutons boutonGroupeMode.Activate(1); boutonGroupeMode.Activate(2); AppendTableau(*TabBuffer,0x03,0x04); // envoie de la trame liée à l'appuis de ce bouton BSP_LCD_SetBackColor(LCD_COLOR_BLACK); ValMaxVitesse.Draw("%d",VitesseMax); //recalcul de la vitesse à partir de l'emplacement curseur du slide numLabeVitesse.Draw("%5.1f", (barVitesse.GetValue()*VitesseMax)/100); Vitesse = (int) (barVitesse.GetValue()*VitesseMax)/100; //AppendTableau(*TabBuffer,0x01,Vitesse); break; } NumBoutonGroupeLeds=boutonsGroupeLed.GetTouchedNumber(); //lecture de la valeur du bouton appuyé // Switch case en fonction du bouton appuyé pour activation ou non Led trott if (boutonsGroupeLed.GetTouchedNumber(NumBoutonGroupeLeds)) switch (NumBoutonGroupeLeds) { case 0: //Led ON boutonsGroupeLed.Inactivate(0); // désactiver le bouton appuyé boutonsGroupeLed.Activate(1); // Activer les autres boutons AppendTableau(*TabBuffer,0x04,0x01); // envoie de la trame liée à l'appuis de ce bouton break; case 1: //Led OFF boutonsGroupeLed.Inactivate(1); // désactiver le bouton appuyé boutonsGroupeLed.Activate(0); // Activer les autres boutons AppendTableau(*TabBuffer,0x04,0x0F); // envoie de la trame liée à l'appuis de ce bouton break; } if(timerEnvoieTrame.read()>0.01){ //Si timer envoie trame SendVal(*TabBuffer); //envoie du buffer pour check si il y a valeur a envoier timerEnvoieTrame.reset(); // reset du timer } } }