App S5 / Mbed 2 deprecated S05APP2

Dependencies:   mbed mbed-rtos

main.cpp

Committer:
benjaminroy
Date:
2017-01-27
Revision:
4:8f40ed50c04b
Parent:
3:fa3112b2216c
Child:
5:79b5773e6764

File content as of revision 4:8f40ed50c04b:

#include "mbed.h"
#include "rtos.h"

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;

// -------------------------------------------------------
// -------------------------------------------------------

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
    }
}

void lecture_num(void const *args) {
    // prise en charge du phénomène de rebond
    // génération éventuelle d'un événement
    
    while (true) {
        // Synchronisation sur la période d'échantillonnage
        Thread::signal_wait(0x1);
           
        // 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();
        
        // 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");
    }
}

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 alarm() {
    compteur++;
    led3 = !led3;
    
    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");
        t1->signal_set(0x1);
    }
    
    if (compteur % 10 == 0) {
        compteur = 0;
    }
}

int main() {
    // Démarrage des tâches
    printf("Demarrage des taches...");

    Thread t_lectureNum(lecture_num);
    Thread t_lectureAna(lecture_analog);
    Thread t_collection(collection);
    
    t1 = &t_lectureNum;
    t2 = &t_lectureAna;
    t3 = &t_collection;
    
    // Initialisation du RTC
    ticker.attach(&alarm, 2);
    
    while(1) {}
}