Une horloge à afficheurs 7 segments

Dependencies:   BSP_DISCO_F746NG

view.cpp

Committer:
sol427
Date:
2020-06-22
Revision:
4:06a5a25319d5

File content as of revision 4:06a5a25319d5:

#include "view.h"
#include "stm32746g_discovery_lcd.h"
#include "mbed.h"
#include "button.h"
#include <list>

View::View(int width, int height, uint32_t bgColor)
    : m_width(width), m_height(height), m_bgColor(bgColor), m_horlogeX(40), m_reveilX(200)
{
    
    // creation des boutons
    
    // reglage de l'heure
    Button heurePlus(m_horlogeX, 110, 35, 30);
    Button heureMoins(m_horlogeX + 60 ,110 , 35, 30);
    Button minutePlus(m_horlogeX, 190, 35, 30);
    Button minuteMoins(m_horlogeX + 60 ,190 , 35, 30);
    
    heurePlus.setText("+" );
    heureMoins.setText("-");
    minutePlus.setText("+");
    minuteMoins.setText("-");
    
    m_buttonList.push_back(heurePlus);
    m_buttonList.push_back(heureMoins);
    m_buttonList.push_back(minutePlus);
    m_buttonList.push_back(minuteMoins);
    
    // reglage du reveil
    Button reveilHeurePlus(m_reveilX, 110, 35, 30);
    Button reveilHeureMoins(m_reveilX + 60 ,110 , 35, 30);
    Button reveilMinutePlus(m_reveilX, 190, 35, 30);
    Button reveilMinuteMoins(m_reveilX + 60 ,190 , 35, 30);
    
    reveilHeurePlus.setText("+" );
    reveilHeureMoins.setText("-");
    reveilMinutePlus.setText("+");
    reveilMinuteMoins.setText("-");
    
    m_buttonList.push_back(reveilHeurePlus); // id = 0
    m_buttonList.push_back(reveilHeureMoins); // id = 1
    m_buttonList.push_back(reveilMinutePlus); // id = 2
    m_buttonList.push_back(reveilMinuteMoins); // id = 3
    
    // initialisation
    drawDynamic();
    drawStatic();
    
}


void View::contain(int x, int y)
{
        // s'execute lorsque l'on a touché un point de l'ecran
        // récupère les coordonnées du point, si elles correspondent
        // aux coordonnes d'un bouton, on execute la fonction correspondante
        int idBut = 0;
        for (Button it : m_buttonList) {
            if (it.contain(x,y)) {
                if (idBut == 0) {
                    // bouton heurePlus
                    h.heureP();
                    HAL_Delay(220);
                } else if(idBut == 1) {
                    // bouton heureMoins
                    h.heureM();
                    HAL_Delay(220);
                } else if(idBut == 2) {
                    // bouton MinutePlus
                    h.minuteP();
                    HAL_Delay(100);
                } else if(idBut == 3) {
                    // bouton MinuteMoins
                    h.minuteM();
                    HAL_Delay(100);
                }
                
            }
            idBut++;
        }
}

void View::drawStatic()
{
    BSP_LCD_Clear(LCD_COLOR_BLACK);
    
    // trace le texte
    uint8_t text[30];
    BSP_LCD_SetTextColor(LCD_COLOR_LIGHTGRAY);
    
        // horloge
    sprintf((char*)text, "Horloge");
    BSP_LCD_SetFont(&Font24);
    BSP_LCD_DisplayStringAt(m_horlogeX, 20, (uint8_t *)&text, LEFT_MODE);
    
    sprintf((char*)text, "heures");
    BSP_LCD_SetFont(&Font20);
    BSP_LCD_DisplayStringAt(m_horlogeX, 80, (uint8_t *)&text, LEFT_MODE);
    
    sprintf((char*)text, "minutes");
    BSP_LCD_SetFont(&Font20);
    BSP_LCD_DisplayStringAt(m_horlogeX, 160, (uint8_t *)&text, LEFT_MODE);
    
        // reveil
    sprintf((char*)text, "Reveil");
    BSP_LCD_SetFont(&Font24);
    BSP_LCD_DisplayStringAt(m_reveilX, 20, (uint8_t *)&text, LEFT_MODE);
    
    sprintf((char*)text, "heures");
    BSP_LCD_SetFont(&Font20);
    BSP_LCD_DisplayStringAt(m_reveilX, 80, (uint8_t *)&text, LEFT_MODE);
    
    sprintf((char*)text, "minutes");
    BSP_LCD_SetFont(&Font20);
    BSP_LCD_DisplayStringAt(m_reveilX, 160, (uint8_t *)&text, LEFT_MODE);
    
    // trace les boutons
    BSP_LCD_SetFont(&Font12);
    for (Button it : m_buttonList) {
        it.draw();
    }
    
    BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
}

void View::drawDynamic() {
    //uint8_t text[30];
    BSP_LCD_SetTextColor(LCD_COLOR_LIGHTGRAY);
    BSP_LCD_SetFont(&Font20);
    
    // trace l'heure
        int minutes = h.getMinutes();
        uint8_t text[5];
        vector<uint8_t> digits;
        digits = h.get4Digits();
        
        sprintf((char*)text, "%d%d:%d%d",  digits.at(0),  digits.at(1),  digits.at(2),  digits.at(3));
        BSP_LCD_DisplayStringAt(m_horlogeX, 50, (uint8_t *)&text, LEFT_MODE);
}

void View::updateHorloge() {
    h.update();
}