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