
Une horloge à afficheurs 7 segments
Dependencies: BSP_DISCO_F746NG
Diff: view.cpp
- Revision:
- 4:06a5a25319d5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/view.cpp Mon Jun 22 16:33:43 2020 +0000 @@ -0,0 +1,143 @@ +#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(); +} \ No newline at end of file