a program with MD25

Dependencies:   BufferedSerial MD25 Servo mbed

main.cpp

Committer:
eembed
Date:
2017-01-26
Revision:
0:7e2f1e96c3d9

File content as of revision 0:7e2f1e96c3d9:

#include "mbed.h"
#include "MD25.h"
#include "Servo.h"
#include "math.h"
#include "BufferedSerial.h"
 
Serial pc (USBTX, USBRX);
BufferedSerial cam1 (PA_9, PA_10, 256, 4);
BufferedSerial cam2 (PC_6, PC_7, 256, 4);
 
MD25 Motor_Comm (PB_9,PB_8);     //Define serial comms
Servo Servo1 (PA_8);             //Define Servo Pin
Servo Servo2 (PB_10);

//Global Variables
int32_t Enc1_cnt = 0;
float speed1 = 0.0;
float speed2 = 0.0;

int readFromSerial (BufferedSerial& serial)
{
    int value = 0;
    char temp = 0;
  //  pc.printf("hi \n");
    while (serial.readable())
    {        
        temp = serial.getc();
        pc.printf("temp = %d\n", temp); //-------------
       // if (temp == '\n') break;
   //     else value = value * 10 + (temp - '0');
   //     pc.printf("value = %d\n",value);
        
    }
    //pc.printf("value = %d\n",value);
    return temp;
}

void initializeMotor (MD25& motor)
{
    motor.setMode(1);
    motor.setCommand(0x31);    //Enables automatic speed regulation
    motor.setCommand(0x20);    //Resets the encoder registers to zero
    motor.setCommand(0x32);    //Disables 2 second timeout of motors
    motor.setSpeedRegisters(0,0);  //Motor Start Speed Off
}

int main()
{
    float angle1 = 1.0;           //Start Angle
    float angle2 = 1.0;           //Start Angle
    cam1.baud(9600);
    cam2.baud(9600);
    
    //pc.printf("Encoder count = %d\n", Enc1_cnt);
    initializeMotor (Motor_Comm);
    
    float range = 0.00075;
    Servo1.calibrate(range, 30.0);
    Servo1.write(angle1);
    Servo2.calibrate(range, 30.0);
    Servo2.write(angle2);
    
    wait(1);
    
    while(1)
    {
        while (angle1 >= 0 && angle2 >= 0)
        {
            angle1 = readFromSerial(cam1);
            angle2 = readFromSerial(cam2);
            pc.printf("A1 = %f\n", angle1); 
            pc.printf("A2 = %f\n", angle2); 
            Servo1.write(angle1);
            Servo2.write(angle2);
            speed1 = 50 / (cos(angle1));  // Division by 0 error?
            speed2 = 50 / (cos(angle2));  // Division by 0 error?
            Motor_Comm.setSpeedRegisters(speed1, speed2);
            //Enc1_cnt = Motor_Comm.getEncoder1();
            //pc.printf("Encoder count = %d\n", Enc1_cnt);
         //   angle1 = angle1 - 0.05;
         //   angle2 = angle2 - 0.05;
            wait(1.5);
        }
        Motor_Comm.stopMotors(); 
    }
}