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
main.cpp
- Committer:
- yjaafar3
- Date:
- 2022-11-15
- Revision:
- 3:9febeec1f271
- Parent:
- 2:002f2def130e
- Child:
- 5:e5bf798e0522
File content as of revision 3:9febeec1f271:
#include "mbed.h"
#include "rtos.h"
#include "Serial.h"
#include "Servo.h"
Serial blue(p28, p27);
Servo turret(p24);
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 drive_thread() {
}
void turret_thread() {
while (1) {
turret_mutex.lock();
if (turret + turret_delta < 0) {
turret = 1;
} else if (turret + turret_delta > 1){
turret = 0;
} else {
turret = turret + turret_delta;
}
turret_mutex.unlock();
Thread::wait(50);
}
}
void fire_thread() {
}
int main() {
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;
}
}
}
}
Thread::wait(50);
}
}
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();
}
