Delta for AGV
Dependencies: mbed HC-SR04 ros_lib_kinetic
main.cpp
- Committer:
- WeberYang
- Date:
- 2019-07-08
- Revision:
- 7:35767da0302c
- Parent:
- 6:bca0839e8295
File content as of revision 7:35767da0302c:
#include "mbed.h"
#include "HCSR04.h"
//#include "AutomationElements.h"
#include <ros.h>
#include <std_msgs/String.h>
#include <std_msgs/Float32.h>
ros::NodeHandle nh;
DigitalOut led1(LED1);
std_msgs::Float32 str_msg1;
std_msgs::Float32 str_msg2;
std_msgs::Float32 str_msg3;
std_msgs::Float32 str_msg4;
std_msgs::Float32 str_msg5;
std_msgs::Float32 str_msg6;
ros::Publisher sonar1("sonar1", &str_msg1);
ros::Publisher sonar2("sonar2", &str_msg2);
ros::Publisher sonar3("sonar3", &str_msg3);
ros::Publisher sonar4("sonar4", &str_msg4);
ros::Publisher sonar5("sonar5", &str_msg5);
ros::Publisher sonar6("sonar6", &str_msg6);
float distance1=0;
float distance2=0;
float distance3=0;
float distance4=0;
float distance5=0;
float distance6=0;
//Serial pc(USBTX, USBRX);
/*
DigitalOut CAN_T(D14);//PB_9
DigitalOut CAN_R(D15);//PB_8
DigitalOut DO_0(PC_5);
DigitalOut DO_1(PC_6);
DigitalOut DO_2(PC_8);
DigitalOut DO_3(PC_9);
DigitalOut DO_4(PA_12);//main relay
DigitalOut DO_locate_sensor(PB_11);
DigitalIn DI_0(PB_13);
DigitalIn DI_locate_sensor(PB_14);
DigitalIn Demo_mode(PB_15);
*/
//t,e
HCSR04 sensor1(PC_10, PC_11);
HCSR04 sensor2(PC_12,PD_2);
HCSR04 sensor3(PA_4,PB_0);//(A2, A3);
HCSR04 sensor4(PC_1, PC_0);
HCSR04 sensor5(PC_14,PC_15);
HCSR04 sensor6(PC_2,PC_3);//(A2, A3);
float sampleTime = 0.1;
//PT1 filter(1, 2, sampleTime);
Timer t1;
float filteredDistance;
int count;
void calc1() {
distance1 = sensor1.getCm();//*0.2+str_msg1.data*0.8;
if (distance1>100)
distance1 = 100;
if (distance1<0)
distance1 = 0;
str_msg1.data = distance1;
}
void calc2() {
distance2 = sensor2.getCm();//*0.2+str_msg1.data*0.8;
if (distance2>100)
distance2 = 100;
if (distance2<0)
distance2 = 0;
str_msg2.data = distance2;
}
void calc3() {
distance3 = sensor3.getCm();//*0.2+str_msg1.data*0.8;
if (distance3>100)
distance3 = 100;
if (distance3<0)
distance3 = 0;
str_msg3.data = distance3;
}
void calc4() {
distance4 = sensor4.getCm();//*0.2+str_msg1.data*0.8;
if (distance4>100)
distance4 = 100;
if (distance4<0)
distance4 = 0;
str_msg4.data = distance4;
}
void calc5() {
distance5 = sensor5.getCm();//*0.2+str_msg1.data*0.8;
if (distance5>100)
distance5 = 100;
if (distance5<0)
distance5 = 0;
str_msg5.data = distance5;
}
void calc6() {
distance6 = sensor6.getCm();//*0.2+str_msg1.data*0.8;
if (distance6>100)
distance6 = 100;
if (distance6<0)
distance6 = 0;
str_msg6.data = distance6;
}
int main() {
nh.initNode();
nh.advertise(sonar1);
nh.advertise(sonar2);
nh.advertise(sonar3);
nh.advertise(sonar4);
nh.advertise(sonar5);
nh.advertise(sonar6);
// ticker1.attach(&calc1, sampleTime);
// ticker2.attach(&calc2, sampleTime);
// ticker3.attach(&calc3, sampleTime);
t1.start();
while(true) {
if (t1.read_us()>10000){
t1.reset();
t1.start();
str_msg1.data = sensor1.getCm()*0.8 + str_msg1.data*0.2;
sonar1.publish( &str_msg1 );
wait_ms(1);
nh.spinOnce();
str_msg2.data = sensor2.getCm()*0.8 + str_msg2.data*0.2;
sonar2.publish( &str_msg2 );
wait_ms(1);
nh.spinOnce();
str_msg3.data = sensor3.getCm()*0.8 + str_msg3.data*0.2;
sonar3.publish( &str_msg3 );
wait_ms(1);
nh.spinOnce();
str_msg4.data = sensor4.getCm()*0.8 + str_msg4.data*0.2;
sonar4.publish( &str_msg4 );
wait_ms(1);
nh.spinOnce();
str_msg5.data = sensor5.getCm()*0.8 + str_msg5.data*0.2;
sonar5.publish( &str_msg5 );
wait_ms(1);
nh.spinOnce();
str_msg6.data = sensor6.getCm()*0.8 + str_msg6.data*0.2;
sonar6.publish( &str_msg6 );
wait_ms(1);
nh.spinOnce();
if( (str_msg1.data<30)||(str_msg2.data<30)||(str_msg3.data<30)||(str_msg4.data<30)||(str_msg5.data<30)||(str_msg6.data<30) )
led1 = 1;
else
led1 = 0;
}
}
}