App S5 / Mbed 2 deprecated S05APP2

Dependencies:   mbed mbed-rtos

Committer:
benjaminroy
Date:
Fri Jan 27 03:12:40 2017 +0000
Revision:
5:79b5773e6764
Parent:
4:8f40ed50c04b
Child:
6:6da143aff561
lecture_num

Who changed what in which revision?

UserRevisionLine numberNew contents of line
benjaminroy 0:4f447b02a32f 1 #include "mbed.h"
benjaminroy 1:d37b1a61bd0b 2 #include "rtos.h"
benjaminroy 0:4f447b02a32f 3
benjaminroy 3:fa3112b2216c 4 Ticker ticker;
benjaminroy 1:d37b1a61bd0b 5 DigitalIn en_1(p15);
benjaminroy 1:d37b1a61bd0b 6 DigitalIn en_2(p16);
benjaminroy 1:d37b1a61bd0b 7 AnalogIn ea_1(p19);
benjaminroy 1:d37b1a61bd0b 8 AnalogIn ea_2(p20);
benjaminroy 3:fa3112b2216c 9 DigitalOut led1(LED1);
marc1119 2:94e2eebf1524 10 DigitalOut led2(LED2);
benjaminroy 4:8f40ed50c04b 11 DigitalOut led3(LED3);
benjaminroy 4:8f40ed50c04b 12 DigitalOut led4(LED4);
marc1119 2:94e2eebf1524 13 Thread *t1;
marc1119 2:94e2eebf1524 14 Thread *t2;
marc1119 2:94e2eebf1524 15 Thread *t3;
marc1119 2:94e2eebf1524 16
benjaminroy 3:fa3112b2216c 17 uint8_t compteur = 0;
benjaminroy 5:79b5773e6764 18 bool verifierSiStable = false;
benjaminroy 3:fa3112b2216c 19 // -------------------------------------------------------
benjaminroy 3:fa3112b2216c 20 // -------------------------------------------------------
benjaminroy 3:fa3112b2216c 21
benjaminroy 1:d37b1a61bd0b 22 void lecture_analog(void const *args) {
benjaminroy 1:d37b1a61bd0b 23 while (true) {
benjaminroy 1:d37b1a61bd0b 24 // synchronisation sur la période d'échantillonnage
benjaminroy 1:d37b1a61bd0b 25 // lecture de l'étampe temporelle
benjaminroy 1:d37b1a61bd0b 26 // lecture des échantillons analogiques
benjaminroy 1:d37b1a61bd0b 27 // calcul de la nouvelle moyenne courante
benjaminroy 1:d37b1a61bd0b 28 // génération éventuelle d'un événement
benjaminroy 0:4f447b02a32f 29 }
benjaminroy 0:4f447b02a32f 30 }
marc1119 2:94e2eebf1524 31
benjaminroy 5:79b5773e6764 32 void lecture_num(void const *args) {
benjaminroy 1:d37b1a61bd0b 33 while (true) {
benjaminroy 3:fa3112b2216c 34 // Synchronisation sur la période d'échantillonnage
marc1119 2:94e2eebf1524 35 Thread::signal_wait(0x1);
benjaminroy 5:79b5773e6764 36 led3 = !led3;
benjaminroy 5:79b5773e6764 37
benjaminroy 3:fa3112b2216c 38 // Lecture des échantillons numériques
benjaminroy 3:fa3112b2216c 39 uint8_t entreenum_1 = en_1.read();
benjaminroy 3:fa3112b2216c 40 uint8_t entreenum_2 = en_2.read();
marc1119 2:94e2eebf1524 41
benjaminroy 5:79b5773e6764 42 printf("Valeur de entree numerique 1: %d\n", entreenum_1);
benjaminroy 5:79b5773e6764 43 printf("Valeur de entree numerique 2: %d\n", entreenum_2);
benjaminroy 3:fa3112b2216c 44
benjaminroy 3:fa3112b2216c 45 // Lecture de l'étampe temporelle
benjaminroy 3:fa3112b2216c 46 time_t t = std::time(NULL);
benjaminroy 5:79b5773e6764 47
benjaminroy 5:79b5773e6764 48 // Prise en charge du phénomène de rebond
benjaminroy 5:79b5773e6764 49 if (en_1 || en_2) {
benjaminroy 5:79b5773e6764 50 verifierSiStable = true;
benjaminroy 5:79b5773e6764 51 Thread::signal_wait(0x2);
benjaminroy 5:79b5773e6764 52
benjaminroy 5:79b5773e6764 53 if (en_1 == 1 && entreenum_1 == en_1.read()) {
benjaminroy 5:79b5773e6764 54 printf("Entree numerique 1 est stable\n");
benjaminroy 5:79b5773e6764 55 // Génération d'un évènement...
benjaminroy 5:79b5773e6764 56
benjaminroy 5:79b5773e6764 57 } else {
benjaminroy 5:79b5773e6764 58 printf("Entree numerique 1 est instable\n");
benjaminroy 5:79b5773e6764 59 Thread::yield();
benjaminroy 5:79b5773e6764 60 }
benjaminroy 5:79b5773e6764 61 if (en_2 == 1 && entreenum_2 == en_2.read()) {
benjaminroy 5:79b5773e6764 62 printf("Entree numerique 2 est stable\n");
benjaminroy 5:79b5773e6764 63 // Génération d'un évènement...
benjaminroy 5:79b5773e6764 64
benjaminroy 5:79b5773e6764 65 } else {
benjaminroy 5:79b5773e6764 66 printf("Entree numerique 2 est instable\n");
benjaminroy 5:79b5773e6764 67 Thread::yield();
benjaminroy 5:79b5773e6764 68 }
benjaminroy 5:79b5773e6764 69 }
benjaminroy 5:79b5773e6764 70 else {
benjaminroy 5:79b5773e6764 71 Thread::yield();
benjaminroy 5:79b5773e6764 72 }
benjaminroy 1:d37b1a61bd0b 73 }
benjaminroy 1:d37b1a61bd0b 74 }
marc1119 2:94e2eebf1524 75
benjaminroy 1:d37b1a61bd0b 76 void collection(void const *args) {
benjaminroy 1:d37b1a61bd0b 77 while (true) {
benjaminroy 1:d37b1a61bd0b 78 // attente et lecture d'un événement
benjaminroy 1:d37b1a61bd0b 79 // écriture de l'événement en sortie (port série)
benjaminroy 1:d37b1a61bd0b 80 }
benjaminroy 1:d37b1a61bd0b 81 }
marc1119 2:94e2eebf1524 82
benjaminroy 3:fa3112b2216c 83 void alarm() {
benjaminroy 3:fa3112b2216c 84 compteur++;
benjaminroy 5:79b5773e6764 85
benjaminroy 5:79b5773e6764 86 if (verifierSiStable) {
benjaminroy 5:79b5773e6764 87 t1->signal_set(0x2);
benjaminroy 5:79b5773e6764 88 verifierSiStable = false;
benjaminroy 5:79b5773e6764 89 }
benjaminroy 3:fa3112b2216c 90
benjaminroy 3:fa3112b2216c 91 if (compteur % 2 == 0) {
benjaminroy 3:fa3112b2216c 92 // Entrées numériques échantillionnées à tous les 100 ms
benjaminroy 4:8f40ed50c04b 93 led1 = 1;
benjaminroy 3:fa3112b2216c 94 t1->signal_set(0x1);
benjaminroy 3:fa3112b2216c 95 } else if (compteur % 5 == 0) {
benjaminroy 3:fa3112b2216c 96 // Entrées analogiques échantillonnées à tous les 250 ms
benjaminroy 5:79b5773e6764 97 led2 = 1;
benjaminroy 3:fa3112b2216c 98 t1->signal_set(0x1);
marc1119 2:94e2eebf1524 99 }
benjaminroy 3:fa3112b2216c 100
benjaminroy 3:fa3112b2216c 101 if (compteur % 10 == 0) {
benjaminroy 3:fa3112b2216c 102 compteur = 0;
benjaminroy 3:fa3112b2216c 103 }
marc1119 2:94e2eebf1524 104 }
marc1119 2:94e2eebf1524 105
benjaminroy 1:d37b1a61bd0b 106 int main() {
marc1119 2:94e2eebf1524 107 // Démarrage des tâches
benjaminroy 5:79b5773e6764 108 printf("Demarrage des taches...\n");
benjaminroy 3:fa3112b2216c 109
marc1119 2:94e2eebf1524 110 Thread t_lectureNum(lecture_num);
marc1119 2:94e2eebf1524 111 Thread t_lectureAna(lecture_analog);
marc1119 2:94e2eebf1524 112 Thread t_collection(collection);
marc1119 2:94e2eebf1524 113
marc1119 2:94e2eebf1524 114 t1 = &t_lectureNum;
marc1119 2:94e2eebf1524 115 t2 = &t_lectureAna;
marc1119 2:94e2eebf1524 116 t3 = &t_collection;
benjaminroy 3:fa3112b2216c 117
marc1119 2:94e2eebf1524 118 // Initialisation du RTC
benjaminroy 4:8f40ed50c04b 119 ticker.attach(&alarm, 2);
benjaminroy 5:79b5773e6764 120 // ticker.attach(&alarm, 0.05);
benjaminroy 5:79b5773e6764 121
benjaminroy 4:8f40ed50c04b 122 while(1) {}
benjaminroy 1:d37b1a61bd0b 123 }