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:
- 4:877b4e9cad76
- Parent:
- 3:637374dbfc6d
- Child:
- 5:85cbea9f3eb7
--- a/main.cpp Sat Sep 16 16:41:19 2017 +0000
+++ b/main.cpp Sun Sep 17 15:21:54 2017 +0000
@@ -32,6 +32,26 @@
Thread *threadNumerique; // pointeur vers le thread du lecture numérique
Thread *threadAnalogique; // pointeur vers le thread du lecture analogique
+Thread *threadCollection; // pointeur vers le thread d'affichage d'evenement
+
+// Pour le time stamp
+char buffer[32];
+
+// structure de data
+typedef struct {
+ time_t seconds;
+ int pinNumero;
+ //int state;
+} data;
+
+// Create queue
+Queue<data, 32> queue;
+
+// Create memory pool
+MemoryPool<data, 32> mpool;
+
+// osEvent to get from queue
+osEvent evt;
// Thread pour lecture analogique
void lecture_analog(void const *args) {
@@ -39,6 +59,9 @@
{
Thread::signal_wait(0x2); // WAITING STATE (waiting for an event)
+ // create data structure
+ data *analogData;
+
Tableau_Moyenne_p19[tab_counter] = ea_1.read_u16(); //= LIRE PATTE 8 ;
Tableau_Moyenne_p20[tab_counter] = ea_2.read_u16(); //= LIRE PATTE 8 ;
@@ -51,30 +74,61 @@
}
// vérification de la difference de la moyenne de 12.5% pour la première potentiometre
- if((Ancienne_moyenne_p19 - Nouvelle_moyenne_p19) > 40960 || (Nouvelle_moyenne_p19 - Ancienne_moyenne_p19) > 40960)
+ if((Ancienne_moyenne_p19 - Nouvelle_moyenne_p19) > 40960 || (Nouvelle_moyenne_p19 - Ancienne_moyenne_p19) > 40960 || (Ancienne_moyenne_p20 - Nouvelle_moyenne_p20) > 40960 || (Nouvelle_moyenne_p20 - Ancienne_moyenne_p20) > 40960)
{
//Detection dun evenement
+
pc.printf("ancienne moyenne pin 19 1 = %d ", Ancienne_moyenne_p19);
pc.printf("nouvelle moyenne pin 19= %d ", Nouvelle_moyenne_p19);
pc.printf("difference pin 19 = %d ", (Ancienne_moyenne_p19 - Nouvelle_moyenne_p19)/5);
- pc.printf("Evenement detectee \n\r");
+ pc.printf("ancienne moyenne pin 20= %d ", Ancienne_moyenne_p20);
+ pc.printf("nouvelle moyenne pin 20= %d ", Nouvelle_moyenne_p20);
+ pc.printf("difference pin 20= %d ", (Ancienne_moyenne_p20 - Nouvelle_moyenne_p20)/5);
+
+
+ // associte data structure to memory pool
+ analogData = mpool.alloc();
+
+
+
+ if((Ancienne_moyenne_p20 - Nouvelle_moyenne_p20) > 40960 || (Nouvelle_moyenne_p20 - Ancienne_moyenne_p20) > 40960)
+ {
+ analogData->pinNumero = 20;
+ }
+ else
+ {
+ analogData->pinNumero = 19;
+ }
+
+ analogData->seconds = time(NULL);
+ queue.put(analogData);
}
// vérification de la difference de la moyenne de 12.5% pour le deuxieme potentiometre
- if((Ancienne_moyenne_p20 - Nouvelle_moyenne_p20) > 40960 || (Nouvelle_moyenne_p20 - Ancienne_moyenne_p20) > 40960)
+ /*
+ else if((Ancienne_moyenne_p20 - Nouvelle_moyenne_p20) > 40960 || (Nouvelle_moyenne_p20 - Ancienne_moyenne_p20) > 40960)
{
//Detection dun evenement
+
pc.printf("ancienne moyenne pin 20= %d ", Ancienne_moyenne_p20);
pc.printf("nouvelle moyenne pin 20= %d ", Nouvelle_moyenne_p20);
pc.printf("difference pin 20= %d ", (Ancienne_moyenne_p20 - Nouvelle_moyenne_p20)/5);
pc.printf("Evenement detectee \n\r");
+
+
+ // associte data structure to memory pool
+ analogData = mpool.alloc();
+ analogData->pinNumero = 20;
+ analogData->seconds = time(NULL);
+ queue.put(analogData);
}
+ */
// mise a jour de l'ancienne moyenne pour les 2 potentiometres
if(tab_counter % 5 == 0)
- {
+ {
+ Ancienne_moyenne_p20 = Nouvelle_moyenne_p20;
Ancienne_moyenne_p19 = Nouvelle_moyenne_p19;
- Ancienne_moyenne_p20 = Nouvelle_moyenne_p20;
}
}
}
@@ -85,6 +139,10 @@
while (true)
{
Thread::signal_wait(0x1); // WAITING STATE (waiting for an event)
+
+ // create data structure
+ data *numData;
+
currentStateButton1 = en_1.read(); // lecture courante numérique button 1
currentStateButton2 = en_2.read(); // lecture courante numerique button 2
@@ -95,16 +153,53 @@
validationStateButton1 = en_1.read(); // nouvelle lecture apres stabilisation button 1
validationStateButton2 = en_2.read(); // nouvelle lecture apres stabilisation button 2
- if(currentStateButton1 == validationStateButton1 || currentStateButton2 == validationStateButton2) // validation apres stabilisation pour les 2 buttons
- {
- pc.printf("Button peser evenement detecter!\n\r"); // declarer evenement
- }
+ if(currentStateButton1 == validationStateButton1 || currentStateButton2 == validationStateButton2)
+ {
+ // associte data structure to memory pool
+ numData = mpool.alloc();
+
+ if(previousStateButton1 != currentStateButton1)
+ {
+ numData->pinNumero = 15;
+ }
+
+ if(previousStateButton2 != currentStateButton2)
+ {
+ numData->pinNumero = 16;
+ }
+
+ numData->seconds = time(NULL);
+ queue.put(numData);
+ }
+
}
previousStateButton1 = validationStateButton1; // mise a jour de l'état précédente button 1
previousStateButton2 = validationStateButton2; // mise a jour de l'etat precedente button 2
}
}
+// Thread pour afficher les evenements
+void collection(void const *args) {
+while (true) {
+
+ // get data from queue and store in evt
+ evt = queue.get();
+ // error check
+ if (evt.status == osEventMessage) {
+ // retrive information from queue to data structure
+ data *dataDisplay = (data*)evt.value.p;
+
+ // conversion des secondes en format AA:MM:JJ:HH:MM:SS
+ strftime(buffer, 32, "%y:%m:%d:%H:%M:%S \n\r", localtime(&dataDisplay->seconds));
+ printf("Time as a custom formatted string = %s\n\r", buffer);
+ printf("Pin numero = %d\n\r", dataDisplay->pinNumero);
+
+ mpool.free(dataDisplay); // free memory pool
+ }
+}
+}
+
+
// sampling timer
void interuptTimer()
{
@@ -121,46 +216,26 @@
ISRcounter++;
}
+
int main() {
+ set_time(1505568984); // Set RTC time to today
Thread thread1; //Create thread 1, READY state
threadNumerique = &thread1;
Thread thread2; //Create thread 2, READY state
- threadAnalogique = &thread2;
+ threadAnalogique = &thread2;
+
+ Thread thread3; //Create thread 3, READY state
+ threadCollection = &thread3;
threadNumerique->start(callback(lecture_num, (void *)NULL)); // RUNNING state
threadAnalogique->start(callback(lecture_analog, (void *)NULL)); // RUNNING state
+ threadCollection->start(callback(collection, (void *)NULL)); // RUNNING state
+
sample.attach(&interuptTimer, 0.05); // période d'échantillonage chaque 50ms
while(1) {}
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-