fini

Dependencies:   F746_GUI mbed

Revision:
26:31abf8bdcddb
Parent:
25:586781d009dd
Child:
27:1478931d1205
--- 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);
     }
 }