Here is the code for the arm so far
/*
Name: AugmentArm.ino
Created: 1/2/2019 8:02:26 PM
Author: diego
/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <VarSpeedServo.h>
#include <gForceAdapterC.h>
#define Timeout 1000
SoftwareSerial gforceSerial(2, 4);
/ returns char count */
int getChar(unsigned char *data)
{
int ret = gforceSerial.read();
if (ret == -1)
return 0;
data = (unsigned char)ret;
return 1;
}
/ returns System time */
unsigned long int getMillis(void)
{
return millis();
}
VarSpeedServo PinkyServo;
VarSpeedServo RingServo;
VarSpeedServo MiddleServo;
VarSpeedServo IndexServo;
VarSpeedServo ThumbServo;
int gesture = 0;
int open = 180;
int closed = 0;
int fast = 240;
int slow = 45;
// the setup function runs once when you press reset or power the board
void setup() {
Serial.begin(115200);
gforceSerial.begin(115200);
}
// the loop function runs over and over again until power down or reset
void loop() {
PinkyServo.attach(10);
RingServo.attach(9);
MiddleServo.attach(6);
IndexServo.attach(5);
ThumbServo.attach(3);
struct GF_Data gForceData;
struct GF_Euler Euler;
if (OK == GFC_GetgForcedata((&gForceData), Timeout)) {
GF_Gesture gesture;
}
switch (gForceData.type) {
case GF_Data::QUATERNION:
GFC_QuaternionToEuler(&(gForceData.value.quaternion), &Euler);
break;
case GF_Data::GESTURE:
gesture = gForceData.value.gesture;
if (gesture == GF_FIST) {
PinkyServo.write(closed, slow);
RingServo.write(closed, slow);
MiddleServo.write(closed, slow);
IndexServo.write(closed, slow);
ThumbServo.write(closed, slow);
Serial.print("Fist Shape");
}
else if (gesture == GF_SPREAD) {
PinkyServo.write(open, slow);
RingServo.write(open, slow);
MiddleServo.write(open, slow);
IndexServo.write(open, slow);
ThumbServo.write(open, slow);
Serial.print("Spread Shape");
}
else if (gesture == GF_WAVEIN) {
PinkyServo.write(closed, fast);
RingServo.write(closed, fast);
MiddleServo.write(closed, fast);
IndexServo.write(closed, fast);
ThumbServo.write(closed, fast);
Serial.print("Wave In Shape");
}
else if (gesture == GF_WAVEOUT) {
PinkyServo.write(open, fast);
RingServo.write(open, fast);
MiddleServo.write(open, fast);
IndexServo.write(open, fast);
ThumbServo.write(open, fast);
Serial.print("Wave Out Shape");
}
else if (gesture == GF_PINCH) {
PinkyServo.write(open, slow);
RingServo.write(open, slow);
MiddleServo.write(open, slow);
IndexServo.write(closed, slow);
ThumbServo.write(closed, slow);
Serial.print("Pinch Shape");
}
else if (gesture == GF_SHOOT) {
PinkyServo.write(closed, slow);
RingServo.write(closed, slow);
MiddleServo.write(closed, slow);
IndexServo.write(open, slow);
ThumbServo.write(open, slow);
Serial.print("Shoot Shape");
}
else if (gesture == GF_RELEASE) {
PinkyServo.write(open, fast);
RingServo.write(open, fast);
MiddleServo.write(open, fast);
IndexServo.write(open, fast);
ThumbServo.write(open, fast);
Serial.print("Release Shape");
}
}
}