Telliskivi 2 2014

Dependencies:   DoubleCoilGun 4DGL-uLCD-SE ExternalIn HumanInterfaceT14 LedOut MCP3021 MODSERIAL Motor1Pwm1Dir PCA9555 PinDetect QED RgbLedPCA9555 WDT_K64F mbed-src

Fork of Telliskivi2plus by Reiko Randoja

Files at this revision

API Documentation at this revision

Comitter:
Reiko
Date:
Thu Sep 19 13:18:02 2013 +0000
Parent:
0:22a7683646d1
Child:
2:a3e6eceed838
Commit message:
Added new commands, stall detection code and HumanInterface library code

Changed in this revision

CoilGun.lib Show annotated file Show diff for this revision Revisions of this file
ExternalIn.lib Show annotated file Show diff for this revision Revisions of this file
HumanInterface.lib Show annotated file Show diff for this revision Revisions of this file
Motor2.lib Show annotated file Show diff for this revision Revisions of this file
PCA9555.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/CoilGun.lib	Wed Sep 18 07:50:53 2013 +0000
+++ b/CoilGun.lib	Thu Sep 19 13:18:02 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/Reiko/code/CoilGun/#0e2bdd3d52bc
+http://mbed.org/users/Reiko/code/CoilGun/#95d16e38d0d8
--- a/ExternalIn.lib	Wed Sep 18 07:50:53 2013 +0000
+++ b/ExternalIn.lib	Thu Sep 19 13:18:02 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/Reiko/code/ExternalIn/#7e487b9595e4
+http://mbed.org/users/Reiko/code/ExternalIn/#feaee10590b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HumanInterface.lib	Thu Sep 19 13:18:02 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Reiko/code/HumanInterface/#ccf47494061b
--- a/Motor2.lib	Wed Sep 18 07:50:53 2013 +0000
+++ b/Motor2.lib	Thu Sep 19 13:18:02 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/Reiko/code/Motor2/#fbd3fa0445e5
+http://mbed.org/users/Reiko/code/Motor2/#63a67086a1b5
--- a/PCA9555.lib	Wed Sep 18 07:50:53 2013 +0000
+++ b/PCA9555.lib	Thu Sep 19 13:18:02 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/Reiko/code/PCA9555/#0373a167d58b
+http://mbed.org/users/Reiko/code/PCA9555/#3b54389686ca
--- a/main.cpp	Wed Sep 18 07:50:53 2013 +0000
+++ b/main.cpp	Thu Sep 19 13:18:02 2013 +0000
@@ -10,6 +10,7 @@
 #include "ledout.h"
 #include "externalin.h"
 #include "coilgun.h"
+#include "HumanInterface.h"
 
 #define SERVER_PORT   8042
 
@@ -32,6 +33,16 @@
 
 volatile int update = 0;
 volatile int extInChanged = 0;
+volatile int ballChanged = 0;
+volatile int goalButtonReleased = 0;
+volatile int startButtonReleased = 0;
+volatile int stallChanged = 0;
+
+bool failSafeEnabled = true;
+int failSafeCount = 0;
+int failSafeLimit = 60;
+
+bool isCharged = false; //has charge been sent after discharge
 
 void executeCommand(short *cmd);
 void executeCommandOld(char *buffer);
@@ -53,20 +64,23 @@
     pc.printf("<comps:%i:%i:%i>\n", compassData[0], compassData[1], compassData[2]);
 }*/
 
-Motor motor1(p25, &ioExt, 0, 1, p5, p6);
-Motor motor2(p24, &ioExt, 2, 3, p7, p11);
-Motor motor3(p23, &ioExt, 4, 5, p12, p13);
-Motor motor4(p22, &ioExt, 6, 7, p14, p15);
-Motor motor5(p21, &ioExt, 9, 8, p16, p17);
+//motor order: FL, FR, RL, RR, DRIBBLER
+Motor motor4(p25, &ioExt, 0, 1, p5, p6); //RR - M1
+Motor motor2(p24, &ioExt, 2, 3, p7, p11); //FR - M2
+Motor motor5(p23, &ioExt, 4, 5, p12, p13); //DRIBBLER - M3
+Motor motor1(p22, &ioExt, 6, 7, p14, p15); //FL - M4
+Motor motor3(p21, &ioExt, 9, 8, p16, p17); //RL - M5
 
-LedOut redLed(&ioExt, 13);
-LedOut blueLed(&ioExt, 12);
-LedOut yellowLed(&ioExt, 11);
+//LedOut redLed(&ioExt, 13);
+//LedOut blueLed(&ioExt, 12);
+//LedOut yellowLed(&ioExt, 11);
 
-CoilGun coilgun(p19, p20, p18);
+Coilgun coilgun(p20, p19, p18);
 //CoilGun coilgun(LED3, LED4, p18);
 //Timeout kickFinish;
 
+HumanInterface humanInterface(&pc, &ioExt, 11, 12, 13, 14, 15, 10); 
+
 void updateTick() { 
     //led3 = 1;   
     motor1.pid();
@@ -82,9 +96,25 @@
     extInChanged = 1;
 }
 
-BallSens ballSens(&ioExt, 10);
-ExternalIn button1(&ioExt, 14);
-ExternalIn button2(&ioExt, 15);
+void ballChangedCallback() {
+    ballChanged = 1;
+}
+
+void goalRiseCallback() {
+    goalButtonReleased = 1;
+}
+
+void startRiseCallback() {
+    startButtonReleased = 1;
+}
+
+void stallChangedCallback() {
+    stallChanged = 1;
+}
+
+//BallSens ballSens(&ioExt, 10);
+//ExternalIn button1(&ioExt, 14);
+//ExternalIn button2(&ioExt, 15);
 
 UDPSocket server;
 Endpoint client;
@@ -187,16 +217,26 @@
     pc.printf("ioExt: %x\n", ioExt.read());
     //pc.printf("ioExt: %s\n", byte_to_binary(ioExt.read()));
     
-    ballSens.change(&extChangedCallback);
-    button1.change(&extChangedCallback);
-    button2.change(&extChangedCallback);
+    //ballSens.change(&extChangedCallback);
+    //button1.change(&extChangedCallback);
+    //button2.change(&extChangedCallback);
+    //humanInterface.change(&extChangedCallback);
+    humanInterface.ballChange(&ballChangedCallback);
+    humanInterface.goalRise(&goalRiseCallback);
+    humanInterface.startRise(&startRiseCallback);
+    
+    motor1.stallChange(&stallChangedCallback);
+    motor2.stallChange(&stallChangedCallback);
+    motor3.stallChange(&stallChangedCallback);
+    motor4.stallChange(&stallChangedCallback);
+    motor5.stallChange(&stallChangedCallback);
     
     //InterruptIn change(p8);
     //change.rise(&ballCallBack);
     //change.fall(&ballCallBack);
     
     
-    redLed.set();
+    //redLed.set();
     //blueLed.set();
     //yellowLed.set();
     
@@ -217,6 +257,24 @@
             ioExt.writePins();
             //coilgun.kick(100);
             
+            failSafeCount++;
+            if (failSafeCount == failSafeLimit) {
+                failSafeCount = 0;
+                if (failSafeEnabled) {
+                    motor1.setSpeed(0);
+                    motor2.setSpeed(0);
+                    motor3.setSpeed(0);
+                    motor4.setSpeed(0);
+                    motor5.setSpeed(0);
+                    coilgun.discharge();
+                    isCharged = false;
+                }  
+                if (!isCharged) {
+                    //int charCount = sprintf(sendBuffer, "<speeds:%d:%d:%d:%d:%d>");
+                    server.sendTo(client, "<discharged>", 12);
+                } 
+            }
+            
             //led3 = 1;
             //updateSensors();
             //pc.printf("update");                       
@@ -234,11 +292,23 @@
             led1 = !led1;
         }
         
-        if (extInChanged) {
-            extInChanged = 0;            
-            bool ballState = ballSens.read();
-            bool button1State = button1.read();
-            bool button2State = button2.read();
+        if (stallChanged) {
+            stallChanged = 0;
+            int charCount = sprintf(sendBuffer, "<stall:%d:%d:%d:%d:%d>\n",
+                motor1.getStallLevel(),
+                motor2.getStallLevel(),
+                motor3.getStallLevel(),
+                motor4.getStallLevel(),
+                motor5.getStallLevel());
+            server.sendTo(client, sendBuffer, charCount);
+        }
+        
+        /*if (extInChanged) {
+            extInChanged = 0;     
+            pc.printf("extChanged\n");   
+            //bool ballState = ballSens.read();
+            //bool button1State = button1.read();
+            //bool button2State = button2.read();
             if (button1State) {
                 led1 = 1;
             } else {
@@ -246,7 +316,23 @@
             }
             pc.printf("<ball:%d>\n", ballState ? 1 : 0);
             pc.printf("<btn1:%d>\n", button1State ? 1 : 0);
-            pc.printf("<btn2:%d>\n", button2State ? 1 : 0);            
+            pc.printf("<btn2:%d>\n", button2State ? 1 : 0);          
+        }*/
+        
+        if (ballChanged) {
+            ballChanged = 0;
+            int charCount = sprintf(sendBuffer, "<ball:%d>", humanInterface.getBallState());
+            server.sendTo(client, sendBuffer, charCount); 
+        }
+        
+        if (goalButtonReleased) {
+            goalButtonReleased = 0;
+            server.sendTo(client, "<toggle-side>", 13);
+        }
+        
+        if (startButtonReleased) {
+            startButtonReleased = 0;
+            server.sendTo(client, "<toggle-go>", 11);
         }
     
         //printf("\nWait for packet...\n");
@@ -304,47 +390,73 @@
         coilgun.kick(cmd[1]);
     } else if (cmd[0] == 4) {
         pc.printf("charge\n");
-        coilgun.setCharge(cmd[1]);
+        if (cmd[1] == 1) {
+            coilgun.charge();
+        } else {
+            coilgun.chargeEnd();
+        }
     }
 }
 
 void executeCommandOld(char *buffer) {
+    failSafeCount = 0;
+
     pc.printf("%s\n", buffer);    
     char *cmd;    
-    cmd = strtok(buffer, " ");
+    cmd = strtok(buffer, ":");
     
     //pc.printf("%s\n", cmd);  
     
     if (strncmp(cmd, "speeds", 6) == 0) {
-        motor1.setSpeed(atoi(strtok(NULL, " ")));
-        motor2.setSpeed(atoi(strtok(NULL, " ")));
-        motor3.setSpeed(atoi(strtok(NULL, " ")));
-        motor4.setSpeed(atoi(strtok(NULL, " ")));
-        motor5.setSpeed(atoi(strtok(NULL, " ")));
+        motor1.setSpeed(atoi(strtok(NULL, ":")));
+        motor2.setSpeed(atoi(strtok(NULL, ":")));
+        motor3.setSpeed(atoi(strtok(NULL, ":")));
+        motor4.setSpeed(atoi(strtok(NULL, ":")));
+        motor5.setSpeed(atoi(strtok(NULL, ":")));
+        int charCount = sprintf(sendBuffer, "<speeds:%d:%d:%d:%d:%d>",
+            motor1.getSpeed(), motor2.getSpeed(), motor3.getSpeed(), motor4.getSpeed(), motor5.getSpeed());
+        server.sendTo(client, sendBuffer, charCount);
     } else if (strncmp(cmd, "gs", 2) == 0) {
-        int charCount = sprintf(sendBuffer, "<speeds:%d:%d:%d:%d:%d>", motor1.getSpeed(), motor2.getSpeed(), motor3.getSpeed(), motor4.getSpeed(), motor5.getSpeed());
-        //pc.printf("%d\n", sizeof(sendBuffer));
-        //pc.printf("sendTo %s\n", client.get_address());
+        int charCount = sprintf(sendBuffer, "<speeds:%d:%d:%d:%d:%d>",
+            motor1.getSpeed(), motor2.getSpeed(), motor3.getSpeed(), motor4.getSpeed(), motor5.getSpeed());
         server.sendTo(client, sendBuffer, charCount);
         led2 = !led2;
+    } else if (strncmp(cmd, "kick", 4) == 0) {
+        pc.printf("kick\n");
+        coilgun.kick(atoi(strtok(NULL, ":")));
+    } else if (strncmp(cmd, "charge", 6) == 0) {
+        pc.printf("charge\n");
+        coilgun.charge();
+        isCharged = true;
+    } else if (strncmp(cmd, "discharge", 9) == 0) {
+        pc.printf("discharge\n");
+        coilgun.discharge();
+        isCharged = false;
     } else if (strncmp(cmd, "k", 1) == 0) {
         pc.printf("kick\n");
-        int length = atoi(strtok(NULL, " "));
+        int length = atoi(strtok(NULL, ":"));
         coilgun.kick(length);
-        //kickFinish.detach();
-        //kickFinish.attach_us(&coilgun, &CoilGun::kickEnd, length);
     } else if (strncmp(cmd, "c", 1) == 0) {
         pc.printf("charge\n");
-        coilgun.setCharge(atoi(strtok(NULL, " ")));
+        if (atoi(strtok(NULL, ":")) == 1) {
+            coilgun.charge();
+            isCharged = true;
+        } else {
+            coilgun.chargeEnd();
+        }
     } else if (strncmp(cmd, "d", 1) == 0) {
         pc.printf("discharge\n");
         coilgun.discharge();
-    } /*else if (strncmp(cmd, "t", 1) == 0) {
-        float newPWM = atof(strtok(NULL, " "));
-        motor1.setPWM(newPWM);
-        motor2.setPWM(newPWM);
-        motor3.setPWM(newPWM);
-        motor4.setPWM(newPWM);
-        motor5.setPWM(newPWM);
-    }*/
+        isCharged = false;
+    } else if (strncmp(cmd, "fs", 2) == 0) {
+        failSafeEnabled = (bool)atoi(strtok(NULL, ":"));
+    } else if (strncmp(cmd, "target", 6) == 0) {
+        if (atoi(strtok(NULL, ":")) == 1) {
+            humanInterface.setGoal(HumanInterface::YELLOW);
+        } else {
+            humanInterface.setGoal(HumanInterface::BLUE);
+        }
+    } else if (strncmp(cmd, "error", 5) == 0) {
+        humanInterface.setError(atoi(strtok(NULL, ":")));
+    }
 }
\ No newline at end of file