This Lab4 Robot Car Project.

Dependencies:   LSM9DS0 Motor Servo mbed

Fork of Lab4_Robot_Project_1 by ECE4180

main.cpp

Committer:
ldeng31
Date:
2015-10-20
Revision:
0:8239206a2f26
Child:
1:4b76a9beeae6
Child:
2:26960ab3c751

File content as of revision 0:8239206a2f26:

// Hello World to sweep a servo through its full range

#include "mbed.h"
#include "Servo.h"
#include "Motor.h"
#include "LSM9DS0.h"

// SDO_XM and SDO_G are pulled up, so our addresses are:
#define LSM9DS0_XM_ADDR  0x1D // Would be 0x1E if SDO_XM is LOW
#define LSM9DS0_G_ADDR   0x6B // Would be 0x6A if SDO_G is LOW

// refresh time. set to 500 for checking the Data on pc.
#define REFRESH_TIME_MS 500

LSM9DS0 imu(p9, p10, LSM9DS0_G_ADDR, LSM9DS0_XM_ADDR);//IMU, read the compass value. 
Serial pc(USBTX, USBRX);//Only use this during the testing phase for pc debug.
Motor MR(p25, p6, p5); // Motor A pwm, fwd, rev
Motor ML(p26, p7, p8);//Motor B pwm, fwd, rev
DigitalOut STBY(p11); // Set STBY = 1, enable both motor; Set STBY = 0; disable both motor. 
Servo myservo(p21);//PWM control for Servo
AnalogIn IR(p20); //IR sensor
AnalogIn LeftEncoder(p19);

void TurnRight()
{
    //imu.readMag();
    /*float current_dir = imu.calcHeading();
    if (current_dir>=270)
    {
        current_dir -=360;
    }
    
    float target_dir = current_dir + 90;
    */
    
      //pc.printf("%.2f",current_dir);
      //pc.printf("       Targe:    %.2f\n",target_dir);
      ML.speed(-0.3);
      MR.speed(0.3);
      //imu.readMag();
      
      //current_dir = imu.calcHeading();
      
      /*if (current_dir>=270)
      {
            current_dir -=360;
      }*/
      wait(2.1);
     
      ML.speed(0.0);
      MR.speed(0.0);
}    

void TurnLeft()
{
    
      ML.speed(0.3);
      MR.speed(-0.3);
    
      wait(2.1);
     
      ML.speed(0.0);
      MR.speed(0.0);
}    

void Straight()
{
    ML.speed(-0.5);
    MR.speed(-0.5);
    wait(0.01);
}

void LookLeft()
{
    myservo = 0.0;
    
}

void LookRight()
{
    myservo = 0.9;
}

void LookStraight()
{
    myservo = 0.5;
}

int main() {
         
     STBY = 1;
     pc.baud(9600);
    imu.begin();
    LookStraight();
    wait(2.0);
    while(true)
    {
        if(IR>0.6)
        {
            LookLeft();
            wait(2.0);
            if(IR >0.6);
                {
                    LookRight();
                    wait(2.0);
                }
        }
 //           Straight();

   //     wait(10.0);
     //   TurnRight();
       // wait(2.0);
        //TurnLeft();
        
        //LookLeft();
        //wait(2);
        //myservo =  0.5;
        //imu.readMag();
        //float heading_turn = imu.calcHeading();
        //float Turn_Right   = heading + 90;
        
      //if((heading_turn - Turn_Right)<0.1)
        //{
      //    MA.speed(1.0f); MB.speed(1.0f); 
        //  pc.printf("%.2f\n",LeftEncoder.read());
      //  wait(5);
      else
        LookStraight();
        wait(1.0);
    }

      
    
}