mmotor / Mbed 2 deprecated MarsRover_ExoMars____

Dependencies:   EPOS2 mbed-rtos mbed

Fork of MarsRover_ExoMars by mmotor

main.cpp

Committer:
joe_feubli
Date:
2016-10-14
Revision:
9:039318b9096e
Parent:
8:98d4028cdea6
Child:
10:1c42bbd596dc

File content as of revision 9:039318b9096e:

#include "mbed.h"
#include "EPOS2.h"


//***********************************************************************************************************************************//
//*** Global_Var  *******************************************************************************************************************//
//***********************************************************************************************************************************//

Serial pc(USBTX, USBRX);             // (tx, rx)
CAN can(p9, p10);                    // Can Pin def

DigitalIn usv_ready(p23);
InterruptIn buffering(p24);
DigitalIn replace_battery(p25);

DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);

bool node1_homed = false;
bool node2_homed = false;
bool node3_homed = false;
bool node4_homed = true;
bool node5_homed = false;
bool node6_homed = true;
bool node7_homed = true;

int homing = false;
int ready = false;
int ausfahren = false;
int einfahren = false;
int usv = false;     
int current_step = 1;   //HOMING
int ausfahren_step = 1;
int einfahren_step = 1;
int usv_step = 1;     

void interrupt_usv(){
    current_step = 5;
    wait_ms(10);
    }           
                  
int main(){                                          ///////// Main
        led1 = 1;
        pc.baud(9600);
        
        buffering.rise(&interrupt_usv);               //Interrupt für USV
        
        wait(0.5);                                    //Wartezeit bis Epos2 24/5 aufgestartet ist mit Lade-LED
        led2 = 1;
        wait(0.5);
        led3 = 1;
        wait(0.5);
        led4 = 1;
        wait(0.5);       
        
        can.frequency(1000000);                     //Define Can baud in bit/s
    
        CANopen canOpen(&can, 0.001);               //Define CanOpen Network(can function, periode of the CANopen driver in sec)
        canOpen.start();                            //Start defined CanOpen Network
    
        EPOS2 MyEpos1(&canOpen, 1);                 //Define and connect the EPOS2 to the CanOpen Network(canOpen function, Node ID)
        EPOS2 MyEpos2(&canOpen, 2);                 //Define and connect the EPOS2 to the CanOpen Network(canOpen function, Node ID)                 
        EPOS2 MyEpos3(&canOpen, 3);                 //Define and connect the EPOS2 to the CanOpen Network(canOpen function, Node ID)
        EPOS2 MyEpos4(&canOpen, 4);                 //Define and connect the EPOS2 to the CanOpen Network(canOpen function, Node ID)
        EPOS2 MyEpos5(&canOpen, 5);                 //Define and connect the EPOS2 to the CanOpen Network(canOpen function, Node ID)
        EPOS2 MyEpos6(&canOpen, 6);                 //Define and connect the EPOS2 to the CanOpen Network(canOpen function, Node ID)
        EPOS2 MyEpos7(&canOpen, 7);                 //Define and connect the EPOS2 to the CanOpen Network(canOpen function, Node ID)
        
        pc.printf("Initialisation abgeschlossen\n");
        
        MyEpos1.Reset();
        MyEpos2.Reset();
        MyEpos3.Reset();
        MyEpos4.Reset();
        MyEpos5.Reset();
        MyEpos6.Reset();
        MyEpos7.Reset();
        wait(0.1);
        
        led1 = 0;
        led2 = 0;
        led3 = 0;
        led4 = 0;
        MyEpos5.SetDigOut(4, 1);
        
           
        while(1){ 
            switch (current_step){
                case 1://HOMING:
                    led1 = 1;
                    
                    MyEpos1.Power(1);
                    MyEpos2.Power(1);
                    MyEpos3.Power(1);
                    MyEpos4.Power(1);
                    MyEpos5.Power(1);
                    MyEpos6.Power(1);
                    MyEpos7.Power(1);
                    
                    /***********************HOMING*************************/
                    
                    if (node5_homed == false){
                        MyEpos5.Homing(); //Kopf
                        node5_homed = true;
                        break;
                        }
                        
                    if (node1_homed == false){
                        MyEpos1.Homing(); //Solarpanel_Aussen_Links
                        node1_homed = true;
                        break;
                        }
                    
                    if (node3_homed == false){
                        MyEpos3.Homing(); //Solarpanel_Aussen_Rechts
                        node3_homed = true;
                        break;
                        }
                    
                    if (node7_homed == false){
                        MyEpos7.Homing(); //Bohrer
                        node7_homed = true;
                        break;
                        }
                    
                    if (node1_homed == true and node2_homed == false and node5_homed == true){
                        MyEpos5.MoveAbsolute(-3000,500,100,100); //Kopf
                        MyEpos2.Homing(); //Solarpanel_Innen_Links
                        MyEpos5.MoveAbsolute(500,100,50,50); //Kopf
                        wait(3);
                        node2_homed = true;
                        break;
                        }
                        
                    if (node3_homed == true and node4_homed == false){
                        MyEpos4.Homing(); //Solarpanel_Innen_Rechts
                        node4_homed = true;
                        break;
                        }
                        
                    if (node7_homed == true and node6_homed == false){
                        MyEpos6.Homing();//Bohrgestell
                        node6_homed = true;
                        break;
                        }
                    if (node1_homed == true and node2_homed == true and node3_homed == true and node4_homed == true and node5_homed == true and node6_homed == true and node7_homed == true){
                        current_step = 2;//BEREIT;
                        MyEpos1.Power(0);
                        MyEpos2.Power(0);
                        MyEpos3.Power(0);
                        MyEpos4.Power(0);
                        wait(0.1);
                        MyEpos5.Power(0);
                        MyEpos6.Power(0);
                        MyEpos7.Power(0);
                        }
         
                    led1 = 0;
                    break;
                    
             
                case 2://BEREIT:
                    led2 = 1;
                    MyEpos5.SetDigOut(4,0);
                    if (MyEpos5.GetDigIn(3) == 1){
                        MyEpos5.SetDigOut(4,1);
                        current_step = 3; //ABLAUF
                        wait_ms(10);
                        MyEpos1.Power(1);
                        MyEpos2.Power(1);
                        MyEpos3.Power(1);
//                        MyEpos4.Power(1);
                        MyEpos5.Power(1);
//                        MyEpos6.Power(1);
//                        MyEpos7.Power(1);
                        }
                    wait(1);
                    led2 = 0;
                    break;


                case 3://ABLAUF:
                    led3 = 1;
                    if (einfahren == false){
                        switch (ausfahren_step){
                            case 1:
                                MyEpos5.MoveAbsolute(-150000,800,100,100); //Kopf
                                ausfahren_step = 2;
                                wait(1);
                                break;
                                
                            case 2:
                                if (MyEpos5.TargetReached()==1){
                                    MyEpos1.MoveAbsolute(0,500,100,100); //Panel Aussen Links
                                    MyEpos3.MoveAbsolute(0,500,100,100); //Panel Aussen Rechts
                                    MyEpos2.MoveAbsolute(310000,500,100,100); //Panel Aussen Links
                                    wait(0.1);
                                    ausfahren_step = 3;
                                    }
                                break;
        
                            case 3:
                                if (MyEpos2.TargetReached()==1){
                                    MyEpos1.MoveAbsolute(318000,500,100,100); //Panel Aussen Links
                                    MyEpos3.MoveAbsolute(-318000,500,100,100); //Panel Aussen Rechts
                                    
                                    ausfahren_step = 4;
                                    wait(1);
                                    }
                                break;
                                
                            case 4:
                                if (MyEpos1.TargetReached()==1 and MyEpos3.TargetReached()==1){
                                    einfahren = true;
                                    einfahren_step = 1;
                                    wait(1);
                                    }
                                break;
                            }//switch ausfahren_step
                        }//if (einfahren == false)
                    
                    if (einfahren == true){
                        ausfahren_step = 1;
                        switch (einfahren_step){
                            case 1:
                                MyEpos1.MoveAbsolute(2000,500,100,100); //Panel Aussen Links
                                MyEpos3.MoveAbsolute(-2000,500,100,100); //Panel Aussen Rechts
                                einfahren_step = 2;
                                wait(1);
                                break;
                                
                            case 2:
                                if (MyEpos1.TargetReached()==1 and MyEpos3.TargetReached()==1){
//                                    wait(1);
                                    MyEpos1.MoveAbsolute(0,500,100,100); //Panel Aussen Links
                                    MyEpos3.MoveAbsolute(0,500,100,100); //Panel Aussen Rechts
                                    MyEpos2.MoveAbsolute(0,500,100,100); //Panel Aussen Links
                                    einfahren_step = 3;
                                    wait(1);
                                    }
                                break;
                            
                            case 3:
                                if (MyEpos2.TargetReached()==1){
                                    MyEpos5.MoveAbsolute(0,500,100,100); //Kopf
                                    wait(1);
                                    MyEpos1.Power(0);
                                    MyEpos2.Power(0);
                                    MyEpos3.Power(0);
                                    MyEpos4.Power(0);
                                    einfahren_step = 4;
                                    }
                                break;
                            
                            case 4:
                                if (MyEpos5.TargetReached()==1){
                                    einfahren = false;
                                    current_step = 2;
                                    wait(1);
                                    MyEpos5.Power(0);
                                    }
                                break; 
                            }//switch einfahren_step
                        }//if (einfahren == true)
                    led3 = 0;
                    break;
                   
                case 5://USV:
                    led4 = 1;
                    MyEpos5.SetDigOut(4,1);
                    switch (usv_step){
                        case 1:
                            MyEpos1.Power(1);
                            MyEpos2.Power(1);
                            MyEpos3.Power(1);
                            MyEpos4.Power(1);
                            MyEpos5.Power(1);
                            MyEpos6.Power(1);
                            MyEpos7.Power(1);   
                            wait(0.1);                       

                            MyEpos1.MoveAbsolute(2000,500,500,500); //Panel_Aussen_Links
                            MyEpos3.MoveAbsolute(-2000,500,500,500); //Panel_Aussen_Rechts        
//                            MyEpos7.MoveAbsolute(0,500,500,500); // Bohrer
                            wait(0.1);
                            usv_step = 2;
                            break;
                            
                        case 2:
                            if (MyEpos1.TargetReached()==1 and MyEpos3.TargetReached()==1 /*and MyEpos7.TargetReached()==1*/){
                                usv_step = 3;
                                wait_ms(10);
                                }
                            break;
                            
                        case 3:
                            MyEpos1.MoveAbsolute(0,500,100,100); //Panel Aussen Links
                            MyEpos3.MoveAbsolute(0,500,100,100); //Panel Aussen Rechts
                            MyEpos2.MoveAbsolute(0,500,500,500); //Panel_Innen_Links
//                            MyEpos4.MoveAbsolute(0,500,500,500); //Panel_Innen_Links
//                            MyEpos6.MoveAbsolute(0,500,500,500); //Panel_Innen_Links
                            wait(0.1);
                                
                            if (MyEpos2.TargetReached()==1 /*and MyEpos4.TargetReached()==1*/){
                                usv_step = 4;
                                wait_ms(10);
                                }
                            break;
                            
                        case 4:
                            MyEpos5.MoveAbsolute(0,800,500,500); //Kopf
                            wait(0.1);
                            if (MyEpos5.TargetReached()==1 /*and MyEpos6.TargetReached()==1*/){
                                usv_step = 5;
                                wait(0.1);
                                }
                            break;
                            
                        case 5:
                            MyEpos1.Power(0);
                            MyEpos2.Power(0);
                            MyEpos3.Power(0);
                            MyEpos4.Power(0);
                            MyEpos5.Power(0);
                            MyEpos6.Power(0);
                            MyEpos7.Power(0);
                            usv_step = 6;
                            break;
                            
                        case 6:
                            if(buffering == 1){
                                led3 = 1;
                                } else {
                                    led3 = 0;
                                    current_step=1;
                                    usv_step=1;
                                    ausfahren_step=1;
                                    einfahren_step=1;
                                    }
                            wait(1);
                            break;
                        }
                    led4 = 0;        
                    break;
        
    
                case 6://Test                
                    break;
                    
                }//switch current_step         
            }//while
    }//main