Touch sensor example for NXP Rapid IoT prototyping kit. Read more at https://www.hackster.io/marcomerli/riotwear-mbed-2b2011.
main.cpp@82:a325ac3c1b73, 2019-12-27 (annotated)
- 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?
User | Revision | Line number | New 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 | } |