Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@5:79b5773e6764, 2017-01-27 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |