Correction

Dependencies:   TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG

Committer:
DValente
Date:
Wed Nov 10 11:10:47 2021 +0000
Revision:
0:e6b817007ce6
TP2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DValente 0:e6b817007ce6 1 #include "dashboard.h"
DValente 0:e6b817007ce6 2 DigitalOut CL(D0);
DValente 0:e6b817007ce6 3 DigitalOut CR(D1);
DValente 0:e6b817007ce6 4 // Ticker pour clignotant gauche
DValente 0:e6b817007ce6 5 void FLeft()
DValente 0:e6b817007ce6 6 {
DValente 0:e6b817007ce6 7 static bool On=false;
DValente 0:e6b817007ce6 8 if (On)
DValente 0:e6b817007ce6 9 {
DValente 0:e6b817007ce6 10 BSP_LCD_DrawBitmap(195,0,(uint8_t*) &leftDartOff);
DValente 0:e6b817007ce6 11 CL=1;
DValente 0:e6b817007ce6 12 On=false;
DValente 0:e6b817007ce6 13 }
DValente 0:e6b817007ce6 14 else
DValente 0:e6b817007ce6 15 {
DValente 0:e6b817007ce6 16 BSP_LCD_DrawBitmap(195,0,(uint8_t*) &leftDartOn);
DValente 0:e6b817007ce6 17 CL=0;
DValente 0:e6b817007ce6 18 On=true;
DValente 0:e6b817007ce6 19 }
DValente 0:e6b817007ce6 20 }
DValente 0:e6b817007ce6 21
DValente 0:e6b817007ce6 22 // Ticker pour clignotant droit
DValente 0:e6b817007ce6 23 void FRight()
DValente 0:e6b817007ce6 24 {
DValente 0:e6b817007ce6 25 static bool On=false;
DValente 0:e6b817007ce6 26 if (On)
DValente 0:e6b817007ce6 27 {
DValente 0:e6b817007ce6 28 BSP_LCD_DrawBitmap(245,0,(uint8_t*) &rightDartOff);
DValente 0:e6b817007ce6 29 CR=1;
DValente 0:e6b817007ce6 30 On=false;
DValente 0:e6b817007ce6 31 }
DValente 0:e6b817007ce6 32 else
DValente 0:e6b817007ce6 33 {
DValente 0:e6b817007ce6 34 BSP_LCD_DrawBitmap(245,0,(uint8_t*) &rightDartOn);
DValente 0:e6b817007ce6 35 CR=0;
DValente 0:e6b817007ce6 36 On=true;
DValente 0:e6b817007ce6 37 }
DValente 0:e6b817007ce6 38 }
DValente 0:e6b817007ce6 39
DValente 0:e6b817007ce6 40 // Dessine le fond du tableau de bord
DValente 0:e6b817007ce6 41 void DrawBackground()
DValente 0:e6b817007ce6 42 {
DValente 0:e6b817007ce6 43 BSP_LCD_DrawBitmap(0,0,(uint8_t*) &background);
DValente 0:e6b817007ce6 44 BSP_LCD_DrawBitmap(195,0,(uint8_t*) &leftDartOff);
DValente 0:e6b817007ce6 45 BSP_LCD_DrawBitmap(245,0,(uint8_t*) &rightDartOff);
DValente 0:e6b817007ce6 46 CL=1;
DValente 0:e6b817007ce6 47 CR=1;
DValente 0:e6b817007ce6 48 }
DValente 0:e6b817007ce6 49
DValente 0:e6b817007ce6 50
DValente 0:e6b817007ce6 51 // Dessine l'aiguille de vitesse dans le cadran associé
DValente 0:e6b817007ce6 52 uint8_t DrawSpeedNeedle(uint16_t speed)
DValente 0:e6b817007ce6 53 {
DValente 0:e6b817007ce6 54 uint8_t ret=0;
DValente 0:e6b817007ce6 55 static uint16_t x1=110,y1=121,x2=110,y2=76;
DValente 0:e6b817007ce6 56 float angle;
DValente 0:e6b817007ce6 57 BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
DValente 0:e6b817007ce6 58 BSP_LCD_DrawLine(x1,y1,x2,y2);
DValente 0:e6b817007ce6 59 if(speed >160)
DValente 0:e6b817007ce6 60 {
DValente 0:e6b817007ce6 61 speed=160;
DValente 0:e6b817007ce6 62 ret=1;
DValente 0:e6b817007ce6 63 }
DValente 0:e6b817007ce6 64 angle=M_PI*(7-8*speed/160.0)/6;
DValente 0:e6b817007ce6 65 x1=110+16*cos(angle);
DValente 0:e6b817007ce6 66 y1=136-16*sin(angle);
DValente 0:e6b817007ce6 67 x2=110+60*cos(angle);
DValente 0:e6b817007ce6 68 y2=136-60*sin(angle);
DValente 0:e6b817007ce6 69 BSP_LCD_SetTextColor(LCD_COLOR_RED);
DValente 0:e6b817007ce6 70 BSP_LCD_DrawLine(x1,y1,x2,y2);
DValente 0:e6b817007ce6 71 return ret;
DValente 0:e6b817007ce6 72 }
DValente 0:e6b817007ce6 73
DValente 0:e6b817007ce6 74 // Dessine l'aiguille de vitesse de rotation dans le cadran associé
DValente 0:e6b817007ce6 75 uint8_t DrawRpmNeedle(uint16_t rpm)
DValente 0:e6b817007ce6 76 {
DValente 0:e6b817007ce6 77 uint8_t ret=0;
DValente 0:e6b817007ce6 78 static uint16_t x1=365,y1=121,x2=365,y2=76;
DValente 0:e6b817007ce6 79 float angle;
DValente 0:e6b817007ce6 80 BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
DValente 0:e6b817007ce6 81 BSP_LCD_DrawLine(x1,y1,x2,y2);
DValente 0:e6b817007ce6 82 if(rpm > 8000)
DValente 0:e6b817007ce6 83 {
DValente 0:e6b817007ce6 84 rpm=8000;
DValente 0:e6b817007ce6 85 ret=1;
DValente 0:e6b817007ce6 86 }
DValente 0:e6b817007ce6 87 angle=M_PI*(7-8*rpm/8000.0)/6;
DValente 0:e6b817007ce6 88 x1=365+15*cos(angle);
DValente 0:e6b817007ce6 89 y1=136-15*sin(angle);
DValente 0:e6b817007ce6 90 x2=365+60*cos(angle);
DValente 0:e6b817007ce6 91 y2=136-60*sin(angle);
DValente 0:e6b817007ce6 92 BSP_LCD_SetTextColor(LCD_COLOR_RED);
DValente 0:e6b817007ce6 93 BSP_LCD_DrawLine(x1,y1,x2,y2);
DValente 0:e6b817007ce6 94 return ret;
DValente 0:e6b817007ce6 95 }
DValente 0:e6b817007ce6 96
DValente 0:e6b817007ce6 97 // Dessine l'aiguille du réservoir dans le cadran associé
DValente 0:e6b817007ce6 98 uint8_t DrawFuelNeedle(uint16_t fuel)
DValente 0:e6b817007ce6 99 {
DValente 0:e6b817007ce6 100 uint8_t ret=0;
DValente 0:e6b817007ce6 101 static uint16_t x1,x2,y1,y2;
DValente 0:e6b817007ce6 102 float angle=0;
DValente 0:e6b817007ce6 103 BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
DValente 0:e6b817007ce6 104 BSP_LCD_DrawLine(x1,y1,x2,y2);
DValente 0:e6b817007ce6 105 if(fuel>100)
DValente 0:e6b817007ce6 106 {
DValente 0:e6b817007ce6 107 fuel=100;
DValente 0:e6b817007ce6 108 ret=1;
DValente 0:e6b817007ce6 109 }
DValente 0:e6b817007ce6 110 angle=M_PI*(7-8*fuel/100.0)/6;
DValente 0:e6b817007ce6 111 x1=238+6*cos(angle);
DValente 0:e6b817007ce6 112 y1=228-6*sin(angle);
DValente 0:e6b817007ce6 113 x2=238+15*cos(angle);
DValente 0:e6b817007ce6 114 y2=228-15*sin(angle);
DValente 0:e6b817007ce6 115 BSP_LCD_SetTextColor(LCD_COLOR_RED);
DValente 0:e6b817007ce6 116 BSP_LCD_DrawLine(x1,y1,x2,y2);
DValente 0:e6b817007ce6 117 return ret;
DValente 0:e6b817007ce6 118 }
DValente 0:e6b817007ce6 119
DValente 0:e6b817007ce6 120 // Ajoute 0 ou 1 km au compteur kilométrique total et l'affiche
DValente 0:e6b817007ce6 121 uint8_t DrawTotalKm(uint8_t km)
DValente 0:e6b817007ce6 122 {
DValente 0:e6b817007ce6 123 uint8_t ret=0;
DValente 0:e6b817007ce6 124 char text[20];
DValente 0:e6b817007ce6 125 static uint32_t kms=0;
DValente 0:e6b817007ce6 126 if(km>1) ret=1;
DValente 0:e6b817007ce6 127 if (km==1) kms++;
DValente 0:e6b817007ce6 128 sprintf(text,"%07d",kms);
DValente 0:e6b817007ce6 129 BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
DValente 0:e6b817007ce6 130 BSP_LCD_SetFont(&Font16);
DValente 0:e6b817007ce6 131 BSP_LCD_DisplayStringAt(200,49,(uint8_t*)text,LEFT_MODE);
DValente 0:e6b817007ce6 132 BSP_LCD_DisplayStringAt(225,61,(uint8_t*)"km",LEFT_MODE);
DValente 0:e6b817007ce6 133 return ret;
DValente 0:e6b817007ce6 134 }
DValente 0:e6b817007ce6 135
DValente 0:e6b817007ce6 136 // Ajoute 0 ou 1 km au compteur kilométrique jounalier et l'affiche. Si -1 le remet à 0
DValente 0:e6b817007ce6 137 uint8_t DrawDailyKm(int8_t km)
DValente 0:e6b817007ce6 138 {
DValente 0:e6b817007ce6 139 uint8_t ret=0;
DValente 0:e6b817007ce6 140 char text[20];
DValente 0:e6b817007ce6 141 static uint32_t kms=0;
DValente 0:e6b817007ce6 142 if(km>1) ret=1;
DValente 0:e6b817007ce6 143 if (km==1) kms++;
DValente 0:e6b817007ce6 144 else if (km==-1) kms=0;
DValente 0:e6b817007ce6 145 sprintf(text,"%04d",kms);
DValente 0:e6b817007ce6 146 BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
DValente 0:e6b817007ce6 147 BSP_LCD_SetFont(&Font16);
DValente 0:e6b817007ce6 148 BSP_LCD_DisplayStringAt(90,180,(uint8_t*)text,LEFT_MODE);
DValente 0:e6b817007ce6 149 BSP_LCD_DisplayStringAt(97,192,(uint8_t*)"km",LEFT_MODE);
DValente 0:e6b817007ce6 150 return ret;
DValente 0:e6b817007ce6 151 }
DValente 0:e6b817007ce6 152
DValente 0:e6b817007ce6 153 // Affiche la consommation
DValente 0:e6b817007ce6 154 uint8_t DrawConsumption(float consumption)
DValente 0:e6b817007ce6 155 {
DValente 0:e6b817007ce6 156 uint8_t ret=0;
DValente 0:e6b817007ce6 157 char text[20];
DValente 0:e6b817007ce6 158 if(consumption>30.0)
DValente 0:e6b817007ce6 159 {
DValente 0:e6b817007ce6 160 ret=1;
DValente 0:e6b817007ce6 161 consumption=30.0;
DValente 0:e6b817007ce6 162 }
DValente 0:e6b817007ce6 163 sprintf(text,"%2.1f",consumption);
DValente 0:e6b817007ce6 164 BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
DValente 0:e6b817007ce6 165 BSP_LCD_SetFont(&Font16);
DValente 0:e6b817007ce6 166 BSP_LCD_DisplayStringAt(345,180,(uint8_t*)text,LEFT_MODE);
DValente 0:e6b817007ce6 167 BSP_LCD_DisplayStringAt(327,195,(uint8_t*)"L/100km",LEFT_MODE);
DValente 0:e6b817007ce6 168 return ret;
DValente 0:e6b817007ce6 169 }
DValente 0:e6b817007ce6 170
DValente 0:e6b817007ce6 171 // Affiche le clignotant gauche
DValente 0:e6b817007ce6 172 uint8_t FlashLeft(uint8_t flash, uint8_t freq )
DValente 0:e6b817007ce6 173 {
DValente 0:e6b817007ce6 174 uint8_t ret=0;
DValente 0:e6b817007ce6 175 static bool FlOn=false;
DValente 0:e6b817007ce6 176 float Time=0.5;
DValente 0:e6b817007ce6 177 if (freq>0 && freq<5) Time=1.0/freq;
DValente 0:e6b817007ce6 178 else ret+=2;
DValente 0:e6b817007ce6 179 static Ticker TickL;
DValente 0:e6b817007ce6 180 switch (flash)
DValente 0:e6b817007ce6 181 {
DValente 0:e6b817007ce6 182 case 0 :
DValente 0:e6b817007ce6 183 if(FlOn)
DValente 0:e6b817007ce6 184 {
DValente 0:e6b817007ce6 185 BSP_LCD_DrawBitmap(195,0,(uint8_t*) &leftDartOff);
DValente 0:e6b817007ce6 186 CL=1;
DValente 0:e6b817007ce6 187 TickL.detach();
DValente 0:e6b817007ce6 188 FlOn=false;
DValente 0:e6b817007ce6 189 }
DValente 0:e6b817007ce6 190 break;
DValente 0:e6b817007ce6 191 case 1 :
DValente 0:e6b817007ce6 192 if(!FlOn)
DValente 0:e6b817007ce6 193 {
DValente 0:e6b817007ce6 194 TickL.attach(&FLeft,Time);
DValente 0:e6b817007ce6 195 FlOn=true;
DValente 0:e6b817007ce6 196 }
DValente 0:e6b817007ce6 197 break;
DValente 0:e6b817007ce6 198 default : ret++;
DValente 0:e6b817007ce6 199 }
DValente 0:e6b817007ce6 200 return ret;
DValente 0:e6b817007ce6 201 }
DValente 0:e6b817007ce6 202
DValente 0:e6b817007ce6 203 // Affiche le clignotant droit
DValente 0:e6b817007ce6 204 uint8_t FlashRight(uint8_t flash, uint8_t freq )
DValente 0:e6b817007ce6 205 {
DValente 0:e6b817007ce6 206 uint8_t ret=0;
DValente 0:e6b817007ce6 207 static bool FrOn=false;
DValente 0:e6b817007ce6 208 float Time=0.5;
DValente 0:e6b817007ce6 209 if (freq>0 && freq<5) Time=1.0/freq;
DValente 0:e6b817007ce6 210 else ret+=2;
DValente 0:e6b817007ce6 211 printf("Clignotant G\n"); // Débogage
DValente 0:e6b817007ce6 212 static Ticker TickR;
DValente 0:e6b817007ce6 213 switch (flash)
DValente 0:e6b817007ce6 214 {
DValente 0:e6b817007ce6 215 case 0 :
DValente 0:e6b817007ce6 216 if(FrOn)
DValente 0:e6b817007ce6 217 {
DValente 0:e6b817007ce6 218 BSP_LCD_DrawBitmap(245,0,(uint8_t*) &rightDartOff);
DValente 0:e6b817007ce6 219 CR=1;
DValente 0:e6b817007ce6 220 TickR.detach();
DValente 0:e6b817007ce6 221 FrOn=false;
DValente 0:e6b817007ce6 222 }
DValente 0:e6b817007ce6 223 break;
DValente 0:e6b817007ce6 224 case 1 :
DValente 0:e6b817007ce6 225 if(!FrOn)
DValente 0:e6b817007ce6 226 {
DValente 0:e6b817007ce6 227 TickR.attach(&FRight,Time);
DValente 0:e6b817007ce6 228 FrOn=true;
DValente 0:e6b817007ce6 229 }
DValente 0:e6b817007ce6 230 break;
DValente 0:e6b817007ce6 231 default : BSP_LCD_DrawBitmap(245,0,(uint8_t*) &rightDartOff);TickR.detach();ret++;
DValente 0:e6b817007ce6 232 }
DValente 0:e6b817007ce6 233 return ret;
DValente 0:e6b817007ce6 234 }
DValente 0:e6b817007ce6 235