Projet Drone de surveillance du labo TRSE (INGESUP)

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

Revision:
33:f85d47baaeb4
Parent:
29:a0800d3da787
Parent:
32:74608bce78f6
Child:
34:4466839f5bb7
--- a/main.cpp	Wed Apr 17 15:52:51 2013 +0000
+++ b/main.cpp	Sat Apr 27 11:29:23 2013 +0000
@@ -17,76 +17,85 @@
  * Output
  */
 
-/*#include "mbed.h"
-#include "mbos.h"
 
-DigitalOut myled(LED1);
-
-int main() {
-    while(1) {
-        myled = 1;
-        wait(0.2);
-        myled = 0;
-        wait(0.2);
-        
-        //modification
-    }
-}*/
 #include "mbed.h"                    
 #include "mbos.h"
 #include "Module_Communication.h"
- 
-#define TASK1_ID                1       // Id for task 1 (idle task is 0)
-#define TASK1_PRIO              50      // priority for task 1
-#define TASK1_STACK_SZ          32      // stack size for task 1 in words 
-#define TASK2_ID                2       // Id for task 2 
-#define TASK2_PRIO              60      // priority for task 2
-#define TASK2_STACK_SZ          32      // stack size for task 2 in words 
-#define TIMER0_ID               0       // Id for timer 0
-#define TIMER0_PERIOD           1000    // Time period in milliseconds
-#define TIMER0_EVENT            1       // Event flag (1 << 0)
-#define T1_TO_T2_EVENT          2       // Event flag (1 << 1)
+#include "os.h"
 
 void task1(void);                       // task function prototypes
 void task2(void);
 
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
-mbos os(2, 1);                          // Instantiate mbos with 2 tasks & 1 timer    
+DigitalOut led3(LED3);
+mbos os(2, 2);                          // Instantiate mbos with 7 tasks & 7 timer    
+
 
 int main(void)
 {
-/*
-   // Configure tasks and timers
-   os.CreateTask(TASK1_ID, TASK1_PRIO, TASK1_STACK_SZ, task1);
-   os.CreateTask(TASK2_ID, TASK2_PRIO, TASK2_STACK_SZ, task2);
-   os.CreateTimer(TIMER0_ID, TIMER0_EVENT, TASK1_ID);
+
+   //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, task1);
+   os.CreateTask(TASK_DETEC, TASK_DETEC_PRIO, TASK_DETEC_STACK_SZ, task2);
+   /*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_DETEC_ID, TASK_DETEC, 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();
+
+    /*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(TIMER0_ID, TIMER0_PERIOD, TIMER0_PERIOD);
+    os.SetTimer(TIMER_COM_ID, TIMER_COM_PERIOD, TIMER_COM_PERIOD);
     while(1){
-        os.WaitEvent(TIMER0_EVENT);
+        os.WaitEvent(TIMER_EVENT);
         led1 = !led1;
-        os.SetEvent(T1_TO_T2_EVENT, TASK2_ID);
+        os.SetEvent(COMMUNICATION_EVENT, TASK_DETEC);
     }
 }
 
 void task2(void)
 {
+    os.SetTimer(TIMER_DETEC_ID, TIMER_DETEC_PERIOD, TIMER_DETEC_PERIOD);
     while(1){
-        os.WaitEvent(T1_TO_T2_EVENT);
-        led2 = 1;
-        wait_ms(100);
-        led2 = 0;
+        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;
    }
 }
-/*@endcode
- */
\ No newline at end of file