Janus Bo Andersen / Mbed 2 deprecated PRO1_amp_test

Dependencies:   mbed m3pi

Committer:
janusboandersen
Date:
Wed Nov 21 11:35:18 2018 +0000
Revision:
0:2b88d9638dd6
Child:
1:fbf9b4ab4bc5
Initialize repository

Who changed what in which revision?

UserRevisionLine numberNew contents of line
janusboandersen 0:2b88d9638dd6 1 #include "mbed.h"
janusboandersen 0:2b88d9638dd6 2 #include "m3pi.h"
janusboandersen 0:2b88d9638dd6 3
janusboandersen 0:2b88d9638dd6 4 m3pi m3pi;
janusboandersen 0:2b88d9638dd6 5
janusboandersen 0:2b88d9638dd6 6 // Minimum and maximum motor speeds
janusboandersen 0:2b88d9638dd6 7 #define MAX 1.0
janusboandersen 0:2b88d9638dd6 8 #define MIN 0
janusboandersen 0:2b88d9638dd6 9
janusboandersen 0:2b88d9638dd6 10 //Our variables
janusboandersen 0:2b88d9638dd6 11 #define OPTIMAL_SPEED 0.95
janusboandersen 0:2b88d9638dd6 12
janusboandersen 0:2b88d9638dd6 13 // PID terms
janusboandersen 0:2b88d9638dd6 14 #define P_TERM 1.0
janusboandersen 0:2b88d9638dd6 15 #define D_TERM 8.0
janusboandersen 0:2b88d9638dd6 16 #define I_TERM 0.01 //skal være nul eller tæt på
janusboandersen 0:2b88d9638dd6 17
janusboandersen 0:2b88d9638dd6 18 //Print to LCD (character, line) numbers are zero indexed
janusboandersen 0:2b88d9638dd6 19 void print_battery() {
janusboandersen 0:2b88d9638dd6 20
janusboandersen 0:2b88d9638dd6 21 //measure battery voltage
janusboandersen 0:2b88d9638dd6 22 float f = m3pi.battery();
janusboandersen 0:2b88d9638dd6 23 char text[8];
janusboandersen 0:2b88d9638dd6 24 m3pi.cls();
janusboandersen 0:2b88d9638dd6 25 m3pi.locate(0,0);
janusboandersen 0:2b88d9638dd6 26
janusboandersen 0:2b88d9638dd6 27 //convert to a string
janusboandersen 0:2b88d9638dd6 28 sprintf(text, "%4.2f", f);
janusboandersen 0:2b88d9638dd6 29 m3pi.printf(text);
janusboandersen 0:2b88d9638dd6 30 }
janusboandersen 0:2b88d9638dd6 31
janusboandersen 0:2b88d9638dd6 32 void toggleLED(DigitalOut &led) {
janusboandersen 0:2b88d9638dd6 33 if (led == 1) {
janusboandersen 0:2b88d9638dd6 34 led = 0;
janusboandersen 0:2b88d9638dd6 35 } else {
janusboandersen 0:2b88d9638dd6 36 led = 1;
janusboandersen 0:2b88d9638dd6 37 }
janusboandersen 0:2b88d9638dd6 38 }
janusboandersen 0:2b88d9638dd6 39
janusboandersen 0:2b88d9638dd6 40
janusboandersen 0:2b88d9638dd6 41 int main(void) {
janusboandersen 0:2b88d9638dd6 42
janusboandersen 0:2b88d9638dd6 43 //user push button p21
janusboandersen 0:2b88d9638dd6 44 DigitalIn button(p21);
janusboandersen 0:2b88d9638dd6 45 button.mode(PullUp);
janusboandersen 0:2b88d9638dd6 46
janusboandersen 0:2b88d9638dd6 47 //set the LEDs as objects
janusboandersen 0:2b88d9638dd6 48 //on the m3pi
janusboandersen 0:2b88d9638dd6 49 DigitalOut redled8(p13);
janusboandersen 0:2b88d9638dd6 50 DigitalOut redled7(p14);
janusboandersen 0:2b88d9638dd6 51 DigitalOut redled6(p15);
janusboandersen 0:2b88d9638dd6 52 DigitalOut redled5(p16);
janusboandersen 0:2b88d9638dd6 53 DigitalOut redled4(p17);
janusboandersen 0:2b88d9638dd6 54 DigitalOut redled3(p18);
janusboandersen 0:2b88d9638dd6 55 DigitalOut redled2(p19);
janusboandersen 0:2b88d9638dd6 56 DigitalOut redled1(p20);
janusboandersen 0:2b88d9638dd6 57
janusboandersen 0:2b88d9638dd6 58 //on the mbed
janusboandersen 0:2b88d9638dd6 59 DigitalOut myled1 (LED1);
janusboandersen 0:2b88d9638dd6 60 DigitalOut myled2 (LED2);
janusboandersen 0:2b88d9638dd6 61 DigitalOut myled3 (LED3);
janusboandersen 0:2b88d9638dd6 62 DigitalOut myled4 (LED4);
janusboandersen 0:2b88d9638dd6 63
janusboandersen 0:2b88d9638dd6 64
janusboandersen 0:2b88d9638dd6 65 // Set all LEDs to off
janusboandersen 0:2b88d9638dd6 66 redled1 = 0;
janusboandersen 0:2b88d9638dd6 67 redled2 = 0;
janusboandersen 0:2b88d9638dd6 68 redled3 = 0;
janusboandersen 0:2b88d9638dd6 69 redled4 = 0;
janusboandersen 0:2b88d9638dd6 70 redled5 = 0;
janusboandersen 0:2b88d9638dd6 71 redled6 = 0;
janusboandersen 0:2b88d9638dd6 72 redled7 = 0;
janusboandersen 0:2b88d9638dd6 73 redled8 = 0;
janusboandersen 0:2b88d9638dd6 74 myled1 = 0;
janusboandersen 0:2b88d9638dd6 75 myled2 = 0;
janusboandersen 0:2b88d9638dd6 76 myled3 = 0;
janusboandersen 0:2b88d9638dd6 77 myled4 = 0;
janusboandersen 0:2b88d9638dd6 78
janusboandersen 0:2b88d9638dd6 79
janusboandersen 0:2b88d9638dd6 80 //Initialize the car
janusboandersen 0:2b88d9638dd6 81 m3pi.sensor_auto_calibrate();
janusboandersen 0:2b88d9638dd6 82
janusboandersen 0:2b88d9638dd6 83 // create some control variables
janusboandersen 0:2b88d9638dd6 84 float right;
janusboandersen 0:2b88d9638dd6 85 float left;
janusboandersen 0:2b88d9638dd6 86 float current_pos_of_line = 0.0;
janusboandersen 0:2b88d9638dd6 87 float previous_pos_of_line = 0.0;
janusboandersen 0:2b88d9638dd6 88 float derivative,proportional,integral = 0;
janusboandersen 0:2b88d9638dd6 89 float power;
janusboandersen 0:2b88d9638dd6 90 float speed = OPTIMAL_SPEED;
janusboandersen 0:2b88d9638dd6 91
janusboandersen 0:2b88d9638dd6 92
janusboandersen 0:2b88d9638dd6 93 // Start the loop
janusboandersen 0:2b88d9638dd6 94 while (1) {
janusboandersen 0:2b88d9638dd6 95
janusboandersen 0:2b88d9638dd6 96 // Get the position of the line.
janusboandersen 0:2b88d9638dd6 97 current_pos_of_line = m3pi.line_position();
janusboandersen 0:2b88d9638dd6 98 proportional = current_pos_of_line;
janusboandersen 0:2b88d9638dd6 99
janusboandersen 0:2b88d9638dd6 100 // Compute the derivative
janusboandersen 0:2b88d9638dd6 101 derivative = current_pos_of_line - previous_pos_of_line;
janusboandersen 0:2b88d9638dd6 102
janusboandersen 0:2b88d9638dd6 103 // Compute the integral
janusboandersen 0:2b88d9638dd6 104 integral += proportional;
janusboandersen 0:2b88d9638dd6 105
janusboandersen 0:2b88d9638dd6 106 // Remember the last position.
janusboandersen 0:2b88d9638dd6 107 previous_pos_of_line = current_pos_of_line;
janusboandersen 0:2b88d9638dd6 108
janusboandersen 0:2b88d9638dd6 109 // Compute the power
janusboandersen 0:2b88d9638dd6 110 power = (proportional * (P_TERM) ) + (integral*(I_TERM)) + (derivative*(D_TERM)) ;
janusboandersen 0:2b88d9638dd6 111
janusboandersen 0:2b88d9638dd6 112 // Compute new speeds
janusboandersen 0:2b88d9638dd6 113 right = speed+power;
janusboandersen 0:2b88d9638dd6 114 left = speed-power;
janusboandersen 0:2b88d9638dd6 115
janusboandersen 0:2b88d9638dd6 116 // limit checks
janusboandersen 0:2b88d9638dd6 117 if (right < MIN)
janusboandersen 0:2b88d9638dd6 118 right = MIN;
janusboandersen 0:2b88d9638dd6 119 else if (right > MAX)
janusboandersen 0:2b88d9638dd6 120 right = MAX;
janusboandersen 0:2b88d9638dd6 121
janusboandersen 0:2b88d9638dd6 122 if (left < MIN)
janusboandersen 0:2b88d9638dd6 123 left = MIN;
janusboandersen 0:2b88d9638dd6 124 else if (left > MAX)
janusboandersen 0:2b88d9638dd6 125 left = MAX;
janusboandersen 0:2b88d9638dd6 126
janusboandersen 0:2b88d9638dd6 127 // set speed
janusboandersen 0:2b88d9638dd6 128 m3pi.left_motor(left);
janusboandersen 0:2b88d9638dd6 129 m3pi.right_motor(right);
janusboandersen 0:2b88d9638dd6 130
janusboandersen 0:2b88d9638dd6 131 print_battery();
janusboandersen 0:2b88d9638dd6 132
janusboandersen 0:2b88d9638dd6 133 }
janusboandersen 0:2b88d9638dd6 134
janusboandersen 0:2b88d9638dd6 135
janusboandersen 0:2b88d9638dd6 136
janusboandersen 0:2b88d9638dd6 137
janusboandersen 0:2b88d9638dd6 138
janusboandersen 0:2b88d9638dd6 139
janusboandersen 0:2b88d9638dd6 140
janusboandersen 0:2b88d9638dd6 141
janusboandersen 0:2b88d9638dd6 142
janusboandersen 0:2b88d9638dd6 143
janusboandersen 0:2b88d9638dd6 144
janusboandersen 0:2b88d9638dd6 145
janusboandersen 0:2b88d9638dd6 146
janusboandersen 0:2b88d9638dd6 147
janusboandersen 0:2b88d9638dd6 148
janusboandersen 0:2b88d9638dd6 149
janusboandersen 0:2b88d9638dd6 150 /*
janusboandersen 0:2b88d9638dd6 151 f = m3pi.battery();
janusboandersen 0:2b88d9638dd6 152 if (f > 4.7) {
janusboandersen 0:2b88d9638dd6 153 myled1 = 1;
janusboandersen 0:2b88d9638dd6 154 } else {
janusboandersen 0:2b88d9638dd6 155 myled1 = 0;
janusboandersen 0:2b88d9638dd6 156 }
janusboandersen 0:2b88d9638dd6 157
janusboandersen 0:2b88d9638dd6 158
janusboandersen 0:2b88d9638dd6 159 m3pi.cls();
janusboandersen 0:2b88d9638dd6 160 m3pi.locate(0,0);
janusboandersen 0:2b88d9638dd6 161
janusboandersen 0:2b88d9638dd6 162 //convert to a string
janusboandersen 0:2b88d9638dd6 163 sprintf(text, "%4.2f", f);
janusboandersen 0:2b88d9638dd6 164 m3pi.printf(text);
janusboandersen 0:2b88d9638dd6 165 wait(0.2);
janusboandersen 0:2b88d9638dd6 166 */
janusboandersen 0:2b88d9638dd6 167
janusboandersen 0:2b88d9638dd6 168
janusboandersen 0:2b88d9638dd6 169 }
janusboandersen 0:2b88d9638dd6 170
janusboandersen 0:2b88d9638dd6 171
janusboandersen 0:2b88d9638dd6 172
janusboandersen 0:2b88d9638dd6 173 /* Structure
janusboandersen 0:2b88d9638dd6 174
janusboandersen 0:2b88d9638dd6 175 functions:
janusboandersen 0:2b88d9638dd6 176
janusboandersen 0:2b88d9638dd6 177 Charging Strategy
janusboandersen 0:2b88d9638dd6 178 poll voltage -> return voltage
janusboandersen 0:2b88d9638dd6 179 Charging limits
janusboandersen 0:2b88d9638dd6 180 Low Batt level
janusboandersen 0:2b88d9638dd6 181 Enough charge level
janusboandersen 0:2b88d9638dd6 182
janusboandersen 0:2b88d9638dd6 183 Control -> inherits from m3pi
janusboandersen 0:2b88d9638dd6 184 pause line follower
janusboandersen 0:2b88d9638dd6 185 resume line follower
janusboandersen 0:2b88d9638dd6 186 speed up (home stretch)
janusboandersen 0:2b88d9638dd6 187
janusboandersen 0:2b88d9638dd6 188
janusboandersen 0:2b88d9638dd6 189 Class: CarData
janusboandersen 0:2b88d9638dd6 190
janusboandersen 0:2b88d9638dd6 191
janusboandersen 0:2b88d9638dd6 192 Class: PitData
janusboandersen 0:2b88d9638dd6 193 Total time in pit
janusboandersen 0:2b88d9638dd6 194 Total stops in pit
janusboandersen 0:2b88d9638dd6 195
janusboandersen 0:2b88d9638dd6 196 Methods:
janusboandersen 0:2b88d9638dd6 197 Update Wh
janusboandersen 0:2b88d9638dd6 198 Update pit stops
janusboandersen 0:2b88d9638dd6 199 Print pitstops to screen
janusboandersen 0:2b88d9638dd6 200
janusboandersen 0:2b88d9638dd6 201
janusboandersen 0:2b88d9638dd6 202
janusboandersen 0:2b88d9638dd6 203
janusboandersen 0:2b88d9638dd6 204
janusboandersen 0:2b88d9638dd6 205 */