From 57d470de8d6d3fd45499860944cdb4bdd36d7f97 Mon Sep 17 00:00:00 2001 From: Agis Zisimatos Date: Mon, 26 Oct 2015 13:23:25 +0200 Subject: [PATCH] Add firmware for emg interface. --- Software/Arduino/EMG/EMG.ino | 94 ++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 Software/Arduino/EMG/EMG.ino diff --git a/Software/Arduino/EMG/EMG.ino b/Software/Arduino/EMG/EMG.ino new file mode 100644 index 0000000..9352a49 --- /dev/null +++ b/Software/Arduino/EMG/EMG.ino @@ -0,0 +1,94 @@ +#include "Arduino.h" + +#define EMGPin0 0 +#define EMGPin1 0 +#define MaxSignal 1023 +#define MinSignal 0 +#define MaxVolt 5 /* in V */ +#define MinVolt 0 +#define BaudRate 115200 +#define BufferSize 256 + +void setup(); +void loop(); +void GetRawEMG(); +double signal2deg(int Signal); + +void setup() +{ + /* Initialize serial communication */ + Serial.begin(BaudRate); +} + +void loop() +{ + char Buffer[BufferSize]; + char IncomingByte; + char *Data = Buffer; + static int BufferCnt = 0; + + while (Serial.available() > 0) + { + IncomingByte = Serial.read(); + /* New data */ + if (IncomingByte == '\n') + { + Buffer[BufferCnt]=0; + /* Get State of Potentiometer */ + if ((Buffer[0] == 'g' && Buffer[1] == 's') || (Buffer[0] == 'G' && Buffer[1] == 'S')) + { + strncpy(Data, Buffer+2, 100); + if (*Data == 0) + { + GetRawEMG(); + } + else + { + /* Wrong Command return -1 */ + Serial.print("-1"); + Serial.print("\n"); + } + /* Reset Buffer Counter */ + BufferCnt = 0; + } + else + { + /* Reset Buffer Counter */ + BufferCnt = 0; + /* Wrong Command return -1 */ + Serial.print("-1"); + Serial.print("\n"); + } + } + else + { + /* Fill the buffer with incoming data */ + Buffer[BufferCnt] = IncomingByte; + BufferCnt ++; + } + } +} + +/* Read analog inputs */ +void GetRawEMG() +{ + /* If you use 2 EMGs uncomment the code */ + static int EMGValue0 = 0; + /* static int EMGValue1 = 0; */ + + EMGValue0 = analogRead(EMGPin0); + /* EMGValue1 = analogRead(EMGPin1); */ + /* Send slider values to host PC */ + Serial.print("0"); + Serial.print(";"); + Serial.print(signal2deg(EMGValue0)); + /* Serial.print(";"); */ + /* Serial.print(signal2deg(EMGValue1)); */ + Serial.print("\n"); +} + +/* Convert signal to degrees */ +double signal2deg(int Signal) +{ + return ((double)Signal*MaxVolt/(double)MaxSignal); /* in V */ +}