Merge "rename package path" into gingerbread
diff --git a/demokit/demokit.pde b/demokit/demokit.pde
index 5a4d29a..6f70e4c 100644
--- a/demokit/demokit.pde
+++ b/demokit/demokit.pde
@@ -5,6 +5,8 @@
 #include <Usb.h>
 #include <AndroidAccessory.h>
 
+#include <CapSense.h>
+
 #define  LED3_RED       2
 #define  LED3_GREEN     4
 #define  LED3_BLUE      3
@@ -21,7 +23,8 @@
 #define  SERVO2         12
 #define  SERVO3         13
 
-#define  TOUCH          14
+#define  TOUCH_RECV     14
+#define  TOUCH_SEND     15
 
 #define  RELAY1         A0
 #define  RELAY2         A1
@@ -45,6 +48,8 @@
 		     "0000000012345678");
 Servo servos[3];
 
+CapSense   touch_robot = CapSense(TOUCH_SEND, TOUCH_RECV);        // 10M ohm resistor on demo shield
+
 void setup();
 void loop();
 
@@ -53,10 +58,12 @@
 	pinMode( BUTTON1, INPUT );
 	pinMode( BUTTON2, INPUT );
 	pinMode( BUTTON3, INPUT );
+	pinMode( JOY_SWITCH, INPUT );
 
 	digitalWrite( BUTTON1, HIGH );  // enable the internal pullups
 	digitalWrite( BUTTON2, HIGH );
 	digitalWrite( BUTTON3, HIGH );
+	digitalWrite( JOY_SWITCH, HIGH );
 }
 
 
@@ -96,7 +103,7 @@
 
 void init_joystick( int threshold );
 
-byte b1, b2, b3, c;
+byte b1, b2, b3, b4, c;
 void setup()
 {
 	Serial.begin( 115200 );
@@ -107,6 +114,7 @@
 	init_buttons();
 	init_joystick( 5 );      // initialize with thresholding enabled, dead zone of 5 units  
 
+	touch_robot.set_CS_AutocaL_Millis(0xFFFFFFFF);    // autocalibrate OFF
 
 	servos[0].attach(SERVO1);
 	servos[0].write(90);
@@ -119,7 +127,8 @@
 	b1 = digitalRead(BUTTON1);
 	b2 = digitalRead(BUTTON2);
 	b3 = digitalRead(BUTTON3);
-	c = captouched();
+	b4 = digitalRead(JOY_SWITCH);
+	c = 0;
 
 	acc.powerOn();
 }
@@ -130,6 +139,7 @@
 	byte idle;
 	static byte count = 0;
 	byte msg[3];
+	long touchcount;
 
 	if (acc.isConnected()) {
 		int len = acc.read(msg, sizeof(msg), 1);
@@ -207,6 +217,14 @@
 			b3 = b;
 		}
 
+		b = digitalRead(JOY_SWITCH);
+		if (b != b4) {
+			msg[1] = 4;
+			msg[2] = b ? 0 : 1;
+			acc.write(msg, 3);
+			b4 = b;
+		}
+
 		switch (count++ % 0x10) {
 
 		case 0:
@@ -233,19 +251,21 @@
 			acc.write(msg, 3);
 			break;
 
-#if 0
 			/* captoutched needs to be asynchonous */
 		case 0xc:
-			c0 = captouched();
+			touchcount = touch_robot.capSense(5);
+
+			c0 = touchcount > 750;
+
 			if (c0 != c) {
 				msg[0] = 0x1;
 				msg[1] = 3;
-				msg[2] = c0 ? 0 : 1;
+				msg[2] = c0;
 				acc.write(msg, 3);
 				c = c0;
 			}
+
 			break;
-#endif
 		}
 	}
 
@@ -376,30 +396,3 @@
   Wire.send( val );
   Wire.endTransmission();  
 }
-
-/* Capacitive touch technique from Mario Becker, Fraunhofer IGD, 2007 http://www.igd.fhg.de/igd-a4 */
-
-char captouched() 
-{
-  char iii, jjj, retval;
-  
-  retval = 0;
-  
-  for( jjj = 0; jjj != 10; jjj++ ) {
-    delay( 10 );
-  
-    pinMode( TOUCH, INPUT );
-    digitalWrite( TOUCH, HIGH );
-  
-    for ( iii = 0; iii <  16; iii++ )
-      if( digitalRead( TOUCH ) )
-        break;
-      
-    digitalWrite( TOUCH, LOW );
-    pinMode( TOUCH, OUTPUT );
-  
-    retval += iii;
-  }
-  
-  return retval;
-}