Juggler Position Control Parsing

Dependencies:   MODSERIAL mbed Servo

Fork of juggler_mbed_position_control by Robert Katzschmann

Revision:
3:dcaf3c1e4ed6
Parent:
2:b4aef96e0cd7
Child:
4:a3720ed072d2
--- a/main.cpp	Sun Jan 15 03:14:29 2017 +0000
+++ b/main.cpp	Sun Jan 15 23:58:28 2017 +0000
@@ -6,6 +6,12 @@
 #include <math.h>
 
 #define NUM_FLOATS 10
+#define USHRT_MAX 65535
+
+#define USHRT_MIN 0
+#define POWER_OFF 32768
+#define BACKWARD_MAX 0
+#define FORWARD_MAX USHRT_MAX
 
 
 MODSERIAL pcSerial(USBTX, USBRX);
@@ -13,9 +19,15 @@
 // Initialize a pins t//o perform analog and digital output fucntions
 AnalogOut  aout(p18);
 PwmOut led1(LED1);
-// DigitalOut led2(LED2);
-//DigitalOut led3(LED3);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+
+PwmOut motorPwm(p26);
+AnalogOut motorAna(p18);
+DigitalOut motorEnable(p12);
 Ticker aTimer;
+AnalogIn potentiometer(p20);
+DigitalIn potentiometerEnable(p21);
 
 //Serial pc(USBTX, USBRX);
 float valueFloats[NUM_FLOATS];
@@ -33,51 +45,55 @@
 
 int main(void)
 {
+    led2 = 0;
+    led3 = 0;
+    motorEnable = 0; // turn off motor
+    motorAna.write_u16(POWER_OFF); // set motor pwm to zero
     
-    float fReceived = 0;
-    float fToSend = 0;
+    uint16_t motorCommandReceived = 0;
+    uint16_t motorCommand = motorCommandReceived;
+    uint16_t motorCommandToSend = 0;
     pcSerial.baud(115200);
     pcSerial.printf("Start!\n");
-    
-    /*
-    while(true) {
-        if(serialComm.checkIfNewMessage()) {
-            valueFloats[0] = serialComm.getFloat();//valueFloats, NUM_FLOATS);
-            led2 = !led2;
 
-            voltage = (abs(valueFloats[0]) > 3.3f) ? 3.3f : abs(valueFloats[0]);
-            aout = voltage / 3.3f;
-            // turn on the led if the voltage is greater than 0.5f * VCC
-            led1 = (aout > 0.5f) ? 1 : 0; // voltage larger than 0.5*3.3
-
-        }
-        wait(1.0f);
-    }*/
-    //int i = 0;
     readyToSendNext = false;
     //aTimer.attach(&timerFcn, 0.002); // the address of the function to be attached (flip) and the interval (2 seconds)
 
     while(1) {
-        if(serialComm.checkIfNewMessage()) 
-        {
-            fReceived = serialComm.getFloat();
+        
+        if(serialComm.checkIfNewMessage()) {
+            //fReceived = serialComm.getFloat();
+            motorCommandReceived = serialComm.getUnsignedShort();
+            led2 = potentiometerEnable;
+ 
+            if(potentiometerEnable) {
+                motorEnable = 1; //CHANGE TO 1
+                led3 = 1;
+            } else {
+                motorEnable = 0;
+                led3 = 0;
+                //motorAna.write_u16(POWER_OFF);
+            }
+            
+            motorCommand = potentiometer.read_u16();
+            led1 = potentiometer;
+            motorAna.write_u16(motorCommand);
+
+            //motorAna.write_u16(motorCommandReceived);
+            //motorAna.write_u16(USHRT_MAX);
+
             readyToSendNext = true;
         }
-//        
-        if(readyToSendNext == true)
-        {
-            fToSend = fReceived; // / 3.3f;
+        
+        if(readyToSendNext == true) {
+            motorCommandToSend = motorCommandReceived; // / 3.3f;
             //led1 = fToSend; // voltage larger than 0.5*3.3
-            
+
             //i++;
             // led1 = (ftemp > 0.5f) ? !led1 : 0; // voltage larger than 0.5*3.3
-            serialComm.sendFloat(fToSend); // write it back
-            readyToSendNext = false;    
+            serialComm.sendUnsignedShort(motorCommandToSend); // write it back
+            readyToSendNext = false;
         }
-        
-        // float testFloat = 0.1*i;
-        
-             
-        //wait(0.01f);
+
     }
 }
\ No newline at end of file