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.
Diff: main.cpp
- Revision:
- 5:79b5773e6764
- Parent:
- 4:8f40ed50c04b
- Child:
- 6:6da143aff561
diff -r 8f40ed50c04b -r 79b5773e6764 main.cpp
--- a/main.cpp Fri Jan 27 01:40:34 2017 +0000
+++ b/main.cpp Fri Jan 27 03:12:40 2017 +0000
@@ -4,21 +4,18 @@
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;
-
+bool verifierSiStable = false;
// -------------------------------------------------------
// -------------------------------------------------------
@@ -32,33 +29,47 @@
}
}
-void lecture_num(void const *args) {
- // prise en charge du phénomène de rebond
- // génération éventuelle d'un événement
-
+void lecture_num(void const *args) {
while (true) {
// Synchronisation sur la période d'échantillonnage
Thread::signal_wait(0x1);
-
+ led3 = !led3;
+
// 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();
+ printf("Valeur de entree numerique 1: %d\n", entreenum_1);
+ printf("Valeur de entree numerique 2: %d\n", entreenum_2);
// 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");
+
+ // Prise en charge du phénomène de rebond
+ if (en_1 || en_2) {
+ verifierSiStable = true;
+ Thread::signal_wait(0x2);
+
+ if (en_1 == 1 && entreenum_1 == en_1.read()) {
+ printf("Entree numerique 1 est stable\n");
+ // Génération d'un évènement...
+
+ } else {
+ printf("Entree numerique 1 est instable\n");
+ Thread::yield();
+ }
+ if (en_2 == 1 && entreenum_2 == en_2.read()) {
+ printf("Entree numerique 2 est stable\n");
+ // Génération d'un évènement...
+
+ } else {
+ printf("Entree numerique 2 est instable\n");
+ Thread::yield();
+ }
+ }
+ else {
+ Thread::yield();
+ }
}
}
@@ -71,17 +82,19 @@
void alarm() {
compteur++;
- led3 = !led3;
+
+ if (verifierSiStable) {
+ t1->signal_set(0x2);
+ verifierSiStable = false;
+ }
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");
+ led2 = 1;
t1->signal_set(0x1);
}
@@ -92,7 +105,7 @@
int main() {
// Démarrage des tâches
- printf("Demarrage des taches...");
+ printf("Demarrage des taches...\n");
Thread t_lectureNum(lecture_num);
Thread t_lectureAna(lecture_analog);
@@ -104,6 +117,7 @@
// Initialisation du RTC
ticker.attach(&alarm, 2);
-
+ // ticker.attach(&alarm, 0.05);
+
while(1) {}
}
\ No newline at end of file