Cynthia Wang / Mbed 2 deprecated ECE4180-FinalProject

Dependencies:   mbed-rtos mbed Servo Motor SoftPWM

Revision:
2:002f2def130e
Parent:
1:965e202877f7
Child:
3:9febeec1f271
--- a/main.cpp	Tue Nov 15 21:51:19 2022 +0000
+++ b/main.cpp	Tue Nov 15 22:46:55 2022 +0000
@@ -1,22 +1,141 @@
 #include "mbed.h"
 #include "rtos.h"
+#include "Serial.h"
 
-Thread thread1;
-Thread thread2;
+Serial blue(p28, p27);
+
 
- 
-void some_thread() {
+volatile float speed_left = 0;
+volatile float speed_right = 0;
+volatile float turret_delta = 0;
+volatile bool  fire = false;
 
 
+Mutex drive_mutex;
+Mutex turret_mutex;
+Mutex fire_mutex;
+
+Thread thread_drive;
+Thread thread_turret;
+Thread thread_fire;
+
+void input_loop();
+void set_speed(float l, float r);
+void set_turret_delta(float delta);
+void fire_cannon(bool f);
+ 
+void input_thread() {
+    
 }
 
-void other_thread() {
+void drive_thread() {
+ 
+}
 
+void turret_thread() {
+    
 }
+
+void fire_thread() {
+    
+}
+
  
 int main() {
     //test
     
-    thread1.start(some_thread);
-    thread2.start(other_thread);
+    //thread1.start(some_thread);
+    //thread2.start(other_thread);
+    thread_drive.start(drive_thread);
+    thread_turret.start(turret_thread);
+    thread_fire.start(fire_thread);
+    
+    input_loop();
 }
+
+void input_loop() {
+    char bnum=0;
+    char bhit=0;
+    while(1) {
+        if (blue.getc()=='!') {
+            if (blue.getc()=='B') { //button data packet
+                bnum = blue.getc(); //button number
+                bhit = blue.getc(); //1=hit, 0=release
+                if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
+                    switch(bnum) {
+                        case '1': //Turret Left Button
+                            if (bhit == '1') {
+                                set_turret_delta(-0.05);
+                            } else {
+                                set_turret_delta(0);
+                            }
+                            break;
+                        case '2': //Turret Right Button
+                            if (bhit == '1') {
+                                set_turret_delta(0.05);
+                            } else {
+                                set_turret_delta(0);
+                            }
+                            break;
+                        case '3': //Fire Button
+                            if (bhit == '1') {
+                                fire_cannon(true);
+                            } else {
+                                fire_cannon(false);
+                            }
+                            break;
+                        case '5': //button 5 up arrow
+                            if (bhit=='1') {
+                                set_speed(0.5, 0.5);
+                            } else {
+                                set_speed(0, 0);
+                            }
+                            break;
+                        case '6': //button 6 down arrow
+                            if (bhit=='1') {
+                                set_speed(-0.5, -0.5);
+                            } else {
+                                set_speed(0, 0);
+                            }
+                            break;
+                        case '7': //button 7 left arrow
+                            if (bhit=='1') {
+                                set_speed(-0.5, 0.5);
+                            } else {
+                                set_speed(0, 0);
+                            }
+                            break;
+                        case '8': //button 8 right arrow
+                            if (bhit=='1') {
+                                set_speed(0.5, -0.5);
+                            } else {
+                                set_speed(0, 0);
+                            }
+                            break;
+                        default:
+                            break;
+                    }
+                }
+            }
+        }
+    }
+}
+
+void set_speed(float left, float right) {
+    drive_mutex.lock();
+    speed_left = left;
+    speed_right = right;
+    drive_mutex.unlock();
+}
+
+void set_turret_delta(float delta) {
+    turret_mutex.lock();
+    turret_delta = delta;
+    turret_mutex.unlock();
+}
+
+void fire_cannon(bool f) {
+    fire_mutex.lock();
+    fire = f;
+    fire_mutex.unlock();
+}
\ No newline at end of file