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:
- 17:24e8d26ad707
- Parent:
- 14:3b72daf433fb
- Child:
- 19:abddc058f6d1
diff -r 3b72daf433fb -r 24e8d26ad707 main.cpp
--- a/main.cpp Mon Jan 30 15:13:28 2017 +0000
+++ b/main.cpp Mon Jan 30 15:33:46 2017 +0000
@@ -1,4 +1,7 @@
-#include "mbed.h"
+#include "AnalogIn.h"
+#include "DigitalIn.h"
+#include "Ticker.h"
+#include "Serial.h"
#include "rtos.h"
Serial pc(USBTX, USBRX); // tx, rx
@@ -10,16 +13,15 @@
Thread *t1;
Thread *t2;
Thread *t3;
+Mutex mutex;
uint8_t compteur = 0;
bool verifierSiStable = false;
/* Mail */
typedef struct {
- bool type; // Numérique = 0, analogique = 1
char* temps; // Étampe indiquant l’heure et la date de l'occurrence
uint8_t broche; // Le numéro de la broche
- float moyenne; // Moyenne courante échantillonnée sur 5 échantillons successifs
} mail_t;
Mail<mail_t, 16> mail_box;
@@ -27,12 +29,14 @@
// -------------------------------------------------------
// -------------------------------------------------------
-void envoyer_mail(uint8_t broche, float moyenne) {
+void envoyer_mail(uint8_t broche) {
+ mutex.lock();
time_t secondes = time(NULL);
+ mutex.unlock();
+
mail_t *mail = mail_box.alloc();
mail->temps = ctime(&secondes);
mail->broche = broche;
- mail->moyenne = moyenne;
mail_box.put(mail);
}
@@ -41,8 +45,8 @@
float moyenne_passee1 = -1;
float moyenne_passee2 = -1;
float echantillons1[5];
- float echantillons2[5];
- float seuil = 0.125;
+ float echantillons2[5];
+ float seuil = 0.125;
while (true) {
/*** Synchronisation sur la période d'échantillonnage ***/
@@ -51,8 +55,6 @@
/*** Lecture des échantillons analogiques ***/
float entreeanal_1 = ea_1.read();
float entreeanal_2 = ea_2.read();
- //printf("Valeur de entree analogique 1: %f\n", entreeanal_1);
- //printf("Valeur de entree analogique 2: %f\n", entreeanal_2);
echantillons1[i] = entreeanal_1;
echantillons2[i] = entreeanal_2;
@@ -62,16 +64,15 @@
/*** Calcul de la moyenne courante du signal (calculée sur 5 échantillons successifs) ***/
float moyenne_courante1 = (echantillons1[0] + echantillons1[1] + echantillons1[2] + echantillons1[3] + echantillons1[4]) / 5;
float moyenne_courante2 = (echantillons2[0] + echantillons2[1] + echantillons2[2] + echantillons2[3] + echantillons2[4]) / 5;
- //printf("moyenne courante = %f, moyenne passee = %f, variation = %f\n", moyenne_courante1, moyenne_passee1, std::abs(1 - (moyenne_courante1 / moyenne_passee1)));
if (moyenne_passee1 != -1) {
if ((std::abs(1 - (moyenne_courante1 / moyenne_passee1))) > seuil) {
- envoyer_mail(19, moyenne_courante1); /*** Génération éventuelle d'un événement ***/
+ envoyer_mail(19); /*** Génération éventuelle d'un événement ***/
}
}
if (moyenne_passee2 != -1) {
if ((std::abs(1 - (moyenne_courante2 / moyenne_passee2))) > seuil) {
- envoyer_mail(20, moyenne_courante2); /*** Génération éventuelle d'un événement ***/
+ envoyer_mail(20); /*** Génération éventuelle d'un événement ***/
}
}
moyenne_passee1 = moyenne_courante1;
@@ -82,7 +83,7 @@
}
void lecture_num(void const *args) {
- bool valeurs[2] = {0};
+ bool valeurs[2] = {0};
while (true) {
/*** Synchronisation sur la période d'échantillonnage ***/
@@ -91,27 +92,24 @@
/*** Lecture des échantillons numériques ***/
uint8_t entreenum_1 = en_1.read();
uint8_t entreenum_2 = en_2.read();
- // printf("Valeur de entree numerique 1: %d\n", entreenum_1);
- // printf("Valeur de entree numerique 2: %d\n", entreenum_2);
/*** Prise en charge du phénomène de rebond ***/
- if (en_1.read() != valeurs[0]) {
+ if (entreenum_1 != valeurs[0]) {
verifierSiStable = true;
Thread::signal_wait(0x2);
- valeurs[0] = en_1.read();
+ valeurs[0] = entreenum_1;
if (entreenum_1 == en_1.read()) {
- envoyer_mail(15, NULL); /*** Génération d'un évènement... ***/
+ envoyer_mail(15); /*** Génération d'un évènement... ***/
}
-
}
- if (en_2.read() != valeurs[1]) {
+ if (entreenum_2 != valeurs[1]) {
verifierSiStable = true;
Thread::signal_wait(0x2);
- valeurs[1] = en_2.read();
+ valeurs[1] = entreenum_2;
if (entreenum_2 == en_2.read()) {
- envoyer_mail(16, NULL); /*** Génération d'un évènement... ***/
+ envoyer_mail(16); /*** Génération d'un évènement... ***/
}
}
Thread::yield();
@@ -126,16 +124,9 @@
mail_t *mail = (mail_t*)evt.value.p;
/*** Écriture de l'événement en sortie (port série) ***/
- if (mail->broche == 15 || mail->broche == 16) {
- pc.printf("Une lecture detectee entree numerique %d\nDate: %s\n", mail->broche, mail->temps);
- }
- else {
- pc.printf("Une lecture detectee entree analogique %d\nDate: %sMoyenne courante: %f\n\n", mail->broche, mail->temps, mail->moyenne);
- }
+ pc.printf("Entree %d\nDate: %s\n", mail->broche, mail->temps);
mail_box.free(mail);
- } else {
- Thread::yield();
- }
+ }
}
}