exemplo de acender led utilizando toque na tela e botão
Dependencies: BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed
main.cpp@0:c6d1896596c0, 2018-09-06 (annotated)
- 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?
User | Revision | Line number | New 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 | } |