complete motor
Dependencies: BufferedSerial motor_sn7544
main.cpp
- Committer:
- kangmingyo
- Date:
- 2019-08-06
- Revision:
- 12:da4fb0d541ca
- Parent:
- 11:2228e8931266
- Child:
- 13:3ac8d2472417
File content as of revision 12:da4fb0d541ca:
#include "mbed.h" #include "motor.h" #include <ros.h> #include <std_msgs/Float64.h> #include <std_msgs/Int32.h> #include <std_msgs/String.h> #include <geometry_msgs/Point.h> std_msgs::Float64 cum_dist; std_msgs::Float64 rela_dist; std_msgs::Float64 flaw_loca; std_msgs::Float64 ultra_reflection; std_msgs::Float64 curr_vel; std_msgs::Int32 curr_rpm; geometry_msgs::Point flaw_info; ros::NodeHandle nh; ros::Publisher rela_dist_pub("rela_dist", &rela_dist); ros::Publisher rpm_pub("rpm", &curr_rpm); ros::Publisher ultra_reflection_pub("ultra_reflection", &ultra_reflection); ros::Publisher flaw_info_pub("flaw_info", &flaw_info); ros::Publisher curr_vel_pub("curr_vel", &curr_vel); BusOut bus(D11,D12); MotorCtl motor1(D3,bus,D4,D5); InterruptIn tachoINT1(D4); InterruptIn tachoINT2(D5); //Serial pc(USBTX,USBRX,115200); char rx_buffer[10]; int index=0; volatile int flag; void update_current(void) { motor1.UpdateCurrentPosition(); // pc.printf("Update Position\r\n"); } //void rx_cb(void) //{ // char ch; // ch = pc.getc(); // pc.putc(ch); // rx_buffer[index++]=ch; // if(ch==0x0D) { // pc.putc(0x0A); // rx_buffer[--index]='\0'; // index=0; // flag=1; // } //} // //void set_speed(void) //{ // int speed; // speed = atoi((const char*)rx_buffer); // if(speed>78) { // speed=78; // } // if(speed<-78) { // speed=-78; // } // motor1.setTarget(speed); // motor1.setTarget(60); // pc.printf(" Set speed = %d\r\n", speed); // //} int main() { nh.initNode(); nh.advertise(rela_dist_pub); nh.advertise(rpm_pub); nh.advertise(ultra_reflection_pub); nh.advertise(flaw_info_pub); nh.advertise(curr_vel_pub); tachoINT1.fall(&update_current); tachoINT1.rise(&update_current); tachoINT2.fall(&update_current); tachoINT2.rise(&update_current); // pc.attach(callback(rx_cb)); int rpm; float velocity; float reladistance; //m단위 float cumdistance; float ultra_reflect = 0; float flaw_location = 0; // char flaw_curr_state[10] = "stable"; motor1.setTarget(60); while(1) { flag=0; // pc.printf("Enter the value for speed [-78,78]\r\n"); while(flag!=1) { rpm = motor1.getRPM(); cumdistance = motor1.CalculateCumDis(); // 누적거리 reladistance = motor1.CalculateRelaDis(); // 상대거리 velocity = motor1.CalculateVelocity(); // cum_dist.data = cumdistance; // cum_dist_pub.publish(&cum_dist); rela_dist.data = reladistance; rela_dist_pub.publish(&rela_dist); curr_rpm.data = rpm; rpm_pub.publish(&curr_rpm); curr_vel.data = velocity; curr_vel_pub.publish(&curr_vel); ultra_reflection.data = ultra_reflect; ultra_reflection_pub.publish(&ultra_reflection); flaw_info.x = cumdistance; flaw_info.y = flaw_location; flaw_info_pub.publish(&flaw_info); flaw_location += 0.05; if(flaw_location > 1){ flaw_location = 0; } ultra_reflect += 0.1; if(ultra_reflect > 0.5){ ultra_reflect = 0; } // flaw_state.data = flaw_curr_state; // flaw_state_pub.publish(&flaw_state); // printf("Rpm: %f\r\n",rpm); // printf("cumdistance: %f\r\n",cumdistance); // printf("reladistance: %f\r\n",reladistance); nh.spinOnce(); wait(1); } // motor1.setTarget(60); // set_speed(); } }