Touch sensor example for NXP Rapid IoT prototyping kit. Read more at https://www.hackster.io/marcomerli/riotwear-mbed-2b2011.
Diff: main.cpp
- Revision:
- 80:0f41eaa54a9b
- Parent:
- 79:0431b9fd3dc0
- Child:
- 81:7a20aa99834e
diff -r 0431b9fd3dc0 -r 0f41eaa54a9b main.cpp --- a/main.cpp Sat Nov 23 18:03:20 2019 +0000 +++ b/main.cpp Mon Dec 02 19:04:59 2019 +0000 @@ -1,32 +1,93 @@ #include "mbed.h" - -DigitalOut rgb_red(LED_RED, 1); // LED1 = LED_RED, 1 --> OFF, 0 --> ON -DigitalOut rgb_blue(LED_BLUE, 1); // LED3 = LED_BLUE, 1 --> OFF, 0 --> ON -DigitalOut rgb_green(PTE7,1); // 1 --> OFF, 0 --> ON - -void rgb_sel(int8_t idx) { +#include "sx9500.h" -switch(idx) { - case 0: - rgb_red = 0; rgb_blue=1; rgb_green = 1; - break; - case 1: - rgb_red = 1; rgb_blue=0; rgb_green = 1; - break; - case 2: - rgb_red = 1; rgb_blue=1; rgb_green = 0; - break; - } - -} +I2C i2c0(I2C_SDA , I2C_SCL ); // I2C_SCL = PTC10, I2C_SDA = PTC11, +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() { - int idx; - while (true) { - for(idx=0;idx<3;idx++) { - rgb_sel(idx); + + 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 } -} \ No newline at end of file +} + + /************************** 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