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()
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);
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
be used too often
I send information (parameters)
*/
-void loop()
+void readCommands()
{
if (Serial.available() == 0)
return;
break;
}
}
-\r
+
+void loop()
+{
+ checkEvents();
+ readCommands();
+}\r