first commit

Dependencies:   mbed MMA8451Q

Committer:
aalawfi
Date:
Mon Nov 22 22:27:14 2021 +0000
Revision:
34:cb9a0cec2feb
Parent:
33:0a1e29085b79
- 3 Laps, fastest is ~~12.3s

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aalawfi 31:d570f957e083 1 //Timer t;
quarren42 19:65fecaa2a387 2 #include "MMA8451Q.h"
quarren42 0:0a6756c7e3ed 3 #include "mbed.h"
aalawfi 25:8bd029d58251 4 #include "steering_header.h"
aalawfi 26:54ce9f642477 5 #include "steering_methods.h"
quarren42 1:c324a2849500 6 #include "driving.h"
aalawfi 26:54ce9f642477 7
aalawfi 2:c857935f928e 8 #include "state_control.h"
quarren42 19:65fecaa2a387 9
quarren42 0:0a6756c7e3ed 10 #include <iostream>
aalawfi 3:25c6bf0abc00 11 #include "bluetooth.h"
quarren42 19:65fecaa2a387 12
quarren42 1:c324a2849500 13
quarren42 0:0a6756c7e3ed 14 Serial pc(USBTX, USBRX); // tx, rx
aalawfi 3:25c6bf0abc00 15
quarren42 0:0a6756c7e3ed 16
quarren42 1:c324a2849500 17
quarren42 1:c324a2849500 18 Ticker motorLoop;
aalawfi 7:05ea1c004b49 19 Ticker fault_detector;
aalawfi 9:5320c2dfb913 20 Ticker controlUpdate;
quarren42 1:c324a2849500 21
aalawfi 26:54ce9f642477 22
quarren42 30:ab358e8a9e6a 23
quarren42 18:831c1e03d83e 24
quarren42 19:65fecaa2a387 25
aalawfi 3:25c6bf0abc00 26 int main() {
aalawfi 26:54ce9f642477 27
aalawfi 2:c857935f928e 28 state_update();
aalawfi 26:54ce9f642477 29 wait(2.5);
aalawfi 2:c857935f928e 30 //Delcare Onboard LED with blue color
aalawfi 2:c857935f928e 31 DigitalOut led_b(LED_BLUE);
aalawfi 2:c857935f928e 32 //Set the period of the servo motor control signal
aalawfi 2:c857935f928e 33 servo_motor_pwm.period(1/SERVO_MOTOR_FREQ);
quarren42 6:d2bd68ba99c9 34 motorLeft.period(1/freq);
quarren42 6:d2bd68ba99c9 35 motorRight.period(1/freq);
aalawfi 14:eb9c58c0f8cd 36 //controlUpdate.attach(&PID, TI);
aalawfi 2:c857935f928e 37 //Center the servo motor
aalawfi 14:eb9c58c0f8cd 38 servo_motor_pwm.write(CENTER_DUTY_CYCLE);
quarren42 20:7dcdadbd7bc0 39 // controlUpdate.attach(&PID, TI);
aalawfi 2:c857935f928e 40 //Start the control systm using a Ticker object
aalawfi 14:eb9c58c0f8cd 41 motorLoop.attach(&PI,TI);
aalawfi 26:54ce9f642477 42 steering_control_ticker.attach(&steering_control, TI_STEERING);
aalawfi 26:54ce9f642477 43 fault_detector.attach(&fault_check, 0.008);
quarren42 6:d2bd68ba99c9 44 //bt.attach(&btReceive);
aalawfi 2:c857935f928e 45
aalawfi 2:c857935f928e 46 // call landmark_counter wjen a landmark is detected
aalawfi 2:c857935f928e 47 left_landmark_sensor.rise(&landmark_counter);
aalawfi 2:c857935f928e 48 right_landmark_sensor.rise(&landmark_counter);
aalawfi 2:c857935f928e 49 // update status when the button is pressed
aalawfi 2:c857935f928e 50 stop_button.rise(&state_update);
aalawfi 2:c857935f928e 51 run_button.rise(&state_update);
aalawfi 2:c857935f928e 52 wait_button.rise(&state_update);
aalawfi 2:c857935f928e 53
quarren42 0:0a6756c7e3ed 54 bt.baud(BLUETOOTHBAUDRATE);
quarren42 0:0a6756c7e3ed 55 //Sets the communication rate of the micro-controller to the Bluetooth module.
quarren42 0:0a6756c7e3ed 56 pc.printf("Hello World!\n");
quarren42 1:c324a2849500 57 bt.printf("Hello World!\n");
quarren42 30:ab358e8a9e6a 58 //Timer t;
quarren42 30:ab358e8a9e6a 59 //t.start();
quarren42 30:ab358e8a9e6a 60
quarren42 0:0a6756c7e3ed 61 while(1) {
aalawfi 25:8bd029d58251 62 wait(0.2);
aalawfi 2:c857935f928e 63 pc.printf("\n\n");
quarren42 17:d2c98ebda90b 64 /*
aalawfi 9:5320c2dfb913 65 bt.printf("\n\n");
aalawfi 9:5320c2dfb913 66 bt.printf("\n\rMotor enabled ? : %d ", motor_enabled );
aalawfi 9:5320c2dfb913 67 bt.printf("\n\rSteering enabled ? : %d ", steering_enabled );
aalawfi 9:5320c2dfb913 68 bt.printf("\n\rCurrent duty cycle : %f", current_duty_cycle);
aalawfi 13:0091da3021df 69 bt.printf("\n\Brake enabled ? : %d ", are_brakes_activated );
aalawfi 9:5320c2dfb913 70 bt.printf("\n\rCurrent duty cycle? : %f ", current_duty_cycle );
quarren42 17:d2c98ebda90b 71 */
quarren42 6:d2bd68ba99c9 72 //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 73 //the driving input ticker is faster than the analog.read() function, so all analog.read() methods must be in the main loop
aalawfi 29:17bec543a437 74 switch(current_state){
aalawfi 9:5320c2dfb913 75 case STOP : bt.printf("\r\nCurrent state is stop"); break;
aalawfi 9:5320c2dfb913 76 case RUN: bt.printf("\r\nCurrent state is RUN"); break;
aalawfi 9:5320c2dfb913 77 case WAIT : bt.printf("\r\nCurrent state is WAIT"); break;
aalawfi 2:c857935f928e 78 };
aalawfi 2:c857935f928e 79 switch(fault_type) {
aalawfi 9:5320c2dfb913 80 case CLEAR : bt.printf("\r\nFault: CLEAR"); break;
aalawfi 9:5320c2dfb913 81 case OFF_TRACK: bt.printf("\r\nFault: OFF TRACK"); break;
quarren42 19:65fecaa2a387 82 case COLLISION : bt.printf("\r\nFault: COLLISION"); break;
aalawfi 9:5320c2dfb913 83 case LOW_VOLTAGE : bt.printf("\r\nFault: LOW VOLTAGE"); break;
aalawfi 2:c857935f928e 84 }
aalawfi 29:17bec543a437 85
aalawfi 27:0fa9d61c5fc6 86 // bt.printf("\n\n----");
aalawfi 25:8bd029d58251 87 // bt.printf("%d", t.read_ms());
aalawfi 27:0fa9d61c5fc6 88 // bt.printf("\n\rLeft distance sens (ADC) : %1.5f", left_sens);
aalawfi 27:0fa9d61c5fc6 89 // bt.printf("\n\rRight distance sens (ADC): %1.5f",right_sens);
aalawfi 27:0fa9d61c5fc6 90 // bt.printf("\n\rDifference (ADC): %1.5f",left_sens - right_sens);
quarren42 33:0a1e29085b79 91 //bt.printf("\n%1.5f", feedback);
quarren42 33:0a1e29085b79 92 bt.printf("\n%1.2f", lapTimerFinal);
aalawfi 27:0fa9d61c5fc6 93 // bt.printf("\n\rLap: %d", lap);
aalawfi 25:8bd029d58251 94 // bt.printf("\n\ravgCellVolt;ag : %1.5f", avgCellVoltag);
quarren42 18:831c1e03d83e 95 //pot1Voltage = pot1 * 3.3f;
quarren42 0:0a6756c7e3ed 96 //dutyCycleLeft = (pot1 * fullBatScalar);
quarren42 0:0a6756c7e3ed 97 //dutyCycleRight = (pot1 * fullBatScalar);
quarren42 0:0a6756c7e3ed 98
quarren42 1:c324a2849500 99 //speedLeft = (speedSensorLeft * speedSensorScalar);
quarren42 1:c324a2849500 100 //speedRight = (speedSensorRight * speedSensorScalar);
quarren42 20:7dcdadbd7bc0 101 /*
quarren42 1:c324a2849500 102 bt.printf("Duty Cycle = %1.2f ", dutyCycleLeft);
quarren42 1:c324a2849500 103 bt.printf("Speed (V) L,R = %1.2f", speedLeftVolt);
quarren42 1:c324a2849500 104 bt.printf(", %1.2f ", speedRightVolt);
quarren42 1:c324a2849500 105
quarren42 1:c324a2849500 106 bt.printf("Error L,R: %5.2f", errorLeft);
quarren42 1:c324a2849500 107 bt.printf(", %5.2f ", errorRight);
quarren42 1:c324a2849500 108
quarren42 1:c324a2849500 109 bt.printf("ErrorArea: %1.2f ", errorAreaLeft);
quarren42 18:831c1e03d83e 110 pc.printf("Output: %1.2f ", controllerOutputLeft);
quarren42 1:c324a2849500 111
quarren42 18:831c1e03d83e 112 pc.printf("Batt Voltage: %1.2f \n",avgCellVoltage);
quarren42 20:7dcdadbd7bc0 113 */
quarren42 1:c324a2849500 114 //setpointLeft = pot1;
quarren42 1:c324a2849500 115 //setpointRight = pot1;
quarren42 0:0a6756c7e3ed 116
aalawfi 9:5320c2dfb913 117 /*
quarren42 1:c324a2849500 118 if (t.read() > 5){
quarren42 1:c324a2849500 119 setpointLeft = 0.0;
quarren42 1:c324a2849500 120 setpointRight = 0.0;
quarren42 1:c324a2849500 121 }
quarren42 1:c324a2849500 122
quarren42 1:c324a2849500 123 if (t.read_ms() > 5100){
quarren42 1:c324a2849500 124 setpointLeft = 0.2;
quarren42 1:c324a2849500 125 setpointRight = 0.2;
quarren42 1:c324a2849500 126 }
aalawfi 9:5320c2dfb913 127 */
quarren42 0:0a6756c7e3ed 128
quarren42 1:c324a2849500 129 if (newData){
quarren42 1:c324a2849500 130 newData = false;
quarren42 1:c324a2849500 131 // bt.printf("Got %c %3i\n",newInputChar, newInputInt);
quarren42 1:c324a2849500 132
quarren42 1:c324a2849500 133 if (newInputChar == 'L')
quarren42 1:c324a2849500 134 setpointLeft = (newInputInt / 100.0f);
quarren42 1:c324a2849500 135 if (newInputChar == 'R')
quarren42 1:c324a2849500 136 setpointRight = (newInputInt / 100.0f);
quarren42 1:c324a2849500 137
quarren42 0:0a6756c7e3ed 138
quarren42 1:c324a2849500 139 //wait(0.1);
quarren42 1:c324a2849500 140 }
quarren42 1:c324a2849500 141 }
quarren42 1:c324a2849500 142 }
quarren42 1:c324a2849500 143