Correction

Dependencies:   TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG

dashboard.cpp

Committer:
DValente
Date:
2021-11-10
Revision:
0:e6b817007ce6

File content as of revision 0:e6b817007ce6:

#include "dashboard.h"
DigitalOut CL(D0);
DigitalOut CR(D1);
// Ticker pour clignotant gauche
void FLeft()
{
    static bool On=false;
    if (On)
    {
        BSP_LCD_DrawBitmap(195,0,(uint8_t*) &leftDartOff);
        CL=1;
        On=false;
    }
    else 
    {
        BSP_LCD_DrawBitmap(195,0,(uint8_t*) &leftDartOn);
        CL=0;
        On=true;
    }
}

// Ticker pour clignotant droit
void FRight()
{
    static bool On=false;
    if (On)
    {
        BSP_LCD_DrawBitmap(245,0,(uint8_t*) &rightDartOff);
        CR=1; 
        On=false;
    }
    else 
    {
        BSP_LCD_DrawBitmap(245,0,(uint8_t*) &rightDartOn);
        CR=0;
        On=true;
    }
}
    
// Dessine le fond du tableau de bord    
void DrawBackground()
{
    BSP_LCD_DrawBitmap(0,0,(uint8_t*) &background);
    BSP_LCD_DrawBitmap(195,0,(uint8_t*) &leftDartOff);
    BSP_LCD_DrawBitmap(245,0,(uint8_t*) &rightDartOff);
    CL=1;
    CR=1;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
}


// Dessine l'aiguille de vitesse dans le cadran associé
uint8_t DrawSpeedNeedle(uint16_t speed)
{
    uint8_t ret=0;
    static uint16_t x1=110,y1=121,x2=110,y2=76;
    float angle;
    BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
    BSP_LCD_DrawLine(x1,y1,x2,y2);
    if(speed >160)
    { 
        speed=160;
        ret=1;
    }
    angle=M_PI*(7-8*speed/160.0)/6;
    x1=110+16*cos(angle);
    y1=136-16*sin(angle);
    x2=110+60*cos(angle);
    y2=136-60*sin(angle);
    BSP_LCD_SetTextColor(LCD_COLOR_RED);
    BSP_LCD_DrawLine(x1,y1,x2,y2);
    return ret;
}

// Dessine l'aiguille de vitesse de rotation dans le cadran associé
uint8_t DrawRpmNeedle(uint16_t rpm)
{
    uint8_t ret=0;
    static uint16_t x1=365,y1=121,x2=365,y2=76;
    float angle;
    BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
    BSP_LCD_DrawLine(x1,y1,x2,y2);
    if(rpm > 8000)
    { 
        rpm=8000;
        ret=1;
    }
    angle=M_PI*(7-8*rpm/8000.0)/6;
    x1=365+15*cos(angle);
    y1=136-15*sin(angle);
    x2=365+60*cos(angle);
    y2=136-60*sin(angle);
    BSP_LCD_SetTextColor(LCD_COLOR_RED);
    BSP_LCD_DrawLine(x1,y1,x2,y2);
    return ret;
}

// Dessine l'aiguille du réservoir dans le cadran associé
uint8_t DrawFuelNeedle(uint16_t fuel)
{
    uint8_t ret=0;
    static uint16_t x1,x2,y1,y2;
    float angle=0;
    BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
    BSP_LCD_DrawLine(x1,y1,x2,y2);
    if(fuel>100)
    { 
        fuel=100;
        ret=1;
    }
    angle=M_PI*(7-8*fuel/100.0)/6;
    x1=238+6*cos(angle);
    y1=228-6*sin(angle);
    x2=238+15*cos(angle);
    y2=228-15*sin(angle);
    BSP_LCD_SetTextColor(LCD_COLOR_RED);
    BSP_LCD_DrawLine(x1,y1,x2,y2);
    return ret;
}

// Ajoute 0 ou 1 km au compteur kilométrique total et l'affiche
uint8_t DrawTotalKm(uint8_t km)
{
    uint8_t ret=0;
    char text[20];
    static uint32_t kms=0;
    if(km>1) ret=1;
    if (km==1) kms++;
    sprintf(text,"%07d",kms);
    BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
    BSP_LCD_SetFont(&Font16);
    BSP_LCD_DisplayStringAt(200,49,(uint8_t*)text,LEFT_MODE);
    BSP_LCD_DisplayStringAt(225,61,(uint8_t*)"km",LEFT_MODE);
    return ret;
}

// Ajoute 0 ou 1 km au compteur kilométrique jounalier et l'affiche. Si -1 le remet à 0
uint8_t DrawDailyKm(int8_t km)
{
    uint8_t ret=0;
    char text[20];
    static uint32_t kms=0;
    if(km>1) ret=1;
    if (km==1) kms++;
    else if (km==-1) kms=0;
    sprintf(text,"%04d",kms);
    BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
    BSP_LCD_SetFont(&Font16);
    BSP_LCD_DisplayStringAt(90,180,(uint8_t*)text,LEFT_MODE);
    BSP_LCD_DisplayStringAt(97,192,(uint8_t*)"km",LEFT_MODE);
    return ret;
}

// Affiche la consommation
uint8_t DrawConsumption(float consumption)
{
    uint8_t ret=0;
    char text[20];
    if(consumption>30.0)
    {
         ret=1;
         consumption=30.0;
    }
    sprintf(text,"%2.1f",consumption);
    BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
    BSP_LCD_SetFont(&Font16);
    BSP_LCD_DisplayStringAt(345,180,(uint8_t*)text,LEFT_MODE);
    BSP_LCD_DisplayStringAt(327,195,(uint8_t*)"L/100km",LEFT_MODE);
    return ret;
}

// Affiche le clignotant gauche
uint8_t FlashLeft(uint8_t flash, uint8_t freq )
{
    uint8_t ret=0;
    static bool FlOn=false;
    float Time=0.5;
    if (freq>0 && freq<5) Time=1.0/freq;
    else ret+=2;
    static Ticker TickL;
    switch (flash)
    {
        case 0 : 
            if(FlOn)
            {
                BSP_LCD_DrawBitmap(195,0,(uint8_t*) &leftDartOff);
                CL=1;
                TickL.detach();
                FlOn=false;
            }  
            break;
        case 1 :  
            if(!FlOn)
            {
                TickL.attach(&FLeft,Time);
                FlOn=true;
            }
            break;
        default : ret++;
    }
    return ret;
}

// Affiche le clignotant droit
uint8_t FlashRight(uint8_t flash, uint8_t freq )
{
    uint8_t ret=0;
    static bool FrOn=false;
    float Time=0.5;
    if (freq>0 && freq<5) Time=1.0/freq;
    else ret+=2;
    printf("Clignotant G\n"); // Débogage
    static Ticker TickR;
    switch (flash)
    {
        case 0 : 
            if(FrOn)
            {
                BSP_LCD_DrawBitmap(245,0,(uint8_t*) &rightDartOff);
                CR=1;
                TickR.detach();
                FrOn=false;
            }
            break;
        case 1 : 
            if(!FrOn)
            {
                TickR.attach(&FRight,Time);
                FrOn=true;
            }
            break;
        default : BSP_LCD_DrawBitmap(245,0,(uint8_t*) &rightDartOff);TickR.detach();ret++;
    }
    return ret;
}