Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
- Committer:
- janusboandersen
- Date:
- 2018-11-21
- Revision:
- 3:47968be0df37
- Parent:
- 2:d22dcc2bfcc1
- Child:
- 4:5939f9ad88ca
File content as of revision 3:47968be0df37:
#include "mbed.h"
#include "m3pi.h"
m3pi m3pi;
// Minimum and maximum motor speeds
#define MAX 0.5
#define MIN 0
// PID terms
#define P_TERM 1
#define I_TERM 0
#define D_TERM 8
int sensor_all(int i) //lav en funktion? ved ikke hvad jeg skal her
{
int sensor_value[5]; // sensor int
m3pi.putc(0x86); // send noget sensor data
for(int n=0; n < 6; n++) // forloop så sensor for data
{
char lowbyte = m3pi.getc();
char hibyte = m3pi.getc();
sensor_value[n] = ((lowbyte + (hibyte << 8))); // sensor value
}
return sensor_value[i]; //return sensor value string
}
int main() {
m3pi.locate(0,1);
m3pi.printf("Line PID");
wait(1.0);
m3pi.sensor_auto_calibrate();
float right;
float left;
float current_pos_of_line = 0.0;
float previous_pos_of_line = 0.0;
float derivative,proportional,integral = 0;
float power;
float speed = MAX;
int sensor_value0;
int sensor_value4;
while (1) {
// Get the position of the line.
current_pos_of_line = m3pi.line_position();
proportional = current_pos_of_line;
// Compute the derivative
derivative = current_pos_of_line - previous_pos_of_line;
// Compute the integral
integral += proportional;
// Remember the last position.
previous_pos_of_line = current_pos_of_line;
// Compute the power
power = (proportional * (P_TERM) ) + (integral*(I_TERM)) + (derivative*(D_TERM)) ;
// Compute new speeds
right = speed+power;
left = speed-power;
// limit checks
if (right < MIN)
right = MIN;
else if (right > MAX)
right = MAX;
if (left < MIN)
left = MIN;
else if (left > MAX)
left = MAX;
// set speed
m3pi.left_motor(left);
m3pi.right_motor(right);
//Marc's sensor test
/*
m3pi.cls();
sensor_value0 = sensor_all(0); // sensor_value gets fkt value
sensor_value4 = sensor_all(4); // sensor_value gets fkt value
m3pi.locate(0,0);
m3pi.printf("%d", sensor_value0); // prints one of sidesensors value
m3pi.locate(0,1);
m3pi.printf("%d", sensor_value4); // prints the other sidesensor value
*/
}
}
