![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Ardoise magique
Dependencies: TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG BUTTON_GROUP RGB_matrix_Panel
main.cpp@13:1736b906f227, 2019-06-04 (annotated)
- Committer:
- juliento
- Date:
- Tue Jun 04 15:19:14 2019 +0000
- Revision:
- 13:1736b906f227
- Parent:
- 12:e2bb579c4455
Ardoise magique
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:35af280527cf | 1 | //--------------------------------------------------------------- |
MikamiUitOpen | 0:35af280527cf | 2 | // Demo program of Button class and ButtonGroup class |
MikamiUitOpen | 0:35af280527cf | 3 | // |
MikamiUitOpen | 12:e2bb579c4455 | 4 | // 2016/02/22, Copyright (c) 2016 MIKAMI, Naoki |
MikamiUitOpen | 0:35af280527cf | 5 | //--------------------------------------------------------------- |
MikamiUitOpen | 0:35af280527cf | 6 | |
MikamiUitOpen | 0:35af280527cf | 7 | #include "button_group.hpp" |
MikamiUitOpen | 0:35af280527cf | 8 | |
MikamiUitOpen | 0:35af280527cf | 9 | using namespace Mikami; |
MikamiUitOpen | 0:35af280527cf | 10 | |
juliento | 13:1736b906f227 | 11 | #include "mbed.h" |
juliento | 13:1736b906f227 | 12 | #include "TS_DISCO_F746NG.h" |
juliento | 13:1736b906f227 | 13 | #include "LCD_DISCO_F746NG.h" |
juliento | 13:1736b906f227 | 14 | #include "Adafruit_GFX.h" |
juliento | 13:1736b906f227 | 15 | #include "RGBmatrixPanel.h" |
juliento | 13:1736b906f227 | 16 | |
juliento | 13:1736b906f227 | 17 | LCD_DISCO_F746NG lcd; |
juliento | 13:1736b906f227 | 18 | TS_DISCO_F746NG ts; |
juliento | 13:1736b906f227 | 19 | |
juliento | 13:1736b906f227 | 20 | Serial pc(USBTX, USBRX); |
juliento | 13:1736b906f227 | 21 | |
juliento | 13:1736b906f227 | 22 | // Matrix LEDs 32x16 |
juliento | 13:1736b906f227 | 23 | RGBmatrixPanel matrix(D1,D2,D0,A0,D3,A1,A2,D4,A3,A4,D6,A5,false); //(r1,g1,b1,r2,g2,b2,a,b,c,sclk,latch,oe,dbuf) |
MikamiUitOpen | 0:35af280527cf | 24 | |
MikamiUitOpen | 0:35af280527cf | 25 | int main() |
MikamiUitOpen | 0:35af280527cf | 26 | { |
juliento | 13:1736b906f227 | 27 | TS_StateTypeDef TS_State; |
juliento | 13:1736b906f227 | 28 | uint16_t x, y; |
juliento | 13:1736b906f227 | 29 | uint8_t text[30]; |
juliento | 13:1736b906f227 | 30 | uint8_t status; |
juliento | 13:1736b906f227 | 31 | uint8_t idx; |
juliento | 13:1736b906f227 | 32 | uint8_t cleared = 0; |
juliento | 13:1736b906f227 | 33 | uint8_t prev_nb_touches = 0; |
juliento | 13:1736b906f227 | 34 | int mNum; |
MikamiUitOpen | 0:35af280527cf | 35 | |
MikamiUitOpen | 6:2736b38c1d73 | 36 | const uint32_t BACK_COLOR = 0xFF006A6C; // teal green |
juliento | 13:1736b906f227 | 37 | |
juliento | 13:1736b906f227 | 38 | uint8_t Xlength_case = 13, Ylength_case = 17; |
juliento | 13:1736b906f227 | 39 | |
juliento | 13:1736b906f227 | 40 | lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN DEMO", CENTER_MODE); |
juliento | 13:1736b906f227 | 41 | wait(1); |
juliento | 13:1736b906f227 | 42 | lcd.Clear(LCD_COLOR_BLACK); |
juliento | 13:1736b906f227 | 43 | |
juliento | 13:1736b906f227 | 44 | //Initialise et configure le tactile du LCD |
juliento | 13:1736b906f227 | 45 | status = ts.Init(lcd.GetXSize(), lcd.GetYSize()); |
juliento | 13:1736b906f227 | 46 | |
juliento | 13:1736b906f227 | 47 | const string COLOR_Button[5] = {"RED", "BLUE","GREEN","RESET","GOMME"}; |
juliento | 13:1736b906f227 | 48 | ButtonGroup color(lcd, ts, 430, 30, 50, 50, |
juliento | 13:1736b906f227 | 49 | LCD_COLOR_BLUE, BACK_COLOR, 5, COLOR_Button, 5, 0, 1); |
juliento | 13:1736b906f227 | 50 | color.Draw(0, LCD_COLOR_RED); |
juliento | 13:1736b906f227 | 51 | color.Draw(1, LCD_COLOR_BLUE); |
juliento | 13:1736b906f227 | 52 | color.Draw(2, LCD_COLOR_GREEN); |
juliento | 13:1736b906f227 | 53 | color.Draw(3, LCD_COLOR_ORANGE); |
juliento | 13:1736b906f227 | 54 | color.Draw(4, LCD_COLOR_WHITE); |
juliento | 13:1736b906f227 | 55 | |
juliento | 13:1736b906f227 | 56 | matrix.begin(); |
juliento | 13:1736b906f227 | 57 | |
juliento | 13:1736b906f227 | 58 | bool blue = false; |
juliento | 13:1736b906f227 | 59 | bool red = true; |
juliento | 13:1736b906f227 | 60 | bool green = false; |
juliento | 13:1736b906f227 | 61 | bool reset = false; |
juliento | 13:1736b906f227 | 62 | bool gomme = false; |
juliento | 13:1736b906f227 | 63 | |
juliento | 13:1736b906f227 | 64 | while(1) { |
juliento | 13:1736b906f227 | 65 | |
juliento | 13:1736b906f227 | 66 | |
juliento | 13:1736b906f227 | 67 | //Grille sur écran tactile |
juliento | 13:1736b906f227 | 68 | for(int i = 0; i <= 16; i++) { |
juliento | 13:1736b906f227 | 69 | lcd.DrawHLine(0,i*Ylength_case,lcd.GetXSize()-64); |
juliento | 13:1736b906f227 | 70 | } |
MikamiUitOpen | 0:35af280527cf | 71 | |
juliento | 13:1736b906f227 | 72 | for(int i = 0; i <= 32; i++) { |
juliento | 13:1736b906f227 | 73 | lcd.DrawVLine(i*Xlength_case,0,lcd.GetYSize()); |
juliento | 13:1736b906f227 | 74 | } |
juliento | 13:1736b906f227 | 75 | |
juliento | 13:1736b906f227 | 76 | ts.GetState(&TS_State); |
MikamiUitOpen | 12:e2bb579c4455 | 77 | |
juliento | 13:1736b906f227 | 78 | //Condition s'il repère ou non un appui sur le LCD |
juliento | 13:1736b906f227 | 79 | if ((reset == false)&&(TS_State.touchDetected)) { |
juliento | 13:1736b906f227 | 80 | /* |
juliento | 13:1736b906f227 | 81 | // Clear lines corresponding to old touches coordinates |
juliento | 13:1736b906f227 | 82 | if (TS_State.touchDetected < prev_nb_touches) { |
juliento | 13:1736b906f227 | 83 | for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) { |
juliento | 13:1736b906f227 | 84 | lcd.ClearStringLine(idx); |
juliento | 13:1736b906f227 | 85 | } |
juliento | 13:1736b906f227 | 86 | } |
juliento | 13:1736b906f227 | 87 | */ |
juliento | 13:1736b906f227 | 88 | prev_nb_touches = TS_State.touchDetected; |
juliento | 13:1736b906f227 | 89 | |
juliento | 13:1736b906f227 | 90 | cleared = 0; |
MikamiUitOpen | 12:e2bb579c4455 | 91 | |
juliento | 13:1736b906f227 | 92 | //Nombre de doigts sur l'écran |
juliento | 13:1736b906f227 | 93 | //sprintf((char*)text, "Touches: %d", TS_State.touchDetected); |
juliento | 13:1736b906f227 | 94 | //lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); |
juliento | 13:1736b906f227 | 95 | |
juliento | 13:1736b906f227 | 96 | //Position de chaque doigts |
juliento | 13:1736b906f227 | 97 | for (idx = 0; idx < TS_State.touchDetected; idx++) { |
juliento | 13:1736b906f227 | 98 | x = TS_State.touchX[idx]; |
juliento | 13:1736b906f227 | 99 | y = TS_State.touchY[idx]; |
juliento | 13:1736b906f227 | 100 | sprintf((char*)text, "Touch %d: x=%d y=%d ", idx+1, x, y); |
juliento | 13:1736b906f227 | 101 | //lcd.DisplayStringAt(0, LINE(idx+1), (uint8_t *)&text, LEFT_MODE); |
juliento | 13:1736b906f227 | 102 | } |
juliento | 13:1736b906f227 | 103 | |
juliento | 13:1736b906f227 | 104 | //dessine les pixels par où on est passé |
juliento | 13:1736b906f227 | 105 | lcd.DrawPixel(TS_State.touchX[0], TS_State.touchY[0], LCD_COLOR_ORANGE); |
MikamiUitOpen | 12:e2bb579c4455 | 106 | |
juliento | 13:1736b906f227 | 107 | //allume les LEDs sur la matrix de LEDs |
juliento | 13:1736b906f227 | 108 | if (color.Touched(0, LCD_COLOR_DARKRED)) { |
juliento | 13:1736b906f227 | 109 | red = true; |
juliento | 13:1736b906f227 | 110 | green = false; |
juliento | 13:1736b906f227 | 111 | blue = false; |
juliento | 13:1736b906f227 | 112 | reset = false; |
juliento | 13:1736b906f227 | 113 | color.Draw(1, LCD_COLOR_BLUE); |
juliento | 13:1736b906f227 | 114 | color.Draw(2, LCD_COLOR_GREEN); |
juliento | 13:1736b906f227 | 115 | color.Draw(3, LCD_COLOR_ORANGE); |
juliento | 13:1736b906f227 | 116 | color.Draw(4, LCD_COLOR_WHITE); |
juliento | 13:1736b906f227 | 117 | } else if (color.Touched(1, LCD_COLOR_DARKBLUE)) { |
juliento | 13:1736b906f227 | 118 | blue = true; |
juliento | 13:1736b906f227 | 119 | red = false; |
juliento | 13:1736b906f227 | 120 | green = false; |
juliento | 13:1736b906f227 | 121 | reset = false; |
juliento | 13:1736b906f227 | 122 | color.Draw(0, LCD_COLOR_RED); |
juliento | 13:1736b906f227 | 123 | color.Draw(2, LCD_COLOR_GREEN); |
juliento | 13:1736b906f227 | 124 | color.Draw(3, LCD_COLOR_ORANGE); |
juliento | 13:1736b906f227 | 125 | color.Draw(4, LCD_COLOR_WHITE); |
juliento | 13:1736b906f227 | 126 | } else if (color.Touched(2, LCD_COLOR_DARKGREEN)) { |
juliento | 13:1736b906f227 | 127 | green = true; |
juliento | 13:1736b906f227 | 128 | blue = false; |
juliento | 13:1736b906f227 | 129 | red = false; |
juliento | 13:1736b906f227 | 130 | reset = false; |
juliento | 13:1736b906f227 | 131 | color.Draw(0, LCD_COLOR_RED); |
juliento | 13:1736b906f227 | 132 | color.Draw(1, LCD_COLOR_BLUE); |
juliento | 13:1736b906f227 | 133 | color.Draw(3, LCD_COLOR_ORANGE); |
juliento | 13:1736b906f227 | 134 | color.Draw(4, LCD_COLOR_WHITE); |
juliento | 13:1736b906f227 | 135 | } else if (color.Touched(3, LCD_COLOR_WHITE)) { |
juliento | 13:1736b906f227 | 136 | green = false; |
juliento | 13:1736b906f227 | 137 | blue = false; |
juliento | 13:1736b906f227 | 138 | red = false; |
juliento | 13:1736b906f227 | 139 | reset = true; |
juliento | 13:1736b906f227 | 140 | color.Draw(0, LCD_COLOR_RED); |
juliento | 13:1736b906f227 | 141 | color.Draw(1, LCD_COLOR_BLUE); |
juliento | 13:1736b906f227 | 142 | color.Draw(2, LCD_COLOR_GREEN); |
juliento | 13:1736b906f227 | 143 | } else if (color.Touched(4, LCD_COLOR_BLACK)) { |
juliento | 13:1736b906f227 | 144 | green = false; |
juliento | 13:1736b906f227 | 145 | blue = false; |
juliento | 13:1736b906f227 | 146 | red = false; |
juliento | 13:1736b906f227 | 147 | reset = false; |
juliento | 13:1736b906f227 | 148 | gomme = true; |
juliento | 13:1736b906f227 | 149 | color.Draw(0, LCD_COLOR_RED); |
juliento | 13:1736b906f227 | 150 | color.Draw(1, LCD_COLOR_BLUE); |
juliento | 13:1736b906f227 | 151 | color.Draw(2, LCD_COLOR_GREEN); |
juliento | 13:1736b906f227 | 152 | color.Draw(3, LCD_COLOR_ORANGE); |
juliento | 13:1736b906f227 | 153 | } |
juliento | 13:1736b906f227 | 154 | |
juliento | 13:1736b906f227 | 155 | if (red ==true) { |
juliento | 13:1736b906f227 | 156 | green = false; |
juliento | 13:1736b906f227 | 157 | blue = false; |
juliento | 13:1736b906f227 | 158 | gomme = false; |
juliento | 13:1736b906f227 | 159 | matrix.drawPixel((TS_State.touchX[0]/Xlength_case),(TS_State.touchY[0]/Ylength_case),matrix.Color333(7,0,0)); |
juliento | 13:1736b906f227 | 160 | |
juliento | 13:1736b906f227 | 161 | } else if (green ==true) { |
juliento | 13:1736b906f227 | 162 | red = false; |
juliento | 13:1736b906f227 | 163 | blue = false; |
juliento | 13:1736b906f227 | 164 | gomme = false; |
juliento | 13:1736b906f227 | 165 | matrix.drawPixel((TS_State.touchX[0]/Xlength_case),(TS_State.touchY[0]/Ylength_case),matrix.Color333(0,7,0)); |
juliento | 13:1736b906f227 | 166 | |
juliento | 13:1736b906f227 | 167 | } else if (blue ==true) { |
juliento | 13:1736b906f227 | 168 | green = false; |
juliento | 13:1736b906f227 | 169 | red = false; |
juliento | 13:1736b906f227 | 170 | gomme = false; |
juliento | 13:1736b906f227 | 171 | matrix.drawPixel((TS_State.touchX[0]/Xlength_case),(TS_State.touchY[0]/Ylength_case),matrix.Color333(0,0,7)); |
juliento | 13:1736b906f227 | 172 | } else if (gomme ==true) { |
juliento | 13:1736b906f227 | 173 | red = false; |
juliento | 13:1736b906f227 | 174 | green = false; |
juliento | 13:1736b906f227 | 175 | blue = false; |
juliento | 13:1736b906f227 | 176 | matrix.drawPixel((TS_State.touchX[0]/Xlength_case),(TS_State.touchY[0]/Ylength_case),matrix.Color333(0,0,0)); |
juliento | 13:1736b906f227 | 177 | } |
juliento | 13:1736b906f227 | 178 | |
juliento | 13:1736b906f227 | 179 | } else if ((reset == true)&&(!TS_State.touchDetected)&&(!cleared)) { |
juliento | 13:1736b906f227 | 180 | |
juliento | 13:1736b906f227 | 181 | //remise à zéro du LCD |
juliento | 13:1736b906f227 | 182 | cleared = 1; |
juliento | 13:1736b906f227 | 183 | reset = false; |
juliento | 13:1736b906f227 | 184 | |
juliento | 13:1736b906f227 | 185 | //remise à zéro de la matrix de LEDs |
juliento | 13:1736b906f227 | 186 | matrix.fillScreen(matrix.Color333(0, 0, 0)); |
MikamiUitOpen | 0:35af280527cf | 187 | } |
MikamiUitOpen | 0:35af280527cf | 188 | } |
juliento | 13:1736b906f227 | 189 | } |