Cynthia Wang / Mbed 2 deprecated ECE4180-FinalProject

Dependencies:   mbed-rtos mbed Servo Motor SoftPWM

Committer:
bzhu792
Date:
Wed Nov 16 00:12:04 2022 +0000
Revision:
5:e5bf798e0522
Parent:
3:9febeec1f271
Child:
7:f65ab31f81e7
Wheel works but not turret at the same time

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cwang776 0:16c007acb3a2 1 #include "mbed.h"
cwang776 0:16c007acb3a2 2 #include "rtos.h"
yjaafar3 2:002f2def130e 3 #include "Serial.h"
yjaafar3 3:9febeec1f271 4 #include "Servo.h"
bzhu792 5:e5bf798e0522 5 #include "Motor.h"
cwang776 0:16c007acb3a2 6
bzhu792 5:e5bf798e0522 7 RawSerial blue(p9, p10);
bzhu792 5:e5bf798e0522 8 Serial pc(USBTX, USBRX);
bzhu792 5:e5bf798e0522 9 PwmOut servo(p24);
bzhu792 5:e5bf798e0522 10 Motor left_motor(p23, p15, p16); // pwm, fwd, rev
bzhu792 5:e5bf798e0522 11 Motor right_motor(p22, p17, p18); // pwm, fwd, rev
cwang776 0:16c007acb3a2 12
yjaafar3 2:002f2def130e 13 volatile float speed_left = 0;
yjaafar3 2:002f2def130e 14 volatile float speed_right = 0;
yjaafar3 2:002f2def130e 15 volatile float turret_delta = 0;
yjaafar3 2:002f2def130e 16 volatile bool fire = false;
cwang776 0:16c007acb3a2 17
cwang776 0:16c007acb3a2 18
yjaafar3 2:002f2def130e 19 Thread thread_drive;
yjaafar3 2:002f2def130e 20 Thread thread_turret;
yjaafar3 2:002f2def130e 21 Thread thread_fire;
yjaafar3 2:002f2def130e 22
yjaafar3 2:002f2def130e 23 void input_loop();
bzhu792 5:e5bf798e0522 24 inline void set_speed(float l, float r);
bzhu792 5:e5bf798e0522 25 inline void set_turret_delta(float delta);
bzhu792 5:e5bf798e0522 26 inline void fire_cannon(bool f);
yjaafar3 2:002f2def130e 27
yjaafar3 2:002f2def130e 28 void input_thread() {
yjaafar3 2:002f2def130e 29
cwang776 0:16c007acb3a2 30 }
cwang776 0:16c007acb3a2 31
yjaafar3 2:002f2def130e 32 void drive_thread() {
bzhu792 5:e5bf798e0522 33 while (1) {
bzhu792 5:e5bf798e0522 34
bzhu792 5:e5bf798e0522 35 left_motor.speed(speed_left);
bzhu792 5:e5bf798e0522 36 right_motor.speed(speed_right);
bzhu792 5:e5bf798e0522 37 //pc.printf("left speed: %f, right speed: %f\n", speed_left, speed_right);
bzhu792 5:e5bf798e0522 38 Thread::wait(100);
bzhu792 5:e5bf798e0522 39 }
yjaafar3 2:002f2def130e 40 }
cwang776 0:16c007acb3a2 41
yjaafar3 2:002f2def130e 42 void turret_thread() {
bzhu792 5:e5bf798e0522 43 float pulsewidth = 0.0015; // servo is between 1 ms and 2 ms
bzhu792 5:e5bf798e0522 44
yjaafar3 3:9febeec1f271 45 while (1) {
bzhu792 5:e5bf798e0522 46 servo.period(0.020); // servo requires a 20ms period
bzhu792 5:e5bf798e0522 47 pulsewidth += turret_delta;
bzhu792 5:e5bf798e0522 48 if (pulsewidth > 0.002) pulsewidth = 0.002;
bzhu792 5:e5bf798e0522 49 else if (pulsewidth < 0.001) pulsewidth = 0.001;
bzhu792 5:e5bf798e0522 50 servo.pulsewidth(pulsewidth);
bzhu792 5:e5bf798e0522 51
yjaafar3 3:9febeec1f271 52 Thread::wait(50);
yjaafar3 3:9febeec1f271 53 }
cwang776 0:16c007acb3a2 54 }
yjaafar3 2:002f2def130e 55
yjaafar3 2:002f2def130e 56 void fire_thread() {
yjaafar3 2:002f2def130e 57
yjaafar3 2:002f2def130e 58 }
yjaafar3 2:002f2def130e 59
cwang776 0:16c007acb3a2 60
cwang776 0:16c007acb3a2 61 int main() {
yjaafar3 2:002f2def130e 62 thread_drive.start(drive_thread);
bzhu792 5:e5bf798e0522 63 //thread_turret.start(turret_thread);
yjaafar3 2:002f2def130e 64 thread_fire.start(fire_thread);
yjaafar3 2:002f2def130e 65
yjaafar3 2:002f2def130e 66 input_loop();
cwang776 0:16c007acb3a2 67 }
yjaafar3 2:002f2def130e 68
yjaafar3 2:002f2def130e 69 void input_loop() {
yjaafar3 2:002f2def130e 70 char bnum=0;
yjaafar3 2:002f2def130e 71 char bhit=0;
yjaafar3 2:002f2def130e 72 while(1) {
yjaafar3 2:002f2def130e 73 if (blue.getc()=='!') {
yjaafar3 2:002f2def130e 74 if (blue.getc()=='B') { //button data packet
yjaafar3 2:002f2def130e 75 bnum = blue.getc(); //button number
yjaafar3 2:002f2def130e 76 bhit = blue.getc(); //1=hit, 0=release
yjaafar3 2:002f2def130e 77 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
yjaafar3 2:002f2def130e 78 switch(bnum) {
yjaafar3 2:002f2def130e 79 case '1': //Turret Left Button
yjaafar3 2:002f2def130e 80 if (bhit == '1') {
bzhu792 5:e5bf798e0522 81 set_turret_delta(-0.000025);
yjaafar3 2:002f2def130e 82 } else {
yjaafar3 2:002f2def130e 83 set_turret_delta(0);
yjaafar3 2:002f2def130e 84 }
yjaafar3 2:002f2def130e 85 break;
yjaafar3 2:002f2def130e 86 case '2': //Turret Right Button
yjaafar3 2:002f2def130e 87 if (bhit == '1') {
bzhu792 5:e5bf798e0522 88 set_turret_delta(0.000025);
yjaafar3 2:002f2def130e 89 } else {
yjaafar3 2:002f2def130e 90 set_turret_delta(0);
yjaafar3 2:002f2def130e 91 }
yjaafar3 2:002f2def130e 92 break;
yjaafar3 2:002f2def130e 93 case '3': //Fire Button
yjaafar3 2:002f2def130e 94 if (bhit == '1') {
yjaafar3 2:002f2def130e 95 fire_cannon(true);
yjaafar3 2:002f2def130e 96 } else {
yjaafar3 2:002f2def130e 97 fire_cannon(false);
yjaafar3 2:002f2def130e 98 }
yjaafar3 2:002f2def130e 99 break;
yjaafar3 2:002f2def130e 100 case '5': //button 5 up arrow
yjaafar3 2:002f2def130e 101 if (bhit=='1') {
yjaafar3 2:002f2def130e 102 set_speed(0.5, 0.5);
yjaafar3 2:002f2def130e 103 } else {
yjaafar3 2:002f2def130e 104 set_speed(0, 0);
yjaafar3 2:002f2def130e 105 }
yjaafar3 2:002f2def130e 106 break;
yjaafar3 2:002f2def130e 107 case '6': //button 6 down arrow
yjaafar3 2:002f2def130e 108 if (bhit=='1') {
yjaafar3 2:002f2def130e 109 set_speed(-0.5, -0.5);
yjaafar3 2:002f2def130e 110 } else {
yjaafar3 2:002f2def130e 111 set_speed(0, 0);
yjaafar3 2:002f2def130e 112 }
yjaafar3 2:002f2def130e 113 break;
yjaafar3 2:002f2def130e 114 case '7': //button 7 left arrow
yjaafar3 2:002f2def130e 115 if (bhit=='1') {
yjaafar3 2:002f2def130e 116 set_speed(-0.5, 0.5);
yjaafar3 2:002f2def130e 117 } else {
yjaafar3 2:002f2def130e 118 set_speed(0, 0);
yjaafar3 2:002f2def130e 119 }
yjaafar3 2:002f2def130e 120 break;
yjaafar3 2:002f2def130e 121 case '8': //button 8 right arrow
yjaafar3 2:002f2def130e 122 if (bhit=='1') {
yjaafar3 2:002f2def130e 123 set_speed(0.5, -0.5);
yjaafar3 2:002f2def130e 124 } else {
yjaafar3 2:002f2def130e 125 set_speed(0, 0);
yjaafar3 2:002f2def130e 126 }
yjaafar3 2:002f2def130e 127 break;
yjaafar3 2:002f2def130e 128 default:
yjaafar3 2:002f2def130e 129 break;
yjaafar3 2:002f2def130e 130 }
yjaafar3 2:002f2def130e 131 }
yjaafar3 2:002f2def130e 132 }
yjaafar3 2:002f2def130e 133 }
yjaafar3 3:9febeec1f271 134 Thread::wait(50);
yjaafar3 2:002f2def130e 135 }
yjaafar3 2:002f2def130e 136 }
yjaafar3 2:002f2def130e 137
bzhu792 5:e5bf798e0522 138 inline void set_speed(float left, float right) {
yjaafar3 2:002f2def130e 139 speed_left = left;
yjaafar3 2:002f2def130e 140 speed_right = right;
yjaafar3 2:002f2def130e 141 }
yjaafar3 2:002f2def130e 142
bzhu792 5:e5bf798e0522 143 inline void set_turret_delta(float delta) {
yjaafar3 2:002f2def130e 144 turret_delta = delta;
yjaafar3 2:002f2def130e 145 }
yjaafar3 2:002f2def130e 146
bzhu792 5:e5bf798e0522 147 inline void fire_cannon(bool f) {
yjaafar3 2:002f2def130e 148 fire = f;
yjaafar3 2:002f2def130e 149 }