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

Dependencies:   lib_sx9500

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);
+            
+    }
+}