first commit

Dependencies:   mbed MMA8451Q

Committer:
aalawfi
Date:
Mon Oct 25 16:48:20 2021 +0000
Revision:
7:05ea1c004b49
Parent:
6:d2bd68ba99c9
Child:
9:5320c2dfb913
- Combined steering and driving tickers into one ticker that calls both, similar to what is shown in the lecture

Who changed what in which revision?

UserRevisionLine numberNew contents of line
quarren42 0:0a6756c7e3ed 1 #include "mbed.h"
quarren42 1:c324a2849500 2 #include "driving.h"
aalawfi 2:c857935f928e 3 #include "steering_header.h"
aalawfi 2:c857935f928e 4 #include "steering_methods.h"
aalawfi 2:c857935f928e 5 #include "state_control.h"
quarren42 1:c324a2849500 6 #include "MMA8451Q.h"
quarren42 0:0a6756c7e3ed 7 #include <iostream>
aalawfi 3:25c6bf0abc00 8 #include "bluetooth.h"
quarren42 1:c324a2849500 9 #define MMA8451_I2C_ADDRESS (0x1d<<1)
quarren42 1:c324a2849500 10
quarren42 0:0a6756c7e3ed 11 Serial pc(USBTX, USBRX); // tx, rx
aalawfi 3:25c6bf0abc00 12
quarren42 0:0a6756c7e3ed 13
quarren42 1:c324a2849500 14 PinName const SDA = PTE25;
quarren42 1:c324a2849500 15 PinName const SCL = PTE24;
quarren42 1:c324a2849500 16
quarren42 1:c324a2849500 17 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
quarren42 1:c324a2849500 18 Ticker motorLoop;
aalawfi 7:05ea1c004b49 19 Ticker fault_detector;
quarren42 1:c324a2849500 20 Timer t;
quarren42 1:c324a2849500 21
aalawfi 3:25c6bf0abc00 22 int main() {
aalawfi 2:c857935f928e 23 state_update();
aalawfi 2:c857935f928e 24
aalawfi 2:c857935f928e 25 //Delcare Onboard LED with blue color
aalawfi 2:c857935f928e 26 DigitalOut led_b(LED_BLUE);
aalawfi 2:c857935f928e 27 //Set the period of the servo motor control signal
aalawfi 2:c857935f928e 28 servo_motor_pwm.period(1/SERVO_MOTOR_FREQ);
quarren42 6:d2bd68ba99c9 29 motorLeft.period(1/freq);
quarren42 6:d2bd68ba99c9 30 motorRight.period(1/freq);
aalawfi 2:c857935f928e 31 //Center the servo motor
aalawfi 2:c857935f928e 32 servo_motor_pwm.write(CENTER_DUTY_CYCLE);
aalawfi 2:c857935f928e 33
aalawfi 2:c857935f928e 34 //Start the control systm using a Ticker object
aalawfi 2:c857935f928e 35 steering_control_ticker.attach(&steering_control, TI);
quarren42 6:d2bd68ba99c9 36 motorLoop.attach(&PI,TI);
aalawfi 7:05ea1c004b49 37 fault_detector.attach(&fault_check, 0.02);
quarren42 6:d2bd68ba99c9 38 //bt.attach(&btReceive);
aalawfi 2:c857935f928e 39
aalawfi 2:c857935f928e 40 // call landmark_counter wjen a landmark is detected
aalawfi 2:c857935f928e 41 left_landmark_sensor.rise(&landmark_counter);
aalawfi 2:c857935f928e 42 right_landmark_sensor.rise(&landmark_counter);
aalawfi 2:c857935f928e 43 // update status when the button is pressed
aalawfi 2:c857935f928e 44 stop_button.rise(&state_update);
aalawfi 2:c857935f928e 45 run_button.rise(&state_update);
aalawfi 2:c857935f928e 46 wait_button.rise(&state_update);
aalawfi 2:c857935f928e 47
quarren42 0:0a6756c7e3ed 48 bt.baud(BLUETOOTHBAUDRATE);
quarren42 0:0a6756c7e3ed 49 //Sets the communication rate of the micro-controller to the Bluetooth module.
quarren42 0:0a6756c7e3ed 50 pc.printf("Hello World!\n");
quarren42 1:c324a2849500 51 bt.printf("Hello World!\n");
quarren42 1:c324a2849500 52
quarren42 1:c324a2849500 53 t.start();
quarren42 1:c324a2849500 54 float time = t.read();
quarren42 1:c324a2849500 55
quarren42 0:0a6756c7e3ed 56 //prints the string to the Tera-Term Console using the Bluetooth object ‘bt’.
quarren42 0:0a6756c7e3ed 57 while(1) {
aalawfi 2:c857935f928e 58
aalawfi 2:c857935f928e 59 pc.printf("\n\n");
aalawfi 2:c857935f928e 60
aalawfi 2:c857935f928e 61 pc.printf("\r\nSteering enabled? : %d",steering_enabled);
aalawfi 2:c857935f928e 62 pc.printf("\r\nCurrent duty cycle : %f ", current_duty_cycle);
aalawfi 2:c857935f928e 63 pc.printf("\r\nLeft duty cycle : %f ", left_distance_sensor.read());
aalawfi 2:c857935f928e 64 pc.printf("\r\nRight voltage : %f" , right_distance_sensor.read());
aalawfi 2:c857935f928e 65 pc.printf("\r\nCurrent duty cycle : %f ", current_duty_cycle);
aalawfi 2:c857935f928e 66 fault_check();
quarren42 6:d2bd68ba99c9 67 //wait(0.5); //commented out the wait bc it slows down the fault_check, and it breaks the analogIn readings for the driving input
quarren42 6:d2bd68ba99c9 68 //the driving input ticker is faster than the analog.read() function, so all analog.read() methods must be in the main loop
aalawfi 2:c857935f928e 69 switch(current_state ){
aalawfi 2:c857935f928e 70 case STOP : pc.printf("\r\nCurrent state is stop"); break;
aalawfi 2:c857935f928e 71 case RUN: pc.printf("\r\nCurrent state is RUN"); break;
aalawfi 2:c857935f928e 72 case WAIT : pc.printf("\r\nCurrent state is WAIT"); break;
aalawfi 2:c857935f928e 73 };
aalawfi 2:c857935f928e 74 switch(fault_type) {
aalawfi 2:c857935f928e 75 case CLEAR : pc.printf("\r\nFault: CLEAR"); break;
aalawfi 2:c857935f928e 76 case OFF_TRACK: pc.printf("\r\nFault: OFF TRACK"); break;
quarren42 6:d2bd68ba99c9 77 case BUMPER : pc.printf("\r\nFault: OBSTACLE"); break;
aalawfi 2:c857935f928e 78 case LOW_VOLTAGE : pc.printf("Fault: LOW VOLTAGE"); break;
aalawfi 2:c857935f928e 79 }
aalawfi 2:c857935f928e 80
quarren42 1:c324a2849500 81 x = abs(acc.getAccX());
quarren42 0:0a6756c7e3ed 82 pot1Voltage = pot1 * 3.3f;
quarren42 0:0a6756c7e3ed 83 //dutyCycleLeft = (pot1 * fullBatScalar);
quarren42 0:0a6756c7e3ed 84 //dutyCycleRight = (pot1 * fullBatScalar);
quarren42 0:0a6756c7e3ed 85
quarren42 1:c324a2849500 86 //speedLeft = (speedSensorLeft * speedSensorScalar);
quarren42 1:c324a2849500 87 //speedRight = (speedSensorRight * speedSensorScalar);
quarren42 1:c324a2849500 88
quarren42 1:c324a2849500 89 speedLeftVolt = (speedSensorLeft * 3.3f);
quarren42 1:c324a2849500 90 speedRightVolt = (speedSensorRight * 3.3f);
quarren42 1:c324a2849500 91
quarren42 1:c324a2849500 92 bt.printf("Duty Cycle = %1.2f ", dutyCycleLeft);
quarren42 1:c324a2849500 93 bt.printf("Speed (V) L,R = %1.2f", speedLeftVolt);
quarren42 1:c324a2849500 94 bt.printf(", %1.2f ", speedRightVolt);
quarren42 1:c324a2849500 95
quarren42 1:c324a2849500 96 bt.printf("Error L,R: %5.2f", errorLeft);
quarren42 1:c324a2849500 97 bt.printf(", %5.2f ", errorRight);
quarren42 1:c324a2849500 98
quarren42 1:c324a2849500 99 bt.printf("ErrorArea: %1.2f ", errorAreaLeft);
quarren42 1:c324a2849500 100 bt.printf("Output: %1.2f ", controllerOutputLeft);
quarren42 1:c324a2849500 101
quarren42 1:c324a2849500 102 bt.printf("Batt Voltage: %1.2f \n",avgCellVoltage);
quarren42 1:c324a2849500 103
quarren42 1:c324a2849500 104 //setpointLeft = pot1;
quarren42 1:c324a2849500 105 //setpointRight = pot1;
quarren42 0:0a6756c7e3ed 106
quarren42 0:0a6756c7e3ed 107
quarren42 1:c324a2849500 108 if (t.read() > 5){
quarren42 1:c324a2849500 109 setpointLeft = 0.0;
quarren42 1:c324a2849500 110 setpointRight = 0.0;
quarren42 1:c324a2849500 111 }
quarren42 1:c324a2849500 112
quarren42 1:c324a2849500 113 if (t.read_ms() > 5100){
quarren42 1:c324a2849500 114 setpointLeft = 0.2;
quarren42 1:c324a2849500 115 setpointRight = 0.2;
quarren42 1:c324a2849500 116 }
quarren42 0:0a6756c7e3ed 117
quarren42 1:c324a2849500 118 if (newData){
quarren42 1:c324a2849500 119 newData = false;
quarren42 1:c324a2849500 120 // bt.printf("Got %c %3i\n",newInputChar, newInputInt);
quarren42 1:c324a2849500 121
quarren42 1:c324a2849500 122 if (newInputChar == 'L')
quarren42 1:c324a2849500 123 setpointLeft = (newInputInt / 100.0f);
quarren42 1:c324a2849500 124 if (newInputChar == 'R')
quarren42 1:c324a2849500 125 setpointRight = (newInputInt / 100.0f);
quarren42 1:c324a2849500 126
quarren42 0:0a6756c7e3ed 127
quarren42 1:c324a2849500 128 //wait(0.1);
quarren42 1:c324a2849500 129 }
quarren42 1:c324a2849500 130 }
quarren42 1:c324a2849500 131 }
quarren42 1:c324a2849500 132