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:
- 8:56f2b8db5361
- Parent:
- 7:e9f5280d47b3
- Child:
- 9:8549816b1cac
--- a/main.cpp Fri Jan 27 14:21:41 2017 +0000
+++ b/main.cpp Fri Jan 27 17:03:33 2017 +0000
@@ -1,7 +1,7 @@
#include "mbed.h"
#include "rtos.h"
-Mutex createEvent;
+Mutex mutex;
Ticker ticker;
DigitalIn en_1(p15);
DigitalIn en_2(p16);
@@ -22,24 +22,26 @@
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
+ bool type; // Numérique = 0, analogique = 1
+ char* time; // Le temps au moment ou l'évènement s'est produit.
+ uint8_t pinNumber; // Le numéro de la pin
+ float moyenne; // Moyenne échantillonnée sur 5 échantillons successifs
} mail_t;
-Mail<mail_t, 20> mail_box; //La taille du buffer est à déterminer
+Mail<mail_t, 500> mail_box; //La taille du buffer est à déterminer
// -------------------------------------------------------
// -------------------------------------------------------
-void createMail(bool type, uint8_t pinNumber)
-{
- createEvent.lock();
+void createMail(bool type, uint8_t pinNumber, float moyenne) {
+ time_t seconds = time(NULL);
+ mutex.lock();
mail_t *mail = mail_box.alloc();
mail->type = type;
- mail->time = time(NULL);
+ mail->time = ctime(&seconds);
mail->pinNumber = pinNumber;
- createEvent.unlock();
+ mail->moyenne = moyenne;
mail_box.put(mail);
+ mutex.unlock();
}
void lecture_analog(void const *args) {
@@ -54,6 +56,8 @@
// 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;
@@ -68,20 +72,19 @@
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");
+ createMail(1, 19, moyenne_courante1);
+ // printf("La variation de la moyenne 1 depasse le seuil fixe\n");
}
}
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");
+ createMail(1, 20, moyenne_courante2);
+ // printf("La variation de la moyenne 2 depasse le seuil fixe\n");
}
}
-
moyenne_passee1 = moyenne_courante1;
moyenne_passee2 = moyenne_courante2;
i = 0;
@@ -97,8 +100,8 @@
// 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);
+ // 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);
@@ -110,8 +113,8 @@
if (en_1 == 1 && entreenum_1 == en_1.read()) {
// Génération d'un évènement...
- printf("Entree numerique 1 est stable\n");
- createMail(0, 15);
+ // printf("Entree numerique 1 est stable\n");
+ createMail(0, 15, NULL);
} else {
// Entree numerique 1 n'est pas stable
@@ -119,8 +122,8 @@
}
if (en_2 == 1 && entreenum_2 == en_2.read()) {
// Génération d'un évènement...
- printf("Entree numerique 2 est stable\n");
- createMail(0, 16);
+ // printf("Entree numerique 2 est stable\n");
+ createMail(0, 16, NULL);
} else {
// Entre numerique 2 n'est pas stable
@@ -140,8 +143,10 @@
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);
+ if(mail->type == 0) printf("Une lecture a ete detectee sur l'entree numerique %d, a %s secondes\n", mail->pinNumber, mail->time);
+ else {
+ printf("Une lecture a ete detectee sur l'entree analogique %d, a %s secondes\nLa moyenne est: %f\n", mail->pinNumber, mail->time, mail->moyenne);
+ }
mail_box.free(mail);
}
else Thread::yield();
@@ -172,6 +177,7 @@
int main() {
// Démarrage des tâches
printf("Demarrage des taches...\n");
+ set_time(1485514920); // Set RTC time to Wed, 28 Oct 2009 11:35:37
Thread t_lectureNum(lecture_num);
Thread t_lectureAnalog(lecture_analog);
@@ -184,5 +190,5 @@
// Initialisation du RTC
ticker.attach(&alarm, 0.05);
- while(1) {}
+ while(1);
}
\ No newline at end of file