App S5 / Mbed 2 deprecated S05APP2

Dependencies:   mbed mbed-rtos

Revision:
6:6da143aff561
Parent:
5:79b5773e6764
Child:
7:e9f5280d47b3
--- a/main.cpp	Fri Jan 27 03:12:40 2017 +0000
+++ b/main.cpp	Fri Jan 27 04:21:45 2017 +0000
@@ -16,16 +16,55 @@
 
 uint8_t compteur = 0;
 bool verifierSiStable = false;
+float echantillons1[5];
+float echantillons2[5];
+float seuil = 0.125;
+
 // -------------------------------------------------------
 // -------------------------------------------------------
 
 void lecture_analog(void const *args) {
-    while (true) {
-        // synchronisation sur la période d'échantillonnage
-        // lecture de l'étampe temporelle
-        // lecture des échantillons analogiques
-        // calcul de la nouvelle moyenne courante
-        // génération éventuelle d'un événement
+    int i = 0;
+    float moyenne_passee1 = -1;
+    float moyenne_passee2 = -1;
+        
+    while (true) {        
+        // Synchronisation sur la période d'échantillonnage
+        Thread::signal_wait(0x1);
+        
+        // Lecture des échantillons analogiques
+        float entreeanal_1 = ea_1.read();
+        float entreeanal_2 = ea_2.read();
+        
+        echantillons1[i] = entreeanal_1;
+        echantillons2[i] = entreeanal_2;
+        
+        i++;
+        if (i == 5) {
+            // Calcul de la moyenne courante du signal (calculée sur  5 échantillons successifs)
+            float moyenne_courante1 = (echantillons1[0] + echantillons1[1] + echantillons1[2] + echantillons1[3] + echantillons1[4]) / 5;
+            float moyenne_courante2 = (echantillons2[0] + echantillons2[1] + echantillons2[2] + echantillons2[3] + echantillons2[4]) / 5;
+            //printf("moyenne courante = %f, moyenne passee = %f, variation = %f\n", moyenne_courante1, moyenne_passee1,  std::abs(1 - (moyenne_courante1 / moyenne_passee1)));
+            
+            if (moyenne_passee1 != -1) {
+                if ((std::abs(1 - (moyenne_courante1 / moyenne_passee1))) > seuil) {
+                    // Génération éventuelle d'un événement
+                    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
+                    printf("La variation de la moyenne 2 depasse le seuil fixe\n");
+                
+                }
+            }
+            
+            moyenne_passee1 = moyenne_courante1;
+            moyenne_passee2 = moyenne_courante2;
+            i = 0;
+        }
     }
 }
 
@@ -33,14 +72,12 @@
     while (true) {
         // Synchronisation sur la période d'échantillonnage
         Thread::signal_wait(0x1);
-        led3 = !led3;
-        
+                
         // 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);
@@ -55,7 +92,7 @@
                 // Génération d'un évènement...
                 
             } else {
-                printf("Entree numerique 1 est instable\n");
+                // Entree numerique 1 n'est pas stable
                 Thread::yield();
             }
             if (en_2 == 1 && entreenum_2 == en_2.read()) {
@@ -63,7 +100,7 @@
                 // Génération d'un évènement...
                 
             } else {
-                printf("Entree numerique 2 est instable\n");
+                // Entre numerique 2 n'est pas stable
                 Thread::yield();
             } 
         } 
@@ -90,12 +127,10 @@
     
     if (compteur % 2 == 0) {
         // Entrées numériques échantillionnées à tous les 100 ms
-        led1 = 1;
         t1->signal_set(0x1);
     } else if (compteur % 5 == 0) {
         // Entrées analogiques échantillonnées à tous les 250 ms
-        led2 = 1;
-        t1->signal_set(0x1);
+        t2->signal_set(0x1);
     }
     
     if (compteur % 10 == 0) {
@@ -108,16 +143,16 @@
     printf("Demarrage des taches...\n");
 
     Thread t_lectureNum(lecture_num);
-    Thread t_lectureAna(lecture_analog);
+    Thread t_lectureAnalog(lecture_analog);
     Thread t_collection(collection);
     
     t1 = &t_lectureNum;
-    t2 = &t_lectureAna;
+    t2 = &t_lectureAnalog;
     t3 = &t_collection;
     
     // Initialisation du RTC
-    ticker.attach(&alarm, 2);
-    // ticker.attach(&alarm, 0.05);
+    //ticker.attach(&alarm, 2);
+    ticker.attach(&alarm, 0.05);
 
     while(1) {}
 }
\ No newline at end of file