exemplo de acender led utilizando toque na tela e botão

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed

Committer:
felipinhom
Date:
Thu Sep 06 21:27:41 2018 +0000
Revision:
0:c6d1896596c0
primeiro programa: ativar led por bot?o e toque

Who changed what in which revision?

UserRevisionLine numberNew contents of line
felipinhom 0:c6d1896596c0 1 #include "mbed.h"
felipinhom 0:c6d1896596c0 2 #include "TS_DISCO_F746NG.h"
felipinhom 0:c6d1896596c0 3 #include "LCD_DISCO_F746NG.h"
felipinhom 0:c6d1896596c0 4
felipinhom 0:c6d1896596c0 5 //configura pino de interrupção para utilizar no botão da placa (botão azul)
felipinhom 0:c6d1896596c0 6 InterruptIn button(USER_BUTTON);
felipinhom 0:c6d1896596c0 7
felipinhom 0:c6d1896596c0 8 //configura um pino de saida (no caso o D0)
felipinhom 0:c6d1896596c0 9 DigitalOut led(D0);
felipinhom 0:c6d1896596c0 10
felipinhom 0:c6d1896596c0 11 LCD_DISCO_F746NG lcd; //objetod e controle do display lcd
felipinhom 0:c6d1896596c0 12 TS_DISCO_F746NG ts; //objeto de controle do TOUCH
felipinhom 0:c6d1896596c0 13
felipinhom 0:c6d1896596c0 14 //pressionou o botão
felipinhom 0:c6d1896596c0 15 void pressed()
felipinhom 0:c6d1896596c0 16 {
felipinhom 0:c6d1896596c0 17 led = 1; //ativa o led
felipinhom 0:c6d1896596c0 18 }
felipinhom 0:c6d1896596c0 19 //soltou o botão
felipinhom 0:c6d1896596c0 20 void released()
felipinhom 0:c6d1896596c0 21 {
felipinhom 0:c6d1896596c0 22 led = 0; //desativa o led
felipinhom 0:c6d1896596c0 23 }
felipinhom 0:c6d1896596c0 24
felipinhom 0:c6d1896596c0 25 int main()
felipinhom 0:c6d1896596c0 26 {
felipinhom 0:c6d1896596c0 27 // Assign functions to button
felipinhom 0:c6d1896596c0 28 button.fall(&released); //botão solto
felipinhom 0:c6d1896596c0 29 button.rise(&pressed); //botão pressionado
felipinhom 0:c6d1896596c0 30
felipinhom 0:c6d1896596c0 31 TS_StateTypeDef TS_State; //variavel de controle para identificar toque na tela
felipinhom 0:c6d1896596c0 32 uint16_t x, y;
felipinhom 0:c6d1896596c0 33 uint8_t status;
felipinhom 0:c6d1896596c0 34 status = ts.Init(lcd.GetXSize(), lcd.GetYSize()); //inicializa o TOUCH
felipinhom 0:c6d1896596c0 35
felipinhom 0:c6d1896596c0 36 //touch inicializado com sucesso
felipinhom 0:c6d1896596c0 37 if (status != TS_OK) {
felipinhom 0:c6d1896596c0 38 lcd.Clear(LCD_COLOR_RED);
felipinhom 0:c6d1896596c0 39 lcd.SetBackColor(LCD_COLOR_RED);
felipinhom 0:c6d1896596c0 40 lcd.SetTextColor(LCD_COLOR_WHITE);
felipinhom 0:c6d1896596c0 41 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
felipinhom 0:c6d1896596c0 42 } else { //touch com falha
felipinhom 0:c6d1896596c0 43 lcd.Clear(LCD_COLOR_GREEN);
felipinhom 0:c6d1896596c0 44 lcd.SetBackColor(LCD_COLOR_GREEN);
felipinhom 0:c6d1896596c0 45 lcd.SetTextColor(LCD_COLOR_WHITE);
felipinhom 0:c6d1896596c0 46 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
felipinhom 0:c6d1896596c0 47 }
felipinhom 0:c6d1896596c0 48
felipinhom 0:c6d1896596c0 49 wait(1);
felipinhom 0:c6d1896596c0 50 lcd.Clear(LCD_COLOR_BLUE);
felipinhom 0:c6d1896596c0 51 lcd.SetBackColor(LCD_COLOR_BLUE);
felipinhom 0:c6d1896596c0 52 lcd.SetTextColor(LCD_COLOR_WHITE);
felipinhom 0:c6d1896596c0 53 lcd.DrawCircle(230, 135, 40); //desenha o circulo na tela
felipinhom 0:c6d1896596c0 54
felipinhom 0:c6d1896596c0 55
felipinhom 0:c6d1896596c0 56 while (1) {
felipinhom 0:c6d1896596c0 57
felipinhom 0:c6d1896596c0 58 ts.GetState(&TS_State); //verifica toque na tela
felipinhom 0:c6d1896596c0 59 if (TS_State.touchDetected) { //houve toque
felipinhom 0:c6d1896596c0 60 x = TS_State.touchX[0];
felipinhom 0:c6d1896596c0 61 y = TS_State.touchY[0];
felipinhom 0:c6d1896596c0 62 double d = sqrt( pow(x - 230.0, 2.0) + pow(y - 135.0,2.0) ); //distancia entre o ponto tocado e o centro do circulo
felipinhom 0:c6d1896596c0 63 if(d <= 40) //toque dentro do circulo
felipinhom 0:c6d1896596c0 64 {
felipinhom 0:c6d1896596c0 65 status = 1; //controle que tocou no circulo
felipinhom 0:c6d1896596c0 66 lcd.FillCircle(230, 135, 40); //pinta o circulo de branco
felipinhom 0:c6d1896596c0 67 led = 1; //ativa o led
felipinhom 0:c6d1896596c0 68 }
felipinhom 0:c6d1896596c0 69 }
felipinhom 0:c6d1896596c0 70 else { //sem toque detectado
felipinhom 0:c6d1896596c0 71 if(status == 1) { //se anteriormente tocou no circulo
felipinhom 0:c6d1896596c0 72 lcd.Clear(LCD_COLOR_BLUE); //limpa a tela
felipinhom 0:c6d1896596c0 73 lcd.DrawCircle(230, 135, 40); //desenha o circulo
felipinhom 0:c6d1896596c0 74 status = 0; //controle que nao tocou no circulo
felipinhom 0:c6d1896596c0 75 led = 0; //desativa o led
felipinhom 0:c6d1896596c0 76 }
felipinhom 0:c6d1896596c0 77 }
felipinhom 0:c6d1896596c0 78
felipinhom 0:c6d1896596c0 79
felipinhom 0:c6d1896596c0 80 }
felipinhom 0:c6d1896596c0 81 }