programme de tournesol photovoltaique pour le cours d'interface

Dependencies:   BSP_DISCO_F746NG

Committer:
legrandpaul
Date:
Mon Jun 21 16:19:41 2021 +0000
Revision:
0:6d4f8bd2994a
programme d'interface

Who changed what in which revision?

UserRevisionLine numberNew contents of line
legrandpaul 0:6d4f8bd2994a 1 #include "mbed.h"
legrandpaul 0:6d4f8bd2994a 2 #include "stm32746g_discovery_lcd.h"
legrandpaul 0:6d4f8bd2994a 3 #include "stm32746g_discovery_ts.h"
legrandpaul 0:6d4f8bd2994a 4 #include "SolarPannel.h"
legrandpaul 0:6d4f8bd2994a 5 #include "pres.h"
legrandpaul 0:6d4f8bd2994a 6
legrandpaul 0:6d4f8bd2994a 7
legrandpaul 0:6d4f8bd2994a 8 #define K 3.2
legrandpaul 0:6d4f8bd2994a 9
legrandpaul 0:6d4f8bd2994a 10 struct bouton{
legrandpaul 0:6d4f8bd2994a 11
legrandpaul 0:6d4f8bd2994a 12 uint16_t Xpos;
legrandpaul 0:6d4f8bd2994a 13 uint16_t Ypos;
legrandpaul 0:6d4f8bd2994a 14 uint16_t Xtaille;
legrandpaul 0:6d4f8bd2994a 15 uint16_t Ytaille;
legrandpaul 0:6d4f8bd2994a 16 uint16_t couleur;
legrandpaul 0:6d4f8bd2994a 17 };
legrandpaul 0:6d4f8bd2994a 18
legrandpaul 0:6d4f8bd2994a 19 void drawImage_image(int offsetX, int offsetY);
legrandpaul 0:6d4f8bd2994a 20 bouton init_bouton (bouton x, uint16_t Xpos, uint16_t Ypos, uint16_t Xtaille, uint16_t Ytaille, uint16_t couleur);
legrandpaul 0:6d4f8bd2994a 21 void draw_bouton (bouton x, uint8_t *texte);
legrandpaul 0:6d4f8bd2994a 22 bool getbouton (bouton x);
legrandpaul 0:6d4f8bd2994a 23
legrandpaul 0:6d4f8bd2994a 24 TS_StateTypeDef TS_State;
legrandpaul 0:6d4f8bd2994a 25 SOLAR_PANNEL sl;
legrandpaul 0:6d4f8bd2994a 26
legrandpaul 0:6d4f8bd2994a 27 int main()
legrandpaul 0:6d4f8bd2994a 28 {
legrandpaul 0:6d4f8bd2994a 29 struct bouton bp_gauche;
legrandpaul 0:6d4f8bd2994a 30 struct bouton bp_droite;
legrandpaul 0:6d4f8bd2994a 31 struct bouton bp_mode;
legrandpaul 0:6d4f8bd2994a 32
legrandpaul 0:6d4f8bd2994a 33 TS_StateTypeDef TS_State;
legrandpaul 0:6d4f8bd2994a 34
legrandpaul 0:6d4f8bd2994a 35 uint16_t x, y;
legrandpaul 0:6d4f8bd2994a 36 uint8_t text[30];
legrandpaul 0:6d4f8bd2994a 37 uint8_t status;
legrandpaul 0:6d4f8bd2994a 38 uint8_t idx;
legrandpaul 0:6d4f8bd2994a 39 uint8_t cleared = 0;
legrandpaul 0:6d4f8bd2994a 40 uint8_t prev_nb_touches = 0;
legrandpaul 0:6d4f8bd2994a 41 bool boutton_test;
legrandpaul 0:6d4f8bd2994a 42
legrandpaul 0:6d4f8bd2994a 43 uint8_t texte_D[] = ">";
legrandpaul 0:6d4f8bd2994a 44 uint8_t texte_G[] = "<";
legrandpaul 0:6d4f8bd2994a 45 uint8_t texte_manuel[] = "manuel";
legrandpaul 0:6d4f8bd2994a 46 uint8_t texte_auto[] = "auto";
legrandpaul 0:6d4f8bd2994a 47
legrandpaul 0:6d4f8bd2994a 48 int state = 0;
legrandpaul 0:6d4f8bd2994a 49
legrandpaul 0:6d4f8bd2994a 50 BSP_LCD_Init();
legrandpaul 0:6d4f8bd2994a 51 BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
legrandpaul 0:6d4f8bd2994a 52 BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
legrandpaul 0:6d4f8bd2994a 53
legrandpaul 0:6d4f8bd2994a 54 BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN DEMO", CENTER_MODE);
legrandpaul 0:6d4f8bd2994a 55 HAL_Delay(1000);
legrandpaul 0:6d4f8bd2994a 56
legrandpaul 0:6d4f8bd2994a 57 status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
legrandpaul 0:6d4f8bd2994a 58 if (status != TS_OK) {
legrandpaul 0:6d4f8bd2994a 59 BSP_LCD_Clear(LCD_COLOR_RED);
legrandpaul 0:6d4f8bd2994a 60 BSP_LCD_SetBackColor(LCD_COLOR_RED);
legrandpaul 0:6d4f8bd2994a 61 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
legrandpaul 0:6d4f8bd2994a 62 BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
legrandpaul 0:6d4f8bd2994a 63 } else {
legrandpaul 0:6d4f8bd2994a 64 BSP_LCD_Clear(LCD_COLOR_GREEN);
legrandpaul 0:6d4f8bd2994a 65 BSP_LCD_SetBackColor(LCD_COLOR_GREEN);
legrandpaul 0:6d4f8bd2994a 66 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
legrandpaul 0:6d4f8bd2994a 67 BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
legrandpaul 0:6d4f8bd2994a 68 }
legrandpaul 0:6d4f8bd2994a 69
legrandpaul 0:6d4f8bd2994a 70 HAL_Delay(1000);
legrandpaul 0:6d4f8bd2994a 71 /*BSP_LCD_SetFont(&Font12);
legrandpaul 0:6d4f8bd2994a 72 BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
legrandpaul 0:6d4f8bd2994a 73 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);*/
legrandpaul 0:6d4f8bd2994a 74
legrandpaul 0:6d4f8bd2994a 75 drawImage_image(0, 0);
legrandpaul 0:6d4f8bd2994a 76
legrandpaul 0:6d4f8bd2994a 77 bp_droite = init_bouton (bp_droite, 425, 100, 30, 50, LCD_COLOR_WHITE);
legrandpaul 0:6d4f8bd2994a 78 bp_gauche = init_bouton (bp_gauche, 25, 100, 30, 50, LCD_COLOR_WHITE);
legrandpaul 0:6d4f8bd2994a 79 bp_mode = init_bouton (bp_mode, 205, 225, 80, 40, LCD_COLOR_WHITE);
legrandpaul 0:6d4f8bd2994a 80
legrandpaul 0:6d4f8bd2994a 81 while(1) {
legrandpaul 0:6d4f8bd2994a 82
legrandpaul 0:6d4f8bd2994a 83 switch (state){
legrandpaul 0:6d4f8bd2994a 84 case 0 :
legrandpaul 0:6d4f8bd2994a 85
legrandpaul 0:6d4f8bd2994a 86 draw_bouton(bp_gauche, texte_G);
legrandpaul 0:6d4f8bd2994a 87 draw_bouton(bp_droite, texte_D);
legrandpaul 0:6d4f8bd2994a 88 draw_bouton(bp_mode, texte_manuel);
legrandpaul 0:6d4f8bd2994a 89
legrandpaul 0:6d4f8bd2994a 90 if (getbouton(bp_gauche))sl.rotate(LEFT, 0.3);
legrandpaul 0:6d4f8bd2994a 91 else if (getbouton(bp_droite))sl.rotate(RIGHT, 0.3);
legrandpaul 0:6d4f8bd2994a 92 else sl.stop();
legrandpaul 0:6d4f8bd2994a 93
legrandpaul 0:6d4f8bd2994a 94 if (getbouton(bp_mode))state = 1;
legrandpaul 0:6d4f8bd2994a 95
legrandpaul 0:6d4f8bd2994a 96 break;
legrandpaul 0:6d4f8bd2994a 97
legrandpaul 0:6d4f8bd2994a 98 case 1:
legrandpaul 0:6d4f8bd2994a 99 if (getbouton(bp_mode) == 0) state = 2;
legrandpaul 0:6d4f8bd2994a 100 break;
legrandpaul 0:6d4f8bd2994a 101
legrandpaul 0:6d4f8bd2994a 102 case 2:
legrandpaul 0:6d4f8bd2994a 103 drawImage_image(0, 0);
legrandpaul 0:6d4f8bd2994a 104 draw_bouton(bp_mode, texte_auto);
legrandpaul 0:6d4f8bd2994a 105 state = 3;
legrandpaul 0:6d4f8bd2994a 106 break;
legrandpaul 0:6d4f8bd2994a 107
legrandpaul 0:6d4f8bd2994a 108 case 3:
legrandpaul 0:6d4f8bd2994a 109
legrandpaul 0:6d4f8bd2994a 110 if (sl.getDelta() > 0 && sl.getDelta() < 1)sl.rotate(RIGHT, (sl.getDelta()*K));
legrandpaul 0:6d4f8bd2994a 111 else if (sl.getDelta() < 0 && sl.getDelta() > -1)sl.rotate(LEFT, (sl.getDelta() * (-K)));
legrandpaul 0:6d4f8bd2994a 112 else sl.stop();
legrandpaul 0:6d4f8bd2994a 113
legrandpaul 0:6d4f8bd2994a 114 if (getbouton(bp_mode)){
legrandpaul 0:6d4f8bd2994a 115 state = 4;
legrandpaul 0:6d4f8bd2994a 116 sl.stop();
legrandpaul 0:6d4f8bd2994a 117 }
legrandpaul 0:6d4f8bd2994a 118
legrandpaul 0:6d4f8bd2994a 119 break;
legrandpaul 0:6d4f8bd2994a 120
legrandpaul 0:6d4f8bd2994a 121 case 4:
legrandpaul 0:6d4f8bd2994a 122 if (getbouton(bp_mode) == 0){
legrandpaul 0:6d4f8bd2994a 123 state = 0;
legrandpaul 0:6d4f8bd2994a 124 }
legrandpaul 0:6d4f8bd2994a 125 break;
legrandpaul 0:6d4f8bd2994a 126 }
legrandpaul 0:6d4f8bd2994a 127 }
legrandpaul 0:6d4f8bd2994a 128
legrandpaul 0:6d4f8bd2994a 129 }
legrandpaul 0:6d4f8bd2994a 130
legrandpaul 0:6d4f8bd2994a 131 void draw_bouton (bouton x, uint8_t *texte){
legrandpaul 0:6d4f8bd2994a 132
legrandpaul 0:6d4f8bd2994a 133 BSP_LCD_DrawRect( x.Xpos, x.Ypos, x.Xtaille, x.Ytaille);
legrandpaul 0:6d4f8bd2994a 134 BSP_LCD_FillRect( x.Xpos, x.Ypos, x.Xtaille, x.Ytaille);
legrandpaul 0:6d4f8bd2994a 135
legrandpaul 0:6d4f8bd2994a 136 BSP_LCD_SetFont(&Font12);
legrandpaul 0:6d4f8bd2994a 137 BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
legrandpaul 0:6d4f8bd2994a 138 BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
legrandpaul 0:6d4f8bd2994a 139 BSP_LCD_DisplayStringAt(x.Xpos + (x.Xtaille/2) - (sizeof(texte)-1) , x.Ypos + (x.Ytaille/2), (uint8_t *)texte, LEFT_MODE);
legrandpaul 0:6d4f8bd2994a 140 }
legrandpaul 0:6d4f8bd2994a 141
legrandpaul 0:6d4f8bd2994a 142 bool getbouton (bouton x){
legrandpaul 0:6d4f8bd2994a 143
legrandpaul 0:6d4f8bd2994a 144 BSP_TS_GetState(&TS_State);
legrandpaul 0:6d4f8bd2994a 145
legrandpaul 0:6d4f8bd2994a 146 if (TS_State.touchDetected && TS_State.touchX[0] < (x.Xpos + x.Xtaille) && TS_State.touchX[0] > x.Xpos && TS_State.touchY[0] < (x.Ypos + x.Ytaille) && TS_State.touchY[0] > x.Ypos){
legrandpaul 0:6d4f8bd2994a 147 return 1;
legrandpaul 0:6d4f8bd2994a 148 }
legrandpaul 0:6d4f8bd2994a 149 else return 0;
legrandpaul 0:6d4f8bd2994a 150
legrandpaul 0:6d4f8bd2994a 151 }
legrandpaul 0:6d4f8bd2994a 152
legrandpaul 0:6d4f8bd2994a 153 bouton init_bouton (bouton x, uint16_t Xpos, uint16_t Ypos, uint16_t Xtaille, uint16_t Ytaille, uint16_t couleur){
legrandpaul 0:6d4f8bd2994a 154 x.Xpos = Xpos;
legrandpaul 0:6d4f8bd2994a 155 x.Ypos = Ypos;
legrandpaul 0:6d4f8bd2994a 156 x.Xtaille = Xtaille;
legrandpaul 0:6d4f8bd2994a 157 x.Ytaille = Ytaille;
legrandpaul 0:6d4f8bd2994a 158 x.couleur = couleur;
legrandpaul 0:6d4f8bd2994a 159
legrandpaul 0:6d4f8bd2994a 160 return x;
legrandpaul 0:6d4f8bd2994a 161 }
legrandpaul 0:6d4f8bd2994a 162
legrandpaul 0:6d4f8bd2994a 163 void drawImage_image(int offsetX, int offsetY){
legrandpaul 0:6d4f8bd2994a 164 int x = 0;
legrandpaul 0:6d4f8bd2994a 165 int y = 0;
legrandpaul 0:6d4f8bd2994a 166 uint32_t* dataPtr = (uint32_t*)pres.data;
legrandpaul 0:6d4f8bd2994a 167 while(y < pres.height) {
legrandpaul 0:6d4f8bd2994a 168 while(x < pres.width) {
legrandpaul 0:6d4f8bd2994a 169 BSP_LCD_DrawPixel(x + offsetX, y + offsetY, *dataPtr);
legrandpaul 0:6d4f8bd2994a 170 dataPtr++;
legrandpaul 0:6d4f8bd2994a 171 x++;
legrandpaul 0:6d4f8bd2994a 172 }
legrandpaul 0:6d4f8bd2994a 173 x = 0;
legrandpaul 0:6d4f8bd2994a 174 y++;
legrandpaul 0:6d4f8bd2994a 175 }
legrandpaul 0:6d4f8bd2994a 176 }