aaa
Dependencies: LidarLitev2 Sabertoothaaa mbed-rtos mbed
main.cpp
- Committer:
- eljerchua
- Date:
- 2017-09-28
- Revision:
- 0:59ae1ba97a94
File content as of revision 0:59ae1ba97a94:
#include "mbed.h"
#include "Sabertooth.h"
#include "rtos.h"
#include "peixingv2.h"
#include "LidarLitev2.h"
Serial pc(USBTX, USBRX);
Serial device(p28, p27);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
DigitalIn SignalIn(p29);
DigitalOut SignalOut(p30);
LidarLitev2 Lidar(p9, p10);
PwmOut servo(p21);
AnalogIn s1 (p15);
AnalogIn s2 (p16);
AnalogIn s3 (p19);
AnalogIn s4 (p20);
#define k_5 12466.0
#define k_4 -23216.0
#define k_3 14974.0
#define k_2 -3585.0
#define k_1 19.0
#define k_0 96.0
int i;
float val1, dist1, total_dist1, ave_dist1;
float val2, dist2, total_dist2, ave_dist2;
bool x;
void read_sensors()
{
dist1 = 0;
total_dist1 = 0;
ave_dist1 = 0;
dist2 = 0;
total_dist2 = 0;
ave_dist2 = 0;
for(i = 0; i < 50; i++)
{
val1 = s1.read();
dist1 = 0;
dist1 += k_5*(val1*val1*val1*val1*val1);
dist1 += k_4*(val1*val1*val1*val1);
dist1 += k_3*(val1*val1*val1);
dist1 += k_2*(val1*val1);
dist1 += k_1*val1;
dist1 += k_0;
total_dist1 = total_dist1 + dist1;
val2 = s2.read();
dist2 = 0;
dist2 += k_5*(val2*val2*val2*val2*val2);
dist2 += k_4*(val2*val2*val2*val2);
dist2 += k_3*(val2*val2*val2);
dist2 += k_2*(val2*val2);
dist2 += k_1*val2;
dist2 += k_0;
total_dist2 = total_dist2 + dist2;
}
ave_dist1 = total_dist1 / 50;
ave_dist2 = total_dist2 / 50;
}
void thread1(void const *args)
{
while(true)
{
read_sensors();
int speed = 20;
if(ave_dist1 < 30 || ave_dist2 < 30) SignalOut = 1;
else SignalOut = 0;
if(ave_dist1 < 30 && ave_dist2 >= 30)
{
x = false;
turnright(speed);
}
else if(ave_dist2 < 30 && ave_dist1 >= 30)
{
x = false;
turnleft(speed);
}
else if(ave_dist2 < 30 && ave_dist1 < 30)
{
x = false;
turnright(speed);
}
else x = true;
}
}
int main()
{
pc.baud(115200);
device.baud(115200);
front_sb.InitializeCom();
back_sb.InitializeCom();
Thread thread(thread1);
int speed = 50;
float distance;
char c = 'k', a;
Lidar.configure();
servo.period_ms(20);
while(true)
{
if(x == true)
{
if(device.readable())
{
a = device.getc();
if(a > 0 && a <= 100) speed = a;
else if(a == 108)
{
distance = 0;
for(int j = 0; j < 3; j++) distance = distance + Lidar.distance();
distance = distance / 3;
pc.printf("%d", int(distance));
device.putc(int(distance));
}
else if(a >= 109)
{
servo.pulsewidth_us(1089 + (a - 109) * 7);
wait(0.01);
}
else c = a;
}
if(c == 'g') forward(speed);
else if(c == 'h') backward(speed);
else if(c == 'j') right(speed);
else if(c == 'i') left(speed);
else if(c == 'e') turnright(speed);
else if(c == 'f') turnleft(speed);
else stop();
}
}
}