App S5 / Mbed 2 deprecated S05APP2

Dependencies:   mbed mbed-rtos

Revision:
8:56f2b8db5361
Parent:
7:e9f5280d47b3
Child:
9:8549816b1cac
--- a/main.cpp	Fri Jan 27 14:21:41 2017 +0000
+++ b/main.cpp	Fri Jan 27 17:03:33 2017 +0000
@@ -1,7 +1,7 @@
 #include "mbed.h"
 #include "rtos.h"
 
-Mutex createEvent;
+Mutex mutex;
 Ticker ticker;
 DigitalIn en_1(p15);
 DigitalIn en_2(p16);
@@ -22,24 +22,26 @@
 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
+    bool    type;      // Numérique = 0, analogique = 1
+    char*   time;      // Le temps au moment ou l'évènement s'est produit.
+    uint8_t pinNumber; // Le numéro de la pin
+    float moyenne; // Moyenne échantillonnée sur 5 échantillons successifs
 } mail_t;
 
-Mail<mail_t, 20> mail_box; //La taille du buffer est à déterminer
+Mail<mail_t, 500> mail_box; //La taille du buffer est à déterminer
 // -------------------------------------------------------
 // -------------------------------------------------------
 
-void createMail(bool type, uint8_t pinNumber)
-{
-    createEvent.lock();
+void createMail(bool type, uint8_t pinNumber, float moyenne) {
+    time_t seconds = time(NULL);
+    mutex.lock();
     mail_t *mail     = mail_box.alloc();
     mail->type      = type;
-    mail->time      = time(NULL);
+    mail->time      = ctime(&seconds);
     mail->pinNumber = pinNumber;
-    createEvent.unlock();
+    mail->moyenne   = moyenne;
     mail_box.put(mail);
+    mutex.unlock();
 }  
 
 void lecture_analog(void const *args) {
@@ -54,6 +56,8 @@
         // Lecture des échantillons analogiques
         float entreeanal_1 = ea_1.read();
         float entreeanal_2 = ea_2.read();
+        printf("Valeur de entree analogique 1: %f\n", entreeanal_1);
+        printf("Valeur de entree analogique 2: %f\n", entreeanal_2);
         
         echantillons1[i] = entreeanal_1;
         echantillons2[i] = entreeanal_2;
@@ -68,20 +72,19 @@
             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");
+                    createMail(1, 19, moyenne_courante1);
+                    // printf("La variation de la moyenne 1 depasse le seuil fixe\n");
                 
                 }
             }
             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");
+                    createMail(1, 20, moyenne_courante2);
+                    // printf("La variation de la moyenne 2 depasse le seuil fixe\n");
                 
                 }
             }
-            
             moyenne_passee1 = moyenne_courante1;
             moyenne_passee2 = moyenne_courante2;
             i = 0;
@@ -97,8 +100,8 @@
         // Lecture des échantillons numériques
         uint8_t entreenum_1 = en_1.read();
         uint8_t entreenum_2 = en_2.read();
-        //printf("Valeur de entree numerique 1: %d\n", entreenum_1);
-        //printf("Valeur de entree numerique 2: %d\n", entreenum_2);
+        // printf("Valeur de entree numerique 1: %d\n", entreenum_1);
+        // printf("Valeur de entree numerique 2: %d\n", entreenum_2);
         
         // Lecture de l'étampe temporelle
         time_t t = std::time(NULL);
@@ -110,8 +113,8 @@
             
             if (en_1 == 1 && entreenum_1 == en_1.read()) {
                 // Génération d'un évènement...
-                printf("Entree numerique 1 est stable\n");
-                createMail(0, 15);
+                // printf("Entree numerique 1 est stable\n");
+                createMail(0, 15, NULL);
                 
             } else {
                 // Entree numerique 1 n'est pas stable
@@ -119,8 +122,8 @@
             }
             if (en_2 == 1 && entreenum_2 == en_2.read()) {
                 // Génération d'un évènement...
-                printf("Entree numerique 2 est stable\n");
-                createMail(0, 16);
+                // printf("Entree numerique 2 est stable\n");
+                createMail(0, 16, NULL);
                 
             } else {
                 // Entre numerique 2 n'est pas stable
@@ -140,8 +143,10 @@
         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);   
+            if(mail->type == 0) printf("Une lecture a ete detectee sur l'entree numerique %d, a %s secondes\n", mail->pinNumber, mail->time);         
+            else {
+                printf("Une lecture a ete detectee sur l'entree analogique %d, a %s secondes\nLa moyenne est: %f\n", mail->pinNumber, mail->time, mail->moyenne); 
+            }  
             mail_box.free(mail);
         }
         else Thread::yield();
@@ -172,6 +177,7 @@
 int main() {
     // Démarrage des tâches
     printf("Demarrage des taches...\n");
+    set_time(1485514920);  // Set RTC time to Wed, 28 Oct 2009 11:35:37
 
     Thread t_lectureNum(lecture_num);
     Thread t_lectureAnalog(lecture_analog);
@@ -184,5 +190,5 @@
     // Initialisation du RTC
     ticker.attach(&alarm, 0.05);
 
-    while(1) {}
+    while(1);
 }
\ No newline at end of file