Fabien MOULINNEUF
/
Projet
fini
Diff: main.cpp
- Revision:
- 26:31abf8bdcddb
- Parent:
- 25:586781d009dd
- Child:
- 27:1478931d1205
diff -r 586781d009dd -r 31abf8bdcddb main.cpp --- a/main.cpp Mon Mar 19 04:21:00 2018 +0000 +++ b/main.cpp Wed Jun 23 11:51:05 2021 +0000 @@ -1,137 +1,265 @@ -//----------------------------------------------------------------------- -// GuiBase とその派生クラスのデモプログラム -// Demo program for GuiBase class and its derivertive classes -// -// GuiBase, Button, ButtonGroup, Label, NumericLabel, BlinkLabel, -// SeekBar, SeekbarGroup, NumericUpDown -// -// <インポートしたライブラリのリビジョン> -// F746_GUI 33 -// mbed 161 -// -// 2018/03/12, Copyright (c) 2018 MIKAMI, Naoki -//----------------------------------------------------------------------- + +#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; + +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++; + } +} + + +int EmpDerVal(int *ptab){ //Recupere a quel emplacmeent il y a une valeur + int Emplacement=-1; + -#include "F746_GUI.hpp" + 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 +} + +void AppendTableau(int *ptab, int index, int data){ //Ajouter valeur dans le buffer + int LastEmplacment=EmpDerVal((int*) ptab); + + *(ptab+LastEmplacment)=index; + *(ptab+LastEmplacment+1)=data; +} + +void SendVal(int *ptab){ // Envoie une valeur + 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() { - Label obj10(240, 2, "Demo: GUI parts, 2018/03/12", Label::CENTER, Font16); - Label obj11(240, 20, "Button, ButtonGroup, Label, NumericLabel, BlinkLabel,", - Label::CENTER); - Label obj12(240, 32, "SeekBar, SeekbarGroup, NumericUpDown", - Label::CENTER); + int NumBoutonGroupMode=0, NumBoutonGroupeLeds=0; + int TabBuffer[tailleBuffer][2]; + int NivoBatt = 75,Vitesse=0, VitesseMax=25; + + + + for(int i=0; i<tailleBuffer-1; i++) { //initialisation du buffer + TabBuffer[i][0]=-1; + TabBuffer[i][1]=-1; + } + + + Label Titre(240, 2, "Interface Trottinette", Label::CENTER, Font20); // titre - Button button1(10, 54, 30, 35, "1"); - Button button2(42, 54, 30, 35, "2"); + 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); - const int NUMBER_BUTTONS = 4; - const string STR1[NUMBER_BUTTONS] = {"Button1", "Button2", "Button3", "Activate"}; - ButtonGroup bGroup1(168, 54, 66, 35, NUMBER_BUTTONS, STR1, 2, 2, 3, 1, - Font12, LCD_COLOR_WHITE, 0xFF003538, 0xFFB70068, 0xFFFF7FFF); - NumericLabel<int> bTouch(240, 112, "", Label::LEFT, Font12, LCD_COLOR_MAGENTA); + 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); - // Control status of bGroup2 - ButtonGroup bGroup2(168, 150, 66, 40, 3, (string[]){"0", "1", "2"}, 5, 5, 3); - bGroup2.InactivateAll(); + 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); - // Switching buttons to control barH active or inactive - ButtonGroup bGroup3(78, 54, 40, 35, 2, (string[]){"ON", "OFF"}, 0, 0, 2); - bGroup3.TouchedColor(0); + ButtonGroup boutonGroupeBatt(415, 5, 10, 5, 4,(string[]) { + "", "", "", "" + }, 2, 2, 4, 1, + Font12); + boutonGroupeBatt.InactivateAll(); + + drawImage_CCLogo(0,0); + + timerEnvoieTrame.start(); + + while(1) { + + BSP_LCD_SetBackColor(LCD_COLOR_BLACK); // change le parametre de couleur du fond pour label - Button doNotTouch(250, 220, 120, 40, "Don't Touch", Font12, - GuiBase::ENUM_TEXT, GuiBase::ENUM_BACK, - LCD_COLOR_DARKGREEN, LCD_COLOR_RED); + 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){ + boutonGroupeBatt.Activate(0); + boutonGroupeBatt.Inactivate(1); + boutonGroupeBatt.Inactivate(2); + boutonGroupeBatt.Inactivate(3); + boutonGroupeBatt.Draw(0, 0xFFFF0000, 0xFFFF0000); - // Using default value for argument (Horizontal) - SeekBar barH(20, 250, 200, -5, 5, 0, "-5", "", "5"); - NumericLabel<float> numLabel1(80, 205, "%5.1f", barH.GetValue()); - NumericLabel<int> numLabel2(130, 205, "%3d", (int)barH.GetValue()); - NumericLabel<int> numLabel3(160, 205, "%3d"); - - // SeekbarGroup (vertical) - SeekbarGroup barV(410, 130, 121, 2, 45, -6, 6, 2, - SeekBar::Vertical, 0xFFA0FFC0); + + } + else if (NivoBatt < 50 && NivoBatt > 26){ + boutonGroupeBatt.Activate(0); + boutonGroupeBatt.Activate(1); + boutonGroupeBatt.Inactivate(2); + boutonGroupeBatt.Inactivate(3); + boutonGroupeBatt.Draw(0, 0xFFFFAA00, 0xFFFFAA00); + boutonGroupeBatt.Draw(1, 0xFFFFAA00, 0xFFFFAA00); + } + + else if (NivoBatt < 75 && NivoBatt > 51){ + boutonGroupeBatt.Activate(0); + boutonGroupeBatt.Activate(1); + boutonGroupeBatt.Activate(2); + boutonGroupeBatt.Inactivate(3); + boutonGroupeBatt.Draw(0, 0xFFFCFF00, 0xFFFCFF00); + boutonGroupeBatt.Draw(1, 0xFFFCFF00, 0xFFFCFF00); + boutonGroupeBatt.Draw(2, 0xFFFCFF00, 0xFFFCFF00); - Array<NumericLabel<float> *> numLabel4(2); - for (int n=0; n<2; n++) numLabel4[n] = - new NumericLabel<float>(410+n*45, 104, "%4.1f", barV.GetValue(n), Label::CENTER); + } + else if (NivoBatt > 76){ + boutonGroupeBatt.ActivateAll(); + boutonGroupeBatt.Draw(0, 0xFF47FF00, 0xFF47FF00); + boutonGroupeBatt.Draw(1, 0xFF47FF00, 0xFF47FF00); + boutonGroupeBatt.Draw(2, 0xFF47FF00, 0xFF47FF00); + boutonGroupeBatt.Draw(3, 0xFF47FF00, 0xFF47FF00); - NumericLabel<int> numLabel5(455, 92, "%1d", barV.GetIntValue(0), Label::CENTER); + } + else if (NivoBatt < 0){ + boutonGroupeBatt.InactivateAll(); + } + } + - // Test of left-, cenrer-, and right-justified - Label leftJustified(420, 54, "ABC", Label::LEFT); - Label centerJustified(420, 64, "ABC", Label::CENTER); - Label rightJustified1(420, 74, "ABC", Label::RIGHT); - - // NumericalUpDown - NumericUpDown nUd(3, 10, 190, 100, 999, 10); + NumBoutonGroupMode=boutonGroupeMode.GetTouchedNumber(); //actualisation groupe bouton mode + if (boutonGroupeMode.GetTouchedNumber(NumBoutonGroupMode)) + switch (NumBoutonGroupMode) { + case 0: //mode Sport 25km/h Max + VitesseMax=25; + boutonGroupeMode.Inactivate(0); // activer et desactive les boutons + boutonGroupeMode.Activate(1); + boutonGroupeMode.Activate(2); + boutonGroupeMode.Activate(3); + AppendTableau(*TabBuffer,0x03,0x01); // envoie l'info du bouton + BSP_LCD_SetBackColor(LCD_COLOR_BLACK); + + ValMaxVitesse.Draw("%d",VitesseMax); //recalcul de la vitesse a 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; + boutonGroupeMode.Inactivate(1); + boutonGroupeMode.Activate(0); + boutonGroupeMode.Activate(2); + boutonGroupeMode.Activate(3); + AppendTableau(*TabBuffer,0x03,0x02); + BSP_LCD_SetBackColor(LCD_COLOR_BLACK); + + ValMaxVitesse.Draw("%d",VitesseMax); + numLabeVitesse.Draw("%5.1f", (barVitesse.GetValue()*VitesseMax)/100); + Vitesse = (int) (barVitesse.GetValue()*VitesseMax)/100; + //AppendTableau(*TabBuffer,0x01,Vitesse); - while (true) - { - if (button1.Touched()) button2.Draw(); - if (button2.Touched()) button1.Draw(); + break; - int num; - if (bGroup1.GetTouchedNumber(num)) - bTouch.Draw("Button%d touched", num+1); - if (num == 3) - bGroup2.ActivateAll(); + case 2: //mode Eco 15km/h Max + VitesseMax=15; + boutonGroupeMode.Inactivate(2); + boutonGroupeMode.Activate(0); + boutonGroupeMode.Activate(1); + boutonGroupeMode.Activate(3); + AppendTableau(*TabBuffer,0x03,0x03); + BSP_LCD_SetBackColor(LCD_COLOR_BLACK); + + ValMaxVitesse.Draw("%d",VitesseMax); + numLabeVitesse.Draw("%5.1f", (barVitesse.GetValue()*VitesseMax)/100); + Vitesse = (int) (barVitesse.GetValue()*VitesseMax)/100; + //AppendTableau(*TabBuffer,0x01,Vitesse); + break; - if (bGroup2.GetTouchedNumber(num)) - switch (num) - { - case 0: button1.Activate(); - bGroup1.Activate(1); - bGroup1.DrawAll(); + case 3: //mode Pieton 6km/h Max + VitesseMax=6; + boutonGroupeMode.Inactivate(3); + boutonGroupeMode.Activate(0); + boutonGroupeMode.Activate(1); + boutonGroupeMode.Activate(2); + AppendTableau(*TabBuffer,0x03,0x04); + BSP_LCD_SetBackColor(LCD_COLOR_BLACK); + + ValMaxVitesse.Draw("%d",VitesseMax); + numLabeVitesse.Draw("%5.1f", (barVitesse.GetValue()*VitesseMax)/100); + Vitesse = (int) (barVitesse.GetValue()*VitesseMax)/100; + //AppendTableau(*TabBuffer,0x01,Vitesse); break; - case 1: button1.Inactivate(); - bGroup1.Inactivate(1); + + } + + NumBoutonGroupeLeds=boutonsGroupeLed.GetTouchedNumber(); + if (boutonsGroupeLed.GetTouchedNumber(NumBoutonGroupeLeds)) + switch (NumBoutonGroupeLeds) { + case 0: //Led ON + boutonsGroupeLed.Inactivate(0); + boutonsGroupeLed.Activate(1); + AppendTableau(*TabBuffer,0x04,0x01); break; - case 2: bGroup1.EraseAll();//for (int n=0; n<4; n++) bGroup1.Erase(n); - for (int n=0; n<2; n++) - { - barV.Draw(n, 0); // reset seekbar - numLabel4[n]->Draw("%4.1f", barV.GetValue(n)); - } + + case 1: //Led OFF + boutonsGroupeLed.Inactivate(1); + boutonsGroupeLed.Activate(0); + AppendTableau(*TabBuffer,0x04,0x0F); 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 } - if (barH.Slide()) - { - numLabel1.Draw("%5.1f", barH.GetValue()); - int8_t x = (int8_t)barH.GetValue(); - numLabel2.Draw("%3d", x); - - numLabel3.Draw(barH.GetIntValue()); - } - - int sbNum; - if (barV.GetSlidedNumber(sbNum)) - { - if (sbNum == 0) numLabel4[sbNum]->Draw("%4.1f", barV.GetValue(sbNum)); - else numLabel4[sbNum]->Draw("%4.1f", barV.GetValue(sbNum)); - if (sbNum == 1) numLabel5.Draw("%1d", barV.GetIntValue(sbNum)); - } - // If "doNotTouch" button touched, trapped into endless loop - if (doNotTouch.Touched()) - BlinkLabel warning(250, 200, "You must reset", Label::LEFT, Font16); - - // SeekBar active inactive switching - if (bGroup3.Touched(0)) - { - barH.Activate(); - barV.ActivateAll(); - } - if (bGroup3.Touched(1)) - { - barH.Inactivate(); - barV.InactivateAll(); - } - - if (nUd.Touched()) {} // Example of NumericalUpDown - - wait(0.02f); } }