ECE3872 HW/SW Project Code

Dependencies:   mbed Servo mbed-rtos 4DGL-uLCD-SE PinDetect X_NUCLEO_53L0A1

Revision:
16:62976c3c029e
Child:
18:0e0edd4f9e4d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/motor_ctl.h	Mon Apr 13 02:16:45 2020 +0000
@@ -0,0 +1,81 @@
+// Move servos in playback mode
+
+#include "mbed.h"
+#include "Servo.h"
+//#include "rtos.h"
+
+Servo r_arm(p24);
+Servo l_arm(p23);
+Servo r_leg(p22);
+Servo l_leg(p21);
+
+Thread t_r_arm;
+Thread t_l_arm;
+Thread t_r_leg;
+Thread t_l_leg;
+
+DigitalOut led(LED4); 
+
+//left sensor move whole left side
+//right sensor moves whole right side //not gonna think about this right now. Dicuss ideas with team. 
+//and then the distance can just control the height
+//movement pattern can be random.. right now every other note recorded will be distributed to one side and the rest will go to the other
+
+unsigned char move_map {0x149, 0x14A, 0x14C, 0x151, 0x152, 0x154, 0x291, 0x292, 0x294, 0x2A1, 0x2A2, 0x2A4};
+unsigned char ra_mask = 0x0C0;
+unsigned char la_mask = 0x300;
+unsigned char rl_mask = 0x03C;
+unsigned char ll_mask = 0x007; 
+
+//for testing run through move map
+
+void ra_dance(unsigned char move) {    
+    if (move & ra_mask == 0x040){
+        r_arm.write(.50);
+    } else {
+        r_arm.write(.25);
+    }
+    
+}
+
+void la_dance() {    
+     if (move & ra_mask == 0x100){
+        l_arm.write(.50);
+    } else {
+        l_arm.write(.25);
+    }
+    
+}
+
+void rl_dance() {    
+    r_leg = 0; 
+    wait(1);
+    for(float p=0; p<1.0; p += 0.1) {
+        r_leg = p;
+        wait(0.2);
+    }
+    r_leg.write(.50);
+    
+}
+
+void ll_dance() {    
+    l_leg = 0; 
+    wait(1);
+    for(float p=0; p<1.0; p += 0.1) {
+        l_leg = p;
+        wait(0.2);
+    }
+    l_leg.write(.50);
+    
+}
+
+
+void move_motors(){
+    for (int i = 0; i < 12; ++i){
+        ra_dance(move_map[i]);
+        la_dance(move_map[i]);
+        wait(0.2); 
+    }
+}
+
+