Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed-rtos mbed Servo Motor SoftPWM
Diff: main.cpp
- 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
