RTC et Timers

Dependencies:   mbed-rtos mbed

Fork of APP2 by Laurent m

Revision:
0:b4d43279883c
Child:
1:7b379ec59b5d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Jan 24 17:00:42 2016 +0000
@@ -0,0 +1,148 @@
+#include "mbed.h"
+#include "rtos.h"
+
+/*
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalIn sw1(p15);
+DigitalIn sw2(p16);
+
+Mutex mute;
+Queue<string, 5> mb;
+
+
+void producer_Thread(void const *args)
+{
+    while (true) {
+            mute.lock();
+            mb.alloc
+            mute.unlock();
+    }
+}
+void consumer_Thread(void const *args)
+{
+    while (true) {
+            mute.lock();
+            led1 = 0;
+            led2 = 0;
+            wait(0.5);
+            mute.unlock();
+    }
+}
+
+int main()
+{
+    Thread thread1(producer_Thread);
+    Thread thread2(consumer_Thread);
+    while (true) {
+    }
+} */
+
+//Pins
+DigitalIn en_1(p15);
+DigitalIn en_2(p16);
+AnalogIn ea_1(p19);
+AnalogIn ea_2(p20);
+
+//Constantes
+#define FREQ_NUM_MS  100
+#define FREQ_ANAL_MS 250
+#define FREQ_NUM_STAB_MS 50
+        
+#define SIGNAL_NUM 0x1
+#define SIGNAL_ANAL 0x2
+
+#define NIVEAU_DC_ANAL 3.3
+#define SEUIL_ANAL 1.125
+
+void lecture_analog(void const *args) {
+    bool premiereLectureDispo = false;
+    int echantillonsAnal[5] = {0, 0, 0, 0, 0};
+    int compteur = 0;
+    float moyenneCourante = 0;
+    
+    while (true) 
+    {        
+        // synchronisation sur la période d'échantillonnage
+            //TODO
+        // lecture de l'étampe temporelle
+            //TODO 
+        // lecture des échantillons analogiques
+            //TODO soit inclure ea_2, soit rendre la méthode réutilisable (plus nice)
+        echantillonsAnal[compteur] = ea_1;
+        // calcul de la nouvelle moyenne courante
+        if(premiereLectureDispo == true)
+        {
+            moyenneCourante = 0;
+            for(int i = 0; i < 5; i++)
+            {
+                moyenneCourante += echantillonsAnal[i];
+            }
+            moyenneCourante = moyenneCourante / 5;
+        }
+        
+        compteur++;
+        if(compteur >= 5)
+        {
+            compteur = 0;
+            premiereLectureDispo = true;
+        }
+        // génération éventuelle d'un événement
+        if(moyenneCourante > SEUIL_ANAL * NIVEAU_DC_ANAL)
+        {
+            //Générer un évènement    
+        }
+    }
+}
+
+
+void lecture_num(void const *args) {
+    bool lecture, lecturePrecedente;
+    while (true) 
+        {
+        // synchronisation sur la période d'échantillonnage
+            //TODO
+        // lecture de l'étampe temporelle
+            //TODO
+        // lecture des échantillons numériques
+            //TODO, généralisé la fonction
+        bool lectureDebut = en_1.read();
+        wait_ms(FREQ_NUM_STAB_MS);
+        if(lectureDebut == en_1.read())
+        {
+                
+        }
+        
+        // prise en charge du phénomène de rebond
+        // génération éventuelle d'un événement
+        }
+}
+
+void collection(void const *args) {
+while (true) 
+    {
+// attente et lecture d'un événement
+// écriture de l'événement en sortie (port série)
+    }
+}
+
+
+
+void signaler() {
+    Thread thread_Anal(lecture_analog);
+    Thread thread_Num(lecture_num);
+    
+    //Transitionner vers RTOS_TImer
+    while (true)
+    {           
+        thread_Anal.signal_set(SIGNAL_ANAL);
+        thread_Num.signal_set(SIGNAL_NUM);        
+    }
+}
+
+int main() {
+// initialisation du RTC
+// démarrage des tâches
+while(1) {
+}
+}
\ No newline at end of file