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:
- 7:e9f5280d47b3
- Parent:
- 6:6da143aff561
- Child:
- 8:56f2b8db5361
diff -r 6da143aff561 -r e9f5280d47b3 main.cpp
--- a/main.cpp Fri Jan 27 04:21:45 2017 +0000
+++ b/main.cpp Fri Jan 27 14:21:41 2017 +0000
@@ -1,6 +1,7 @@
#include "mbed.h"
#include "rtos.h"
+Mutex createEvent;
Ticker ticker;
DigitalIn en_1(p15);
DigitalIn en_2(p16);
@@ -20,9 +21,27 @@
float echantillons2[5];
float seuil = 0.125;
+typedef struct {
+ bool type; //Numérique = 0, analogique = 1
+ time_t time; //Le temps au moment ou l'évènement s'est produit.
+ uint8_t pinNumber; //Le numéro de la pin
+} mail_t;
+
+Mail<mail_t, 20> mail_box; //La taille du buffer est à déterminer
// -------------------------------------------------------
// -------------------------------------------------------
+void createMail(bool type, uint8_t pinNumber)
+{
+ createEvent.lock();
+ mail_t *mail = mail_box.alloc();
+ mail->type = type;
+ mail->time = time(NULL);
+ mail->pinNumber = pinNumber;
+ createEvent.unlock();
+ mail_box.put(mail);
+}
+
void lecture_analog(void const *args) {
int i = 0;
float moyenne_passee1 = -1;
@@ -49,6 +68,7 @@
if (moyenne_passee1 != -1) {
if ((std::abs(1 - (moyenne_courante1 / moyenne_passee1))) > seuil) {
// Génération éventuelle d'un événement
+ createMail(1, 19);
printf("La variation de la moyenne 1 depasse le seuil fixe\n");
}
@@ -56,6 +76,7 @@
if (moyenne_passee2 != -1) {
if ((std::abs(1 - (moyenne_courante2 / moyenne_passee2))) > seuil) {
// Génération éventuelle d'un événement
+ createMail(1, 20);
printf("La variation de la moyenne 2 depasse le seuil fixe\n");
}
@@ -88,16 +109,18 @@
Thread::signal_wait(0x2);
if (en_1 == 1 && entreenum_1 == en_1.read()) {
+ // Génération d'un évènement...
printf("Entree numerique 1 est stable\n");
- // Génération d'un évènement...
+ createMail(0, 15);
} else {
// Entree numerique 1 n'est pas stable
Thread::yield();
}
if (en_2 == 1 && entreenum_2 == en_2.read()) {
+ // Génération d'un évènement...
printf("Entree numerique 2 est stable\n");
- // Génération d'un évènement...
+ createMail(0, 16);
} else {
// Entre numerique 2 n'est pas stable
@@ -113,7 +136,15 @@
void collection(void const *args) {
while (true) {
// attente et lecture d'un événement
- // écriture de l'événement en sortie (port série)
+ osEvent evt = mail_box.get();
+ if (evt.status == osEventMail) {
+ mail_t *mail = (mail_t*)evt.value.p;
+ // écriture de l'événement en sortie (port série)
+ if(mail->type == 0) printf("Une lecture a ete detectee sur l'entree numerique %d, a %d secondes\n", mail->pinNumber, mail->time);
+ else printf("Une lecture a ete detectee sur l'entree analogique %d, a %d secondes\n", mail->pinNumber, mail->time);
+ mail_box.free(mail);
+ }
+ else Thread::yield();
}
}
@@ -151,7 +182,6 @@
t3 = &t_collection;
// Initialisation du RTC
- //ticker.attach(&alarm, 2);
ticker.attach(&alarm, 0.05);
while(1) {}