From: Thomas Pietrzak Date: Thu, 30 Aug 2012 08:50:32 +0000 (+0000) Subject: Added support for sidekeys X-Git-Url: https://git.thomaspietrzak.com/?a=commitdiff_plain;h=4ccc2899c0c4cc6771a1b2d8d50f1bd01ab82f03;p=DynamicKeyboardLib.git Added support for sidekeys git-svn-id: svn+ssh://thomaspietrzak.com/var/svn/rep@92 47cf9a05-e0a8-4ed5-9e9b-101a649bc004 --- diff --git a/Arduino/dynamickeyboard/dynamickeyboard.ino b/Arduino/dynamickeyboard/dynamickeyboard.ino index 276149d..7dcf20f 100644 --- a/Arduino/dynamickeyboard/dynamickeyboard.ino +++ b/Arduino/dynamickeyboard/dynamickeyboard.ino @@ -10,6 +10,12 @@ byte maxDutyCycle = 255; byte minDutyCycle = 200; word boostDuration = 150; +//TODO: manage any number of keys +byte keySides1[4]; +byte keySides2[4]; +int keyPins1[4]; +int keyPins2[4]; + byte command = 0; void sendInformation() @@ -45,6 +51,22 @@ void setup() pinMode(strobePin, OUTPUT); pinMode(pwmPin, OUTPUT); SPI.begin(); + + keyPins1[0] = A0; + keyPins1[1] = A1; + keyPins1[2] = A2; + keyPins1[3] = A3; + keyPins2[0] = A4; + keyPins2[1] = A5; + keyPins2[2] = A6; + keyPins2[3] = A7; + + for (int i = 0 ; i < 4 ; i++) + { + keySides1[i] = 0; + keySides2[i] = 0; + } + /* pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); @@ -57,6 +79,62 @@ void setup() analogWrite(pwmPin, minDutyCycle); } +/* + Event protocol: + FkTRBL + F: event type (force) + k: key ID + T: force on the top + R: force on the right + B: force on the bottom + L: force on the left +*/ +//TODO: manage any number of keys +void checkEvents() +{ + boolean newevent = false; + + //check key1 + for (int i = 0 ; i < 4 ; i++) + { + byte b = analogRead(keyPins1[i]); + //check if the state has changed + if ((keySides1[i] == 0 && b > 0) || (keySides1[i] > 0 && b == 0)) + { + keySides1[i] = b; + newevent = true; + } + } + if (newevent) + { + Serial.write("F"); + Serial.write(1); + for (int i = 0 ; i < 4 ; i++) + Serial.print(keySides1[i]); + newevent = false; + } + + //check key2 + for (int i = 0 ; i < 4 ; i++) + { + byte b = analogRead(keyPins2[i]); + //check if the state has changed + if ((keySides2[i] == 0 && b > 0) || (keySides2[i] > 0 && b == 0)) + { + keySides2[i] = b; + newevent = true; + } + } + if (newevent) + { + Serial.write("F"); + Serial.write(2); + for (int i = 0 ; i < 4 ; i++) + Serial.print(keySides2[i]); + newevent = false; + } +} + /* Protocol: cXYZ... where c is a character (byte) representing the command @@ -83,7 +161,7 @@ void setup() be used too often I send information (parameters) */ -void loop() +void readCommands() { if (Serial.available() == 0) return; @@ -152,4 +230,9 @@ void loop() break; } } - + +void loop() +{ + checkEvents(); + readCommands(); +}