App S5 / Mbed 2 deprecated S05APP2

Dependencies:   mbed mbed-rtos

Revision:
5:79b5773e6764
Parent:
4:8f40ed50c04b
Child:
6:6da143aff561
diff -r 8f40ed50c04b -r 79b5773e6764 main.cpp
--- a/main.cpp	Fri Jan 27 01:40:34 2017 +0000
+++ b/main.cpp	Fri Jan 27 03:12:40 2017 +0000
@@ -4,21 +4,18 @@
 Ticker ticker;
 DigitalIn en_1(p15);
 DigitalIn en_2(p16);
-
 AnalogIn ea_1(p19);
 AnalogIn ea_2(p20);
-
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
 DigitalOut led3(LED3);
 DigitalOut led4(LED4);
-
 Thread *t1;
 Thread *t2;
 Thread *t3;
 
 uint8_t compteur = 0;
-
+bool verifierSiStable = false;
 // -------------------------------------------------------
 // -------------------------------------------------------
 
@@ -32,33 +29,47 @@
     }
 }
 
-void lecture_num(void const *args) {
-    // prise en charge du phénomène de rebond
-    // génération éventuelle d'un événement
-    
+void lecture_num(void const *args) {    
     while (true) {
         // Synchronisation sur la période d'échantillonnage
         Thread::signal_wait(0x1);
-           
+        led3 = !led3;
+        
         // Lecture des échantillons numériques
-        led2 = 1;
         uint8_t entreenum_1 = en_1.read();
         uint8_t entreenum_2 = en_2.read();
-        printf("Valeur de l''entree numerique 1 %d", entreenum_1);
-        printf("Valeur de 2''entree numerique 2 %d", entreenum_2);
         
-        //Thread::yield();
+        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);
-        printf("%ld\n", (long)t);
-
-        //Thread::signal_wait(0x2);
-        //if changement valider si on a une valeur et si oui demander d'aller le lire dans 50 ms.
-        //Signal ISR que dans 50ms on veut qu'il nous rappel dans 50ms
-        // génération éventuelle d'un événement
-        //if(en1Read == en_1.read()) printf("C'est pareil");
-        //if(en2Read == en_2.read()) printf("C'est pareil");
+        
+        // Prise en charge du phénomène de rebond
+        if (en_1 || en_2) {
+            verifierSiStable = true;
+            Thread::signal_wait(0x2);
+            
+            if (en_1 == 1 && entreenum_1 == en_1.read()) {
+                printf("Entree numerique 1 est stable\n");
+                // Génération d'un évènement...
+                
+            } else {
+                printf("Entree numerique 1 est instable\n");
+                Thread::yield();
+            }
+            if (en_2 == 1 && entreenum_2 == en_2.read()) {
+                printf("Entree numerique 2 est stable\n");
+                // Génération d'un évènement...
+                
+            } else {
+                printf("Entree numerique 2 est instable\n");
+                Thread::yield();
+            } 
+        } 
+        else {
+            Thread::yield();
+        } 
     }
 }
 
@@ -71,17 +82,19 @@
 
 void alarm() {
     compteur++;
-    led3 = !led3;
+    
+    if (verifierSiStable) {
+        t1->signal_set(0x2);
+        verifierSiStable = false;
+    }
     
     if (compteur % 2 == 0) {
         // Entrées numériques échantillionnées à tous les 100 ms
         led1 = 1;
-        printf("Echantillonnage des entrees numeriques\n");
         t1->signal_set(0x1);
     } else if (compteur % 5 == 0) {
         // Entrées analogiques échantillonnées à tous les 250 ms
-        led4 = 1;
-        printf("Echantillonnage des entrees analogiques\n");
+        led2 = 1;
         t1->signal_set(0x1);
     }
     
@@ -92,7 +105,7 @@
 
 int main() {
     // Démarrage des tâches
-    printf("Demarrage des taches...");
+    printf("Demarrage des taches...\n");
 
     Thread t_lectureNum(lecture_num);
     Thread t_lectureAna(lecture_analog);
@@ -104,6 +117,7 @@
     
     // Initialisation du RTC
     ticker.attach(&alarm, 2);
-    
+    // ticker.attach(&alarm, 0.05);
+
     while(1) {}
 }
\ No newline at end of file