Laurent Huot
/
APP2
RTC et Timers
Fork of APP2 by
Diff: main.cpp
- 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