App S5 / Mbed 2 deprecated S05APP2

Dependencies:   mbed mbed-rtos

Revision:
7:e9f5280d47b3
Parent:
6:6da143aff561
Child:
8:56f2b8db5361
diff -r 6da143aff561 -r e9f5280d47b3 main.cpp
--- a/main.cpp	Fri Jan 27 04:21:45 2017 +0000
+++ b/main.cpp	Fri Jan 27 14:21:41 2017 +0000
@@ -1,6 +1,7 @@
 #include "mbed.h"
 #include "rtos.h"
 
+Mutex createEvent;
 Ticker ticker;
 DigitalIn en_1(p15);
 DigitalIn en_2(p16);
@@ -20,9 +21,27 @@
 float echantillons2[5];
 float seuil = 0.125;
 
+typedef struct {
+  bool    type;      //Numérique = 0, analogique = 1
+  time_t  time;      //Le temps au moment ou l'évènement s'est produit.
+  uint8_t pinNumber; //Le numéro de la pin
+} mail_t;
+
+Mail<mail_t, 20> mail_box; //La taille du buffer est à déterminer
 // -------------------------------------------------------
 // -------------------------------------------------------
 
+void createMail(bool type, uint8_t pinNumber)
+{
+    createEvent.lock();
+    mail_t *mail     = mail_box.alloc();
+    mail->type      = type;
+    mail->time      = time(NULL);
+    mail->pinNumber = pinNumber;
+    createEvent.unlock();
+    mail_box.put(mail);
+}  
+
 void lecture_analog(void const *args) {
     int i = 0;
     float moyenne_passee1 = -1;
@@ -49,6 +68,7 @@
             if (moyenne_passee1 != -1) {
                 if ((std::abs(1 - (moyenne_courante1 / moyenne_passee1))) > seuil) {
                     // Génération éventuelle d'un événement
+                    createMail(1, 19);
                     printf("La variation de la moyenne 1 depasse le seuil fixe\n");
                 
                 }
@@ -56,6 +76,7 @@
             if (moyenne_passee2 != -1) {
                 if ((std::abs(1 - (moyenne_courante2 / moyenne_passee2))) > seuil) {
                     // Génération éventuelle d'un événement
+                    createMail(1, 20);
                     printf("La variation de la moyenne 2 depasse le seuil fixe\n");
                 
                 }
@@ -88,16 +109,18 @@
             Thread::signal_wait(0x2);
             
             if (en_1 == 1 && entreenum_1 == en_1.read()) {
+                // Génération d'un évènement...
                 printf("Entree numerique 1 est stable\n");
-                // Génération d'un évènement...
+                createMail(0, 15);
                 
             } else {
                 // Entree numerique 1 n'est pas stable
                 Thread::yield();
             }
             if (en_2 == 1 && entreenum_2 == en_2.read()) {
+                // Génération d'un évènement...
                 printf("Entree numerique 2 est stable\n");
-                // Génération d'un évènement...
+                createMail(0, 16);
                 
             } else {
                 // Entre numerique 2 n'est pas stable
@@ -113,7 +136,15 @@
 void collection(void const *args) {
     while (true) {
         // attente et lecture d'un événement
-        // écriture de l'événement en sortie (port série)
+        osEvent evt = mail_box.get();
+        if (evt.status == osEventMail) {
+            mail_t *mail = (mail_t*)evt.value.p;
+            // écriture de l'événement en sortie (port série)
+            if(mail->type == 0) printf("Une lecture a ete detectee sur l'entree numerique %d, a %d secondes\n", mail->pinNumber, mail->time);         
+            else  printf("Une lecture a ete detectee sur l'entree analogique %d, a %d secondes\n", mail->pinNumber, mail->time);   
+            mail_box.free(mail);
+        }
+        else Thread::yield();
     }
 }
 
@@ -151,7 +182,6 @@
     t3 = &t_collection;
     
     // Initialisation du RTC
-    //ticker.attach(&alarm, 2);
     ticker.attach(&alarm, 0.05);
 
     while(1) {}