Touch sensor example for NXP Rapid IoT prototyping kit. Read more at https://www.hackster.io/marcomerli/riotwear-mbed-2b2011.

Dependencies:   lib_sx9500

Committer:
batman52
Date:
Fri Dec 27 15:17:32 2019 +0000
Revision:
82:a325ac3c1b73
Parent:
81:7a20aa99834e
now supports IRQ instead of polling

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jonathan Austin 0:2757d7abb7d9 1 #include "mbed.h"
batman52 80:0f41eaa54a9b 2 #include "sx9500.h"
batman52 79:0431b9fd3dc0 3
batman52 82:a325ac3c1b73 4 #define IRQ_EN 1
batman52 82:a325ac3c1b73 5
batman52 80:0f41eaa54a9b 6 I2C i2c0(I2C_SDA , I2C_SCL ); // I2C_SCL = PTC10, I2C_SDA = PTC11,
batman52 80:0f41eaa54a9b 7 SX9500 touch(i2c0, PTA24, PTA9); // TOUCH_TXEN = PTA24, TOUCH_INT = PTA9
batman52 80:0f41eaa54a9b 8 DigitalOut touch_rst(PTA2,1); // TOUCH_RST = PTA2
Jonathan Austin 0:2757d7abb7d9 9
batman52 82:a325ac3c1b73 10 bool read_en = true;
batman52 82:a325ac3c1b73 11
batman52 82:a325ac3c1b73 12 #if(IRQ_EN)
batman52 82:a325ac3c1b73 13 // InterruptIn SW1(PTE28);
batman52 82:a325ac3c1b73 14 InterruptIn touch_int(PTA9);
batman52 82:a325ac3c1b73 15 /* LEDS */
batman52 82:a325ac3c1b73 16 DigitalOut led_red(LED_RED, 1);
batman52 82:a325ac3c1b73 17
batman52 82:a325ac3c1b73 18 void touch_irq()
batman52 82:a325ac3c1b73 19 {
batman52 82:a325ac3c1b73 20 read_en = true;
batman52 82:a325ac3c1b73 21 led_red = !led_red;
batman52 82:a325ac3c1b73 22 }
batman52 82:a325ac3c1b73 23 #endif // IRQ_EN
batman52 82:a325ac3c1b73 24
batman52 81:7a20aa99834e 25 void print_state(SX9500_TouchState_t ts)
batman52 81:7a20aa99834e 26 {
batman52 81:7a20aa99834e 27 if(ts.downPressed)
batman52 81:7a20aa99834e 28 printf("DOWN\r\n");
batman52 81:7a20aa99834e 29 if(ts.rightPressed)
batman52 81:7a20aa99834e 30 printf("RIGHT\r\n");
batman52 81:7a20aa99834e 31 if(ts.upPressed)
batman52 81:7a20aa99834e 32 printf("UP\r\n");
batman52 81:7a20aa99834e 33 if(ts.leftPressed)
batman52 81:7a20aa99834e 34 printf("LEFT\r\n");
batman52 81:7a20aa99834e 35 if(!ts.downPressed && !ts.rightPressed && !ts.upPressed && !ts.leftPressed )
batman52 81:7a20aa99834e 36 printf("NONE\r\n");
batman52 80:0f41eaa54a9b 37 }
batman52 80:0f41eaa54a9b 38
batman52 82:a325ac3c1b73 39 void touch_service()
batman52 82:a325ac3c1b73 40 {
batman52 82:a325ac3c1b73 41 SX9500_TouchState_t ts;
batman52 82:a325ac3c1b73 42 read_en = false;
batman52 82:a325ac3c1b73 43 ts = touch.read_proximity_sensors();
batman52 82:a325ac3c1b73 44 print_state(ts);
batman52 82:a325ac3c1b73 45 // reset interrupt state
batman52 82:a325ac3c1b73 46 touch.service();
batman52 82:a325ac3c1b73 47 }
batman52 82:a325ac3c1b73 48
batman52 81:7a20aa99834e 49 // main() runs in its own thread in the OS
batman52 81:7a20aa99834e 50 int main() {
batman52 82:a325ac3c1b73 51
batman52 82:a325ac3c1b73 52 wait(1);
batman52 81:7a20aa99834e 53 touch.reset();
batman52 81:7a20aa99834e 54 wait(0.3); // wait until the reset has finished
batman52 81:7a20aa99834e 55 touch.init();
batman52 81:7a20aa99834e 56 wait(0.3);
batman52 81:7a20aa99834e 57 touch.set_active(true);
batman52 81:7a20aa99834e 58 wait(0.3);
batman52 82:a325ac3c1b73 59
batman52 82:a325ac3c1b73 60 #if(IRQ_EN)
batman52 82:a325ac3c1b73 61 touch_int.fall(&touch_irq);
batman52 82:a325ac3c1b73 62 // SW1.fall(&touch_irq);
batman52 82:a325ac3c1b73 63 read_en = false;
batman52 82:a325ac3c1b73 64 #endif
batman52 82:a325ac3c1b73 65
batman52 81:7a20aa99834e 66 while (true) {
batman52 82:a325ac3c1b73 67 #if(!IRQ_EN)
batman52 82:a325ac3c1b73 68 read_en = true;
batman52 82:a325ac3c1b73 69 #endif
batman52 81:7a20aa99834e 70 wait(0.3);
batman52 82:a325ac3c1b73 71 if(read_en)
batman52 82:a325ac3c1b73 72 touch_service();
batman52 81:7a20aa99834e 73 }
batman52 81:7a20aa99834e 74 }