Robot's source code

Dependencies:   mbed

main.cpp

Committer:
Near32
Date:
2015-03-18
Revision:
41:c04c2ec37aad
Parent:
40:83ce8d1072ef
Child:
42:fcb48e2fc426

File content as of revision 41:c04c2ec37aad:

#include "mbed.h"

#include "defines.h"

#include "QEI.h"
#include "Map.h"
#include "AX12.h"

#include "Asserv.h"
#include "Motor.h"
/*----------------------------------------------------------------------------------------------*/
/*Serial*/    
Serial logger(OUT_TX, OUT_RX); // tx, rx
/*----------------------------------------------------------------------------------------------*/

/* --- Initialisation de la liste des obstable --- */
int Obstacle::lastId = 0;

int main()
{
    logger.printf("Initialisation...\r\n");
    //mbed
    /*
    PwmOut pw1(p22);
    DigitalOut dir1(p21);
    PwmOut pw2(p24);
    DigitalOut dir2(p23);
    */
    
    //mbuino
    /*
    PwmOut pw1(P0_17);
    DigitalOut dir1(P0_18);
    PwmOut pw2(P0_23);
    DigitalOut dir2(P0_19);
    */
    /*
    //nucleo
    PwmOut pw1(PB_8);
    DigitalOut dir1(D12);
    PwmOut pw2(PB_9);
    DigitalOut dir2(D13);
    */
    //nucleo
    
    PwmOut pw1(PWM_MOT1);
    DigitalOut dir1(DIR_MOT1);
    PwmOut pw2(PWM_MOT2);
    DigitalOut dir2(DIR_MOT2);
    
        
    Motor motorR(PWM_MOT1,DIR_MOT1);
    Motor motorL(PWM_MOT2,DIR_MOT2);    
    logger.printf("mise a jour des pwm.\r\n");
    Timer t;
    
    AX12 test(PA_9,NC,0x05,250000);
    AnalogIn ain0(PA_0);
    AnalogIn ain1(PA_1);
    AnalogIn ain2(PA_4);
    AnalogIn ain3(PB_0);
    AnalogIn ain4(PC_1);
    
    /*----------------------------------------------------------------------------------------------*/
    /*Odometry*/
    QEI qei_left(PB_3,PA_10,NC,1024*4,QEI::X4_ENCODING);
    QEI qei_right(PB_4,PB_5,NC,1024*4,QEI::X4_ENCODING);
    Odometry odometry(&qei_left,&qei_right,63/2.,63/2.,280);
    DigitalOut led(LED1);
    
    test.SetMode(0); // Position
    
    /*char dataOff[] = {0};
    char dataOn[] = {1};
    while(1)
    {
        logger.printf("0: %f\r\n",ain0.read()*3.3);
        logger.printf("1: %f\r\n",ain1.read()*3.3);
        logger.printf("2: %f\r\n",ain2.read()*3.3);
        logger.printf("3: %f\r\n",ain3.read()*3.3);
        logger.printf("4: %f\r\n\r\n",ain4.read()*3.3);
        led = !led;
        wait(1);
        motorR.setSpeed(1.0);
        wait(1);
        motorR.setSpeed(0.0);
    }*/
    bool testOdo = false;
    
    
    Asserv<float> instanceAsserv(&odometry);
    
    /*----------------------------------------------------------------------------------------------*/
    instanceAsserv.setGoal( (float)10,(float)0, (float)0);
    
    logger.printf("Debut boucle.\r\n");
    
    while(1)
    {       
        //Asservissement :
        
        t.start();
        
        instanceAsserv.update((float)t.read());
        logger.printf("2\r\n");
        Mat<float> X( instanceAsserv.getX() );
        logger.printf("3\r\n");
        float phi_r = instanceAsserv.getPhiR();
        float phi_l = instanceAsserv.getPhiL();
        float phi_max = instanceAsserv.getPhiMax();
        logger.printf(" x : %f ;\t y : %f ;\t theta : %f ;\t phiD = %f ;\t phiG = %f \n\r",X.get(1,1),X.get(2,1),X.get(3,1), X.get(4,1), X.get(5,1) );
        //pcs.printf("%f : %f : %f\n", (double)odometry.getX()*100,(double)odometry.getY()*100,(double)odometry.getTheta()*180/3.14);                                            
        //blue.printf("State : \n\r");
        //(instanceAsserv.getX()).afficherMblue();
        //blue.printf("Odometry : \n\r");
        //z.afficherMblue();  
        motorR.setSpeed(phi_r/phi_max);
        motorL.setSpeed(phi_l/phi_max);     
        
        //Timer Handling :
        t.stop();
        logger.printf("%f s ecoulee.\n\r", t.read());
        t.reset();
        t.start();                
    }
        
    
    while(1)
    {
        //setPWM(&pw1,0.0);
        //setPWM(&pw2,0.0);
        pw1.write(0.0);
        pw2.write(0.0);
        led = !led;
        wait(1);
    }
}