S5Team
/
HelloWorld
none
Fork of HelloWorld by
Diff: main.cpp
- Revision:
- 2:8d4c217c39e5
- Parent:
- 0:fb6bbc10ffa0
- Child:
- 3:58803195db3f
diff -r 03c191369089 -r 8d4c217c39e5 main.cpp --- a/main.cpp Sun Jan 01 20:57:57 2012 +0000 +++ b/main.cpp Mon Jan 26 21:56:51 2015 +0000 @@ -1,12 +1,129 @@ #include "mbed.h" +//#include "rtos.h" +DigitalIn en_1(p15); +DigitalIn en_2(p16); +AnalogIn ea_1(p19); +AnalogIn ea_2(p20); +Serial pc (USBTX, USBRX); + +bool event_n = false; +bool event_a = false; + +//RtosTimer time ; + +int date = 0; + +int taille = 100; +int compteur = 0; +int index = 0; +int tableau[100][2]; + +int flag[2] = {0,1}; -DigitalOut myled(LED1); +void lecture_analog(void const *args) +{ + int sample[6][2]; + int i = 0; + for (i = 0; i <6; i ++) { + sample[i][0] = args.read_u16(); + // sample[i][1] = date; + } + i = 0; + while (true) { + +// synchronisation sur la période d'échantillonnage + flag[0] = 1; + while (flag[1] == 1) + thread.yield(); + +// lecture de l'étampe temporelle + //date = time.read_ms(); +// lecture des échantillons analogiques + sample[i][0] = args.read_u16(); + i++; + + +// calcul de la nouvelle moyenne courante + if ((sample[i][0] - sample[(i+5)%6][0]) > 0x9FFF) { + tableau[i][0] = 1; // 1 pr analog + //tableau[i][1] = date; + } -int main() { - while(1) { - myled = 1; - wait(0.2); - myled = 0; - wait(0.2); +// génération éventuelle d'un événement + if (i >= 6) i = 0; + } + flag[0] = 0; +} + +void lecture_num(void const *args) +{ + flag[1] = 1; + while (flag[0] == 1) + thread.yield(); + int value[2][2]; + int i = 0; + value[i][0] = args.read(); + //value[i][1] = date; + while (true) { +// synchronisation sur la période d'échantillonnage + +// lecture de l'étampe temporelle + //date = time.read_ms(); +// lecture des échantillons numériques + wait_ms(100); + i++; + value[i][0] = args.read(); + //value[i][1] = date; +// prise en charge du phénomène de rebond + if (value[0][0] != value[1][0]) { + wait_ms(50); + int *temp = new int; + temp = args.read(); + // génération éventuelle d'un événement + if (temp == value[i]) { + tableau[compteur][0] = 0; //0 pr numérique + // tableau[compteur][1] = value[i][1]; + compteur++; + } + wait_ms(50); + } + if (i >=2) i = 0; + } + flag[1] = 0; +} + +void collection(void const *args) +{ + int i = 0; + while (true) { +// attente et lecture d'un événement + + +// écriture de l'événement en sortie (port série) + if (tableau[i][0] == 0) + pc.printf("event_n at: "); + else + pc.printf("event_a at: "); + pc.printf ("%i", tableau[i][1]); + i++; } } +int main() +{ +// initialisation du RTC + // time.start(); +// démarrage des tâches + while(1) { + // creation des threads + Thread event_n1 = new Thread(new lecture_num(en_1)); + Thread event_n2 = new Thread(new lecture_num(en_2)); + Thread event_a1 = new Thread(new lecture_analog(ea_1)); + Thread event_a2 = new Thread(new lecture_analog(ea_2)); + + event_n1.start(); + event_n2.start(); + event_a1.start(); + event_a2.start(); + } + // time.stop(); +} \ No newline at end of file