Code Controlling Robot DC Motors and Crane Servos

Dependencies:   mbed Servo Motordriver

Files at this revision

API Documentation at this revision

Comitter:
ohodge3
Date:
Wed Apr 29 20:02:35 2020 +0000
Commit message:
Final Robot Code

Changed in this revision

Motordriver.lib Show annotated file Show diff for this revision Revisions of this file
Servo.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
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 316cfb89e9cd Motordriver.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Motordriver.lib	Wed Apr 29 20:02:35 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/littlexc/code/Motordriver/#3110b9209d3c
diff -r 000000000000 -r 316cfb89e9cd Servo.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Servo.lib	Wed Apr 29 20:02:35 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/simon/code/Servo/#36b69a7ced07
diff -r 000000000000 -r 316cfb89e9cd main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Apr 29 20:02:35 2020 +0000
@@ -0,0 +1,162 @@
+// full-speed reverse (-1.0)
+// full speed forwards (1.0)
+
+#include "mbed.h"
+#include "motordriver.h"
+#include "Servo.h"
+
+Motor left(p22, p12, p11, 1); // pwm, fwd, rev (Motor serialChar)
+Motor right(p21, p10, p9, 1); // pwm, fwd, rev (Motor B)
+Servo shoulder(p23);
+Servo elbow(p24);
+Servo wrist(p26);
+Servo wrist(p25);
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+
+//set up xbee
+Serial xbee(p13, p14);//TX not used
+Serial pc(USBTX, USBRX);
+DigitalOut rst(p7);
+
+//speed variables for motors
+volatile float speed1;
+volatile float speed2;
+
+void go(){
+    left.speed(speed1);
+    right.speed(speed2);    
+}
+
+int main() {
+    
+    // reset xbee (at least 200ns)
+    rst = 0;
+    wait_ms(1);
+    rst = 1;
+    wait_ms(1); 
+    
+    //initial speed is 0
+    speed1 = 0.0;
+    speed2 = 0.0;
+    
+    //variables to hold serial characters for xbee
+    char serialChar;
+    char prev;
+    
+    //varaibles for arm servos
+    volatile  float shoulderNum = 0.5;
+    volatile  float elbowNum = 0.10;
+    volatile  float wristNum = 0.0;
+    
+    //loop
+    while (1) {
+
+        if(xbee.readable()){
+            prev = serialChar;
+            serialChar = xbee.getc();
+            
+            
+            //left right rotation
+            if (prev == 'a' && serialChar < 60){
+                shoulderNum = shoulderNum +  0.01;
+                if (shoulderNum > 1)
+                    shoulderNum = 1;
+            shoulder = shoulderNum;
+            led1 = 1;
+            }
+            else if (prev == 'a' && serialChar > 110){
+                shoulderNum = shoulderNum - 0.01;
+                if (shoulderNum < 0)
+                    shoulderNum = 0;
+            shoulder = shoulderNum;
+            led2 = 1;
+            }
+            else{
+                shoulder = shoulderNum;
+            }
+            
+            
+            //up down rotation
+            if (prev == 'b' && serialChar < 60){
+                elbowNum = elbowNum +  0.01;
+                if (elbowNum > 1)
+                    elbowNum = 1;
+                elbow = elbowNum;
+                led1 = 1;
+            }
+            else if (prev == 'b' && serialChar > 110){
+                elbowNum = elbowNum - 0.01;
+                if (elbowNum < 0)
+                    elbowNum = 0;
+                elbow = elbowNum;
+                led2 = 1;
+            }
+            else{
+                elbow = elbowNum;
+            }
+            
+            //motor rotation
+            if (prev == 'c' && serialChar < 60){
+                speed1 = 1.0;
+                speed2 = -1.0;
+                go();
+            }
+            else if (prev == 'c' && serialChar > 110){
+                speed1 = -1;
+                speed2 = 1;
+                go();
+            }
+            else if (prev == 'c' && serialChar > 60 && serialChar < 110 && speed1 != speed2){
+                speed1 = 0;
+                speed2 = 0;
+                go();
+            }
+            
+            //motor forward and reverse
+            if (prev == 'd' && serialChar < 60){
+                speed1 = -1.0;
+                speed2 = -1.0;
+                go();
+            }
+            else if (prev == 'd' && serialChar > 110){
+                speed1 = 1;
+                speed2 = 1;
+                go();
+            }
+            else if (prev == 'd' && serialChar > 60 && serialChar < 110 && speed1 == speed2){
+                speed1 = 0;
+                speed2 = 0;
+                go();
+            }
+            
+            
+            
+            
+            //wrist controller
+            if (prev == 'e' && serialChar == 36){
+                wristNum = wristNum +  0.01;
+                if (wristNum > 1)
+                    wristNum = 1;
+                wrist = wristNum;
+                led1 = 1;
+            }
+            else if (prev == 'f' && serialChar == 36){
+                wristNum = wristNum - 0.01;
+                if (wristNum < 0)
+                    wristNum = 0;
+                wrist = wristNum;
+                led2 = 1;
+            }
+            else{
+                wrist = wristNum;
+            }
+            
+            //print to pc for debugging (Tera Term etc.)
+            pc.putc(serialChar);
+        }
+    }
+}
diff -r 000000000000 -r 316cfb89e9cd mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Apr 29 20:02:35 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file