Projet Drone de surveillance du labo TRSE (INGESUP)

Dependencies:   mbed PID ADXL345 Camera_LS_Y201 ITG3200 RangeFinder mbos xbee_lib Motor Servo

main.cpp

Committer:
Gaetan
Date:
2014-03-19
Revision:
36:1bbd2fb7d2c8
Parent:
35:95cb34636703

File content as of revision 36:1bbd2fb7d2c8:

#define MAVLINK_TEST 1

#if MAVLINK_TEST

#include "mbed.h"
#include "xbee.h"
#include "MAVLink_API/MAVLink_API.h"
#include "MAVlink/include/common/common.h"
#include "mbos.h"
#include "os.h"
 
Serial pc(USBTX, USBRX);
mavLink_API mvlk(2.0);
mbos os(3, 2); //os just for compiling
//xbee myXbee(p9, p10, p11);
 
 
 int main() {

     pc.baud(38400);

    while(1){
        if(mvlk.messageReadyToBeSent)
        {
            for(int i = 0 ; i < mvlk.len ; i++){
                pc.putc(mvlk.buf[i]);
            }
            mvlk.messageReadyToBeSent = false;
        }
        while(pc.readable()){
            mvlk.getMessage(pc.getc());
        }
        //pc.printf("size : %d\n", len);
        //myXbee.SendData((char*)buf, (int)len);
        //pc.puts((const char*)buf);
        //for(int i = 0 ; i < len ; i++){
            //pc.putc(buf[i]);
        //}
        //pc.putc(buf[len-2]);
        
        wait(1.0); 
    }

    /*for(int i = 0 ; i < len ; i++){
            pc.printf("%x ", buf[i]);
    }
    pc.printf("\n\r");*/
}
//uart0_send(buf, len);
#else

 /* Copyright (c) 2012 - 2013 Gaëtan PLEYBER
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED 
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
 /*
 * Description
 * Input
 * Output
 */


#include "mbed.h"                    
#include "mbos.h"
#include "Module_Communication.h"
#include "Module_Mouvement.h"
#include "os.h"

//void task1(void);                       // task function prototypes
//void task2(void);

/*DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);*/
mbos os(3, 2);                          // Instantiate mbos with 7 tasks & 7 timer    


int main(void)
{
    
   //exemple d'utilisation du système d'exploitation :
   
   //   1 création des tâches
   os.CreateTask(TASK_COM, TASK_COM_PRIO, TASK_COM_STACK_SZ, moduleCommunicationReception);
   os.CreateTask(TASK_MOUV, TASK_MOUV_PRIO, TASK_MOUV_STACK_SZ, ModuleMouvement_Task);
   os.CreateTask(TASK_ENVOI, TASK_ENVOI_PRIO, TASK_ENVOI_STACK_SZ, moduleCommunicationEnvoi);
   /*os.CreateTask(TASK_MOUV, TASK_MOUV_PRIO, TASK_MOUV_STACK_SZ, task1);
   os.CreateTask(TASK_TRAJ, TASK_TRAJ_PRIO, TASK_TRAJ_STACK_SZ, task2);
   os.CreateTask(TASK_BATT, TASK_BATT_PRIO, TASK_BATT_STACK_SZ, task1);
   os.CreateTask(TASK_VIDEO, TASK_VIDEO_PRIO, TASK_VIDEO_STACK_SZ, task2);
   os.CreateTask(TASK_ARRET_URGENT, TASK_ARRET_URGENT_PRIO, TASK_ARRET_URGENT_STACK_SZ, task1);*/

   os.CreateTimer(TIMER_COM_ID, TASK_COM, TIMER_EVENT);
   os.CreateTimer(TIMER_MOUV_ID, TASK_MOUV, TIMER_EVENT);
   /*os.CreateTimer(TIMER_MOUV_ID, TIMER_MOUV_PERIOD, TIMER_MOUV_EVENT);
   os.CreateTimer(TIMER_BATT_ID, TIMER_BATT_PERIOD, TIMER_BATT_EVENT);
   os.CreateTimer(TIMER_VIDEO_ID, TIMER_VIDEO_PERIOD, TIMER_VIDEO_EVENT);
   os.CreateTimer(TIMER_ARRET_URGENT_ID, TIMER_ARRET_URGENT_PERIOD, TIMER_ARRET_URGENT_EVENT);*/

    // Start mbos
   os.Start();
    // never  return!

    /*C_ModuleCommunication com = C_ModuleCommunication();
    com.receptionDeTrame();*/
}


 /* Exemple de point d'entré associée a une tâche.
  *
  * Attention : le point d'entré d'une tâche ne doit pas être une methode membre d'un objet. 
  * En effet, le point d'entré doit être considéré de la même manière qu'un "void main(void)"
  * Au début du point d'entré l'objet peut être instancié.
  *
  */
  
/*void task1(void)
{
    os.SetTimer(TIMER_COM_ID, TIMER_COM_PERIOD, TIMER_COM_PERIOD);
    while(1){
        os.WaitEvent(TIMER_EVENT);
        led1 = !led1;
        os.SetEvent(COMMUNICATION_EVENT, TASK_DETEC);
    }
}*/

/*void task2(void)
{
    os.SetTimer(TIMER_DETEC_ID, TIMER_DETEC_PERIOD, TIMER_DETEC_PERIOD);
    while(1){
        os.WaitEvent(TIMER_EVENT | COMMUNICATION_EVENT); //Attention : la methode WaitEvent réinitialise les évènements à 0*/
        /*switch(os.GetEvent()){ // Avec un switch on ne traite qu'un seul évènement reçu. Il y a risque de ne pas traiter tous les évènements reçus.
            case TIMER_EVENT:
                led2 = !led2;
            break;
            case COMMUNICATION_EVENT:
                led3 = !led3;
            break;
        }*/
        //Le Test de chaque flag d'évènement permet de tous les traiter. Au maximum, une tâche peut ainsi traiter 8 évènement, correspondant à chaque flag d'un octet
        
        /*if(os.GetEvent() & TIMER_EVENT) led2 = !led2; 
        if(os.GetEvent() & COMMUNICATION_EVENT) led3 = !led3;
   }
}*/

#endif