asd
Dependencies: mbed-rtos mbed RTC
main.cpp
- Committer:
- manl2003
- Date:
- 2016-01-25
- Revision:
- 2:ebbca46b415f
- Parent:
- 1:7b379ec59b5d
- Child:
- 3:1c077a1de3e5
File content as of revision 2:ebbca46b415f:
#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 struct AnalArgs { AnalogIn* In; //Mailbox }; void lecture_analog(void const *args) { AnalArgs *analArgs = (AnalArgs*)args; bool premiereLectureDispo = false; int echantillonsAnal[5] = {0, 0, 0, 0, 0}; int compteur = 0; float moyenneCourante = 0; while (true) { // lecture des échantillons analogiques echantillonsAnal[compteur] = *analArgs->In; // 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 } } } struct NumArgs { DigitalIn *In; }; void lecture_num(void const *args) { NumArgs *numArgs = (NumArgs*)args; bool lecture, lecturePrecedente; while (true) { // lecture des échantillons numériques //TODO, généralisé la fonction bool lectureDebut = numArgs->In->read(); wait_ms(FREQ_NUM_STAB_MS); if(lectureDebut == numArgs->In->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() { RtosTimer anal_timer(lecture_num, osTimerPeriodic, NULL); RtosTimer num_timer(lecture_analog, osTimerPeriodic, NULL); anal_timer.start(FREQ_ANAL_MS); num_timer.start(FREQ_NUM_MS); //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 set_time(1453667014); // démarrage des tâches while(1) { } }