complete motor

Dependencies:   BufferedSerial motor_sn7544

main.cpp

Committer:
Jeonghoon
Date:
2019-06-27
Revision:
7:13dd93a0efe8
Parent:
5:e6f9768e1438
Child:
8:efe5a5b1f10a

File content as of revision 7:13dd93a0efe8:

#include "mbed.h"
#include "motor.h"
#include <ros.h>
#include <std_msgs/Float64.h>
#include <std_msgs/Float32.h>
#include <std_msgs/Int32.h>

std_msgs::Float64 cum_dist;
std_msgs::Float32 rela_dist;
std_msgs::Int32 curr_rpm;


ros::NodeHandle nh ;
ros::Publisher cum_dist_pub("cum_dist", &cum_dist);
ros::Publisher rela_dist_pub("rela_dist", &rela_dist);
ros::Publisher rpm_pub("rpm", &curr_rpm);

MotorCtl motor1(D3,D12,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(cum_dist_pub);
    nh.advertise(rela_dist_pub);
    nh.advertise(rpm_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 reladistance; //m단위
    float cumdistance;

    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(); // 상대거리
    
            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);            
            
            printf("Rpm: %f\r\n",rpm);
            printf("cumdistance: %f\r\n",cumdistance);
            printf("reladistance: %f\r\n",reladistance);
            wait(1);
        }
//        motor1.setTarget(60);
        set_speed();
    }

}