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

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed

main.cpp

Committer:
felipinhom
Date:
2018-09-06
Revision:
0:c6d1896596c0

File content as of revision 0:c6d1896596c0:

#include "mbed.h"
#include "TS_DISCO_F746NG.h"
#include "LCD_DISCO_F746NG.h"

//configura pino de interrupção para utilizar no botão da placa (botão azul)
InterruptIn button(USER_BUTTON);

//configura um pino de saida (no caso o D0)
DigitalOut led(D0);

LCD_DISCO_F746NG lcd; //objetod e controle do display lcd
TS_DISCO_F746NG ts; //objeto de controle do TOUCH

//pressionou o botão
void pressed()
{
    led = 1; //ativa o led
}
//soltou o botão
void released()
{
    led = 0; //desativa o led
}

int main()
{
    // Assign functions to button
    button.fall(&released); //botão solto
    button.rise(&pressed); //botão pressionado
    
    TS_StateTypeDef TS_State; //variavel de controle para identificar toque na tela
    uint16_t x, y; 
    uint8_t status; 
    status = ts.Init(lcd.GetXSize(), lcd.GetYSize()); //inicializa o TOUCH
    
    //touch inicializado com sucesso
    if (status != TS_OK) {
        lcd.Clear(LCD_COLOR_RED);
        lcd.SetBackColor(LCD_COLOR_RED);
        lcd.SetTextColor(LCD_COLOR_WHITE);
        lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
    } else { //touch com falha
        lcd.Clear(LCD_COLOR_GREEN);
        lcd.SetBackColor(LCD_COLOR_GREEN);
        lcd.SetTextColor(LCD_COLOR_WHITE);
        lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
    }
    
    wait(1);
    lcd.Clear(LCD_COLOR_BLUE);
    lcd.SetBackColor(LCD_COLOR_BLUE);
    lcd.SetTextColor(LCD_COLOR_WHITE);
    lcd.DrawCircle(230, 135, 40); //desenha o circulo na tela
    
    
    while (1) {
        
        ts.GetState(&TS_State); //verifica toque na tela
        if (TS_State.touchDetected) {   //houve toque
                x = TS_State.touchX[0];
                y = TS_State.touchY[0];  
                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
                if(d <= 40) //toque dentro do circulo
                {
                    status = 1; //controle que tocou no circulo
                    lcd.FillCircle(230, 135, 40); //pinta o circulo de branco
                    led = 1; //ativa o led
                }
        }
        else { //sem toque detectado
            if(status == 1) { //se anteriormente tocou no circulo
                lcd.Clear(LCD_COLOR_BLUE); //limpa a tela 
                lcd.DrawCircle(230, 135, 40); //desenha o circulo
                status = 0; //controle que nao tocou no circulo
                led = 0; //desativa o led
            }
        }

            
    }
}