Ardoise magique

Dependencies:   TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG BUTTON_GROUP RGB_matrix_Panel

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?

UserRevisionLine numberNew 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 }