Julesnaps / Mbed 2 deprecated Linefollowproject

Dependencies:   m3pi mbed

Committer:
uld
Date:
Tue Oct 04 11:44:59 2022 +0000
Revision:
1:5431d59ee324
Parent:
0:f562e4f9c29f
Child:
2:5369f34d061e
HAr  lavet en kommentar

Who changed what in which revision?

UserRevisionLine numberNew contents of line
magnusmland 0:f562e4f9c29f 1 #include "mbed.h"
magnusmland 0:f562e4f9c29f 2 #include "m3pi.h"
magnusmland 0:f562e4f9c29f 3
magnusmland 0:f562e4f9c29f 4 m3pi m3pi;
magnusmland 0:f562e4f9c29f 5
magnusmland 0:f562e4f9c29f 6 // Minimum and maximum motor speeds
magnusmland 0:f562e4f9c29f 7 #define MAX 1.0
magnusmland 0:f562e4f9c29f 8 #define MIN 0
magnusmland 0:f562e4f9c29f 9
magnusmland 0:f562e4f9c29f 10 // PID terms
magnusmland 0:f562e4f9c29f 11 #define P_TERM 1
magnusmland 0:f562e4f9c29f 12 #define I_TERM 0
magnusmland 0:f562e4f9c29f 13 #define D_TERM 20
magnusmland 0:f562e4f9c29f 14
magnusmland 0:f562e4f9c29f 15 int main() {
magnusmland 0:f562e4f9c29f 16 float a=m3pi.battery();
magnusmland 0:f562e4f9c29f 17 float b=m3pi.pot_voltage();
magnusmland 0:f562e4f9c29f 18 m3pi.locate(0,0);
magnusmland 0:f562e4f9c29f 19
magnusmland 0:f562e4f9c29f 20
magnusmland 0:f562e4f9c29f 21 m3pi.cls();
magnusmland 0:f562e4f9c29f 22 m3pi.printf("%f.3 ",a);
magnusmland 0:f562e4f9c29f 23 m3pi.locate(0,1);
magnusmland 0:f562e4f9c29f 24 m3pi.printf("%f.3 ",b);
uld 1:5431d59ee324 25
uld 1:5431d59ee324 26
uld 1:5431d59ee324 27 // dette er en mega god kommentar 13:44
magnusmland 0:f562e4f9c29f 28
magnusmland 0:f562e4f9c29f 29 wait(2.0);
magnusmland 0:f562e4f9c29f 30
magnusmland 0:f562e4f9c29f 31 m3pi.sensor_auto_calibrate();
magnusmland 0:f562e4f9c29f 32
magnusmland 0:f562e4f9c29f 33 float right;
magnusmland 0:f562e4f9c29f 34 float left;
magnusmland 0:f562e4f9c29f 35 float current_pos_of_line = 0.0;
magnusmland 0:f562e4f9c29f 36 float previous_pos_of_line = 0.0;
magnusmland 0:f562e4f9c29f 37 float derivative,proportional,integral = 0;
magnusmland 0:f562e4f9c29f 38 float power;
magnusmland 0:f562e4f9c29f 39 float speed = MAX;
magnusmland 0:f562e4f9c29f 40
magnusmland 0:f562e4f9c29f 41 while (1) {
magnusmland 0:f562e4f9c29f 42
magnusmland 0:f562e4f9c29f 43 // Get the position of the line.
magnusmland 0:f562e4f9c29f 44 current_pos_of_line = m3pi.line_position();
magnusmland 0:f562e4f9c29f 45 proportional = current_pos_of_line;
magnusmland 0:f562e4f9c29f 46
magnusmland 0:f562e4f9c29f 47 // Compute the derivative
magnusmland 0:f562e4f9c29f 48 derivative = current_pos_of_line - previous_pos_of_line;
magnusmland 0:f562e4f9c29f 49
magnusmland 0:f562e4f9c29f 50 // Compute the integral
magnusmland 0:f562e4f9c29f 51 integral += proportional;
magnusmland 0:f562e4f9c29f 52
magnusmland 0:f562e4f9c29f 53 // Remember the last position.
magnusmland 0:f562e4f9c29f 54 previous_pos_of_line = current_pos_of_line;
magnusmland 0:f562e4f9c29f 55
magnusmland 0:f562e4f9c29f 56 // Compute the power
magnusmland 0:f562e4f9c29f 57 power = (proportional * (P_TERM) ) + (integral*(I_TERM)) + (derivative*(D_TERM)) ;
magnusmland 0:f562e4f9c29f 58
magnusmland 0:f562e4f9c29f 59 // Compute new speeds
magnusmland 0:f562e4f9c29f 60 right = speed+power;
magnusmland 0:f562e4f9c29f 61 left = speed-power;
magnusmland 0:f562e4f9c29f 62
magnusmland 0:f562e4f9c29f 63 // limit checks
magnusmland 0:f562e4f9c29f 64 if (right < MIN)
magnusmland 0:f562e4f9c29f 65 right = MIN;
magnusmland 0:f562e4f9c29f 66 else if (right > MAX)
magnusmland 0:f562e4f9c29f 67 right = MAX;
magnusmland 0:f562e4f9c29f 68
magnusmland 0:f562e4f9c29f 69 if (left < MIN)
magnusmland 0:f562e4f9c29f 70 left = MIN;
magnusmland 0:f562e4f9c29f 71 else if (left > MAX)
magnusmland 0:f562e4f9c29f 72 left = MAX;
magnusmland 0:f562e4f9c29f 73
magnusmland 0:f562e4f9c29f 74 // set speed
magnusmland 0:f562e4f9c29f 75 m3pi.left_motor(left);
magnusmland 0:f562e4f9c29f 76 m3pi.right_motor(right);
magnusmland 0:f562e4f9c29f 77
magnusmland 0:f562e4f9c29f 78 }
magnusmland 0:f562e4f9c29f 79 }