Touch sensor example for NXP Rapid IoT prototyping kit. Read more at https://www.hackster.io/marcomerli/riotwear-mbed-2b2011.
Diff: main.cpp
- Revision:
- 81:7a20aa99834e
- Parent:
- 80:0f41eaa54a9b
- Child:
- 82:a325ac3c1b73
--- a/main.cpp Mon Dec 02 19:04:59 2019 +0000 +++ b/main.cpp Thu Dec 19 17:07:35 2019 +0000 @@ -5,89 +5,38 @@ SX9500 touch(i2c0, PTA24, PTA9); // TOUCH_TXEN = PTA24, TOUCH_INT = PTA9 DigitalOut touch_rst(PTA2,1); // TOUCH_RST = PTA2 -// main() runs in its own thread in the OS -int main() { - - touch.reset(); - touch.set_active(true); - - wait(1); - - while (true) { -#if(1) - char CSn; - for(CSn = 0; CSn < 3; CSn++) { - touch.print_sensor(CSn); - wait(0.25); - } -#else - //////////////////////////////////////////////////////////////////////////////// - touch.RegProxCtrl0.octet = touch.read_single(SX9500_REG_PROXCTRL0); - touch.RegProxCtrl0.bits.sensor_en = 3; // CS0 and CS1 on - touch.write(SX9500_REG_PROXCTRL0, touch.RegProxCtrl0.octet); - touch.write(SX9500_REG_PROXCTRL6, 1); // threshold to 20 for CS1 release - touch.write(SX9500_REG_IRQMSK, 0x60); // enable near and far interrupts - touch.set_active(true); - printf("RegProxCtrl0:%02x\r\n", touch.read_single(SX9500_REG_PROXCTRL0)); // sensor-enable and scan period - wait(0.5); -#endif - } +void print_state(SX9500_TouchState_t ts) +{ + if(ts.downPressed) + printf("DOWN\r\n"); + if(ts.rightPressed) + printf("RIGHT\r\n"); + if(ts.upPressed) + printf("UP\r\n"); + if(ts.leftPressed) + printf("LEFT\r\n"); + if(!ts.downPressed && !ts.rightPressed && !ts.upPressed && !ts.leftPressed ) + printf("NONE\r\n"); } - /************************** sx9500... ************************************* - else if (pcbuf[0] == '9' && pcbuf[1] == '5') { - if (pcbuf[2] == '?') { - printf("95R reset\r\n"); - printf("95. read status\r\n"); - printf("95t[%%d] get/set PROXTHRESH\r\n"); - printf("95s[%%d] get/set SCANPERIOD\r\n"); - printf("95a toggle txen\r\n"); - } else if (pcbuf[2] == '.') { - printf("(txen) active:%d\r\n", sx9500.get_active()); - printf("RegStat:%02x\r\n", sx9500.read_single(SX9500_REG_STAT)); - printf("RegProxCtrl0:%02x\r\n", sx9500.read_single(SX9500_REG_PROXCTRL0)); - printf("RegProxCtrl1:%02x\r\n", sx9500.read_single(SX9500_REG_PROXCTRL1)); - printf("RegProxCtrl2:%02x\r\n", sx9500.read_single(SX9500_REG_PROXCTRL2)); - printf("RegProxCtrl3:%02x\r\n", sx9500.read_single(SX9500_REG_PROXCTRL3)); - printf("RegProxCtrl4:%02x\r\n", sx9500.read_single(SX9500_REG_PROXCTRL4)); - printf("RegProxCtrl5:%02x\r\n", sx9500.read_single(SX9500_REG_PROXCTRL5)); - printf("RegProxCtrl6:%02x\r\n", sx9500.read_single(SX9500_REG_PROXCTRL6)); - } else if (pcbuf[2] == 'a') { - if (sx9500.get_active()) { - sx9500.set_active(false); - } else { - sx9500.RegProxCtrl0.octet = sx9500.read_single(SX9500_REG_PROXCTRL0); - sx9500.RegProxCtrl0.bits.sensor_en = 3; // CS0 and CS1 on - sx9500.write(SX9500_REG_PROXCTRL0, sx9500.RegProxCtrl0.octet); - sx9500.write(SX9500_REG_PROXCTRL6, 1); // threshold to 20 for CS1 release - sx9500.write(SX9500_REG_IRQMSK, 0x60); // enable near and far interrupts - sx9500.set_active(true); - printf("RegProxCtrl0:%02x\r\n", sx9500.read_single(SX9500_REG_PROXCTRL0)); // sensor-enable and scan period - } - printf("(txen) active:%d\r\n", sx9500.get_active()); - } else if (pcbuf[2] == 'R') { - sx9500.reset(); - } else if (pcbuf[2] == 'i') { - if (pcbuf[3] != 0) { - sscanf(pcbuf+3, "%x", &i); - sx9500.write(SX9500_REG_IRQMSK, i); - } - printf("irqmsk:%02x\r\n", sx9500.read_single(SX9500_REG_IRQMSK)); - } else if (pcbuf[2] == 't') { - if (pcbuf[3] >= '0' && pcbuf[3] <= '9') { - sscanf(pcbuf+3, "%d", &i); - sx9500.write(SX9500_REG_PROXCTRL6, i); - } - printf("proxthresh:0x%x\r\n", sx9500.read_single(SX9500_REG_PROXCTRL6)); - } else if (pcbuf[2] == 'p') { - if (pcbuf[3] >= '0' && pcbuf[3] <= '9') { - sscanf(pcbuf+2, "%d", &i); - sx9500.RegProxCtrl0.bits.scan_period = i; - sx9500.write(SX9500_REG_PROXCTRL0, sx9500.RegProxCtrl0.octet); - } - sx9500.RegProxCtrl0.octet = sx9500.read_single(SX9500_REG_PROXCTRL0); - printf("scan period:%d\r\n", sx9500.RegProxCtrl0.bits.scan_period); - } - } - -*/ \ No newline at end of file +// main() runs in its own thread in the OS +int main() { + SX9500_TouchState_t ts; + + wait(1); + + touch.reset(); + wait(0.3); // wait until the reset has finished + touch.init(); + wait(0.3); + touch.set_active(true); + wait(0.3); + + while (true) { + + wait(0.3); + ts = touch.read_proximity_sensors(); + print_state(ts); + + } +}