team app1 / Mbed 2 deprecated app2

Dependencies:   mbed mbed-rtos

Committer:
kkalsi
Date:
Sun Sep 17 15:21:54 2017 +0000
Revision:
4:877b4e9cad76
Parent:
3:637374dbfc6d
Child:
5:85cbea9f3eb7
analog not working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vincentlabbe 0:0fb169e1b9b4 1 #include "mbed.h"
kkalsi 3:637374dbfc6d 2 #include "rtos.h"
kkalsi 3:637374dbfc6d 3
kkalsi 3:637374dbfc6d 4 Serial pc(USBTX, USBRX); // tx, rx
kkalsi 3:637374dbfc6d 5 DigitalIn en_1(p15);
kkalsi 3:637374dbfc6d 6 DigitalIn en_2(p16);
kkalsi 3:637374dbfc6d 7 AnalogIn ea_1(p19);
kkalsi 3:637374dbfc6d 8 AnalogIn ea_2(p20);
kkalsi 3:637374dbfc6d 9
kkalsi 3:637374dbfc6d 10 Ticker sample;
kkalsi 3:637374dbfc6d 11
kkalsi 3:637374dbfc6d 12 // variable globale pour lecture button 1
kkalsi 3:637374dbfc6d 13 int previousStateButton1 = 0;
kkalsi 3:637374dbfc6d 14 int currentStateButton1;
kkalsi 3:637374dbfc6d 15 int validationStateButton1;
kkalsi 3:637374dbfc6d 16
kkalsi 3:637374dbfc6d 17 // variable globale pour lecture button 2
kkalsi 3:637374dbfc6d 18 int previousStateButton2 = 0;
kkalsi 3:637374dbfc6d 19 int currentStateButton2;
kkalsi 3:637374dbfc6d 20 int validationStateButton2;
vincentlabbe 0:0fb169e1b9b4 21
kkalsi 3:637374dbfc6d 22 // variable globale pour lecture potentiometre
kkalsi 3:637374dbfc6d 23 int tab_counter =0;
kkalsi 3:637374dbfc6d 24 int Nouvelle_moyenne_p19;
kkalsi 3:637374dbfc6d 25 int Ancienne_moyenne_p19 = 0;
kkalsi 3:637374dbfc6d 26 int Nouvelle_moyenne_p20;
kkalsi 3:637374dbfc6d 27 int Ancienne_moyenne_p20 = 0;
kkalsi 3:637374dbfc6d 28 unsigned short Tableau_Moyenne_p19[5]={0,0,0,0,0};
kkalsi 3:637374dbfc6d 29 unsigned short Tableau_Moyenne_p20[5]={0,0,0,0,0};
kkalsi 3:637374dbfc6d 30
kkalsi 3:637374dbfc6d 31 int ISRcounter = 0;
kkalsi 3:637374dbfc6d 32
kkalsi 3:637374dbfc6d 33 Thread *threadNumerique; // pointeur vers le thread du lecture numérique
kkalsi 3:637374dbfc6d 34 Thread *threadAnalogique; // pointeur vers le thread du lecture analogique
kkalsi 4:877b4e9cad76 35 Thread *threadCollection; // pointeur vers le thread d'affichage d'evenement
kkalsi 4:877b4e9cad76 36
kkalsi 4:877b4e9cad76 37 // Pour le time stamp
kkalsi 4:877b4e9cad76 38 char buffer[32];
kkalsi 4:877b4e9cad76 39
kkalsi 4:877b4e9cad76 40 // structure de data
kkalsi 4:877b4e9cad76 41 typedef struct {
kkalsi 4:877b4e9cad76 42 time_t seconds;
kkalsi 4:877b4e9cad76 43 int pinNumero;
kkalsi 4:877b4e9cad76 44 //int state;
kkalsi 4:877b4e9cad76 45 } data;
kkalsi 4:877b4e9cad76 46
kkalsi 4:877b4e9cad76 47 // Create queue
kkalsi 4:877b4e9cad76 48 Queue<data, 32> queue;
kkalsi 4:877b4e9cad76 49
kkalsi 4:877b4e9cad76 50 // Create memory pool
kkalsi 4:877b4e9cad76 51 MemoryPool<data, 32> mpool;
kkalsi 4:877b4e9cad76 52
kkalsi 4:877b4e9cad76 53 // osEvent to get from queue
kkalsi 4:877b4e9cad76 54 osEvent evt;
vincentlabbe 1:a18a07e03e7d 55
kkalsi 3:637374dbfc6d 56 // Thread pour lecture analogique
kkalsi 3:637374dbfc6d 57 void lecture_analog(void const *args) {
kkalsi 3:637374dbfc6d 58 while (true)
kkalsi 3:637374dbfc6d 59 {
kkalsi 3:637374dbfc6d 60 Thread::signal_wait(0x2); // WAITING STATE (waiting for an event)
kkalsi 3:637374dbfc6d 61
kkalsi 4:877b4e9cad76 62 // create data structure
kkalsi 4:877b4e9cad76 63 data *analogData;
kkalsi 4:877b4e9cad76 64
kkalsi 3:637374dbfc6d 65 Tableau_Moyenne_p19[tab_counter] = ea_1.read_u16(); //= LIRE PATTE 8 ;
kkalsi 3:637374dbfc6d 66 Tableau_Moyenne_p20[tab_counter] = ea_2.read_u16(); //= LIRE PATTE 8 ;
kkalsi 3:637374dbfc6d 67
kkalsi 3:637374dbfc6d 68 tab_counter = tab_counter % 5 + 1; // incrémentation de i
kkalsi 3:637374dbfc6d 69
kkalsi 3:637374dbfc6d 70 if(tab_counter % 5 == 0) // validation duree de 1.25 seconde sont terminée
kkalsi 3:637374dbfc6d 71 {
kkalsi 3:637374dbfc6d 72 Nouvelle_moyenne_p19 = (int)Tableau_Moyenne_p19[0]+(int)Tableau_Moyenne_p19[1]+(int)Tableau_Moyenne_p19[2]+(int)Tableau_Moyenne_p19[3]+(int)Tableau_Moyenne_p19[4];
kkalsi 3:637374dbfc6d 73 Nouvelle_moyenne_p20 = (int)Tableau_Moyenne_p20[0]+(int)Tableau_Moyenne_p20[1]+(int)Tableau_Moyenne_p20[2]+(int)Tableau_Moyenne_p20[3]+(int)Tableau_Moyenne_p20[4];
kkalsi 3:637374dbfc6d 74 }
vincentlabbe 1:a18a07e03e7d 75
kkalsi 3:637374dbfc6d 76 // vérification de la difference de la moyenne de 12.5% pour la première potentiometre
kkalsi 4:877b4e9cad76 77 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)
kkalsi 3:637374dbfc6d 78 {
kkalsi 3:637374dbfc6d 79 //Detection dun evenement
kkalsi 4:877b4e9cad76 80
kkalsi 3:637374dbfc6d 81 pc.printf("ancienne moyenne pin 19 1 = %d ", Ancienne_moyenne_p19);
kkalsi 3:637374dbfc6d 82 pc.printf("nouvelle moyenne pin 19= %d ", Nouvelle_moyenne_p19);
kkalsi 3:637374dbfc6d 83 pc.printf("difference pin 19 = %d ", (Ancienne_moyenne_p19 - Nouvelle_moyenne_p19)/5);
kkalsi 4:877b4e9cad76 84 pc.printf("ancienne moyenne pin 20= %d ", Ancienne_moyenne_p20);
kkalsi 4:877b4e9cad76 85 pc.printf("nouvelle moyenne pin 20= %d ", Nouvelle_moyenne_p20);
kkalsi 4:877b4e9cad76 86 pc.printf("difference pin 20= %d ", (Ancienne_moyenne_p20 - Nouvelle_moyenne_p20)/5);
kkalsi 4:877b4e9cad76 87
kkalsi 4:877b4e9cad76 88
kkalsi 4:877b4e9cad76 89 // associte data structure to memory pool
kkalsi 4:877b4e9cad76 90 analogData = mpool.alloc();
kkalsi 4:877b4e9cad76 91
kkalsi 4:877b4e9cad76 92
kkalsi 4:877b4e9cad76 93
kkalsi 4:877b4e9cad76 94 if((Ancienne_moyenne_p20 - Nouvelle_moyenne_p20) > 40960 || (Nouvelle_moyenne_p20 - Ancienne_moyenne_p20) > 40960)
kkalsi 4:877b4e9cad76 95 {
kkalsi 4:877b4e9cad76 96 analogData->pinNumero = 20;
kkalsi 4:877b4e9cad76 97 }
kkalsi 4:877b4e9cad76 98 else
kkalsi 4:877b4e9cad76 99 {
kkalsi 4:877b4e9cad76 100 analogData->pinNumero = 19;
kkalsi 4:877b4e9cad76 101 }
kkalsi 4:877b4e9cad76 102
kkalsi 4:877b4e9cad76 103 analogData->seconds = time(NULL);
kkalsi 4:877b4e9cad76 104 queue.put(analogData);
kkalsi 3:637374dbfc6d 105 }
kkalsi 3:637374dbfc6d 106
kkalsi 3:637374dbfc6d 107 // vérification de la difference de la moyenne de 12.5% pour le deuxieme potentiometre
kkalsi 4:877b4e9cad76 108 /*
kkalsi 4:877b4e9cad76 109 else if((Ancienne_moyenne_p20 - Nouvelle_moyenne_p20) > 40960 || (Nouvelle_moyenne_p20 - Ancienne_moyenne_p20) > 40960)
kkalsi 3:637374dbfc6d 110 {
kkalsi 3:637374dbfc6d 111 //Detection dun evenement
kkalsi 4:877b4e9cad76 112
kkalsi 3:637374dbfc6d 113 pc.printf("ancienne moyenne pin 20= %d ", Ancienne_moyenne_p20);
kkalsi 3:637374dbfc6d 114 pc.printf("nouvelle moyenne pin 20= %d ", Nouvelle_moyenne_p20);
kkalsi 3:637374dbfc6d 115 pc.printf("difference pin 20= %d ", (Ancienne_moyenne_p20 - Nouvelle_moyenne_p20)/5);
kkalsi 3:637374dbfc6d 116 pc.printf("Evenement detectee \n\r");
kkalsi 4:877b4e9cad76 117
kkalsi 4:877b4e9cad76 118
kkalsi 4:877b4e9cad76 119 // associte data structure to memory pool
kkalsi 4:877b4e9cad76 120 analogData = mpool.alloc();
kkalsi 4:877b4e9cad76 121 analogData->pinNumero = 20;
kkalsi 4:877b4e9cad76 122 analogData->seconds = time(NULL);
kkalsi 4:877b4e9cad76 123 queue.put(analogData);
kkalsi 3:637374dbfc6d 124 }
kkalsi 4:877b4e9cad76 125 */
kkalsi 3:637374dbfc6d 126
kkalsi 3:637374dbfc6d 127 // mise a jour de l'ancienne moyenne pour les 2 potentiometres
kkalsi 3:637374dbfc6d 128 if(tab_counter % 5 == 0)
kkalsi 4:877b4e9cad76 129 {
kkalsi 4:877b4e9cad76 130 Ancienne_moyenne_p20 = Nouvelle_moyenne_p20;
kkalsi 3:637374dbfc6d 131 Ancienne_moyenne_p19 = Nouvelle_moyenne_p19;
kkalsi 3:637374dbfc6d 132 }
kkalsi 3:637374dbfc6d 133 }
kkalsi 3:637374dbfc6d 134 }
vincentlabbe 1:a18a07e03e7d 135
kkalsi 3:637374dbfc6d 136 // Thread pour lecture numérique
kkalsi 3:637374dbfc6d 137 void lecture_num(void const *args)
kkalsi 3:637374dbfc6d 138 {
kkalsi 3:637374dbfc6d 139 while (true)
kkalsi 3:637374dbfc6d 140 {
kkalsi 3:637374dbfc6d 141 Thread::signal_wait(0x1); // WAITING STATE (waiting for an event)
kkalsi 4:877b4e9cad76 142
kkalsi 4:877b4e9cad76 143 // create data structure
kkalsi 4:877b4e9cad76 144 data *numData;
kkalsi 4:877b4e9cad76 145
kkalsi 3:637374dbfc6d 146 currentStateButton1 = en_1.read(); // lecture courante numérique button 1
kkalsi 3:637374dbfc6d 147 currentStateButton2 = en_2.read(); // lecture courante numerique button 2
vincentlabbe 2:1303607f8777 148
kkalsi 3:637374dbfc6d 149 if(previousStateButton1 != currentStateButton1 || previousStateButton2 != currentStateButton2) // détection de changement d'état pour les 2 buttons
kkalsi 3:637374dbfc6d 150 {
kkalsi 3:637374dbfc6d 151 Thread::wait(50); // période de stabilisation de 50ms
kkalsi 3:637374dbfc6d 152
kkalsi 3:637374dbfc6d 153 validationStateButton1 = en_1.read(); // nouvelle lecture apres stabilisation button 1
kkalsi 3:637374dbfc6d 154 validationStateButton2 = en_2.read(); // nouvelle lecture apres stabilisation button 2
kkalsi 3:637374dbfc6d 155
kkalsi 4:877b4e9cad76 156 if(currentStateButton1 == validationStateButton1 || currentStateButton2 == validationStateButton2)
kkalsi 4:877b4e9cad76 157 {
kkalsi 4:877b4e9cad76 158 // associte data structure to memory pool
kkalsi 4:877b4e9cad76 159 numData = mpool.alloc();
kkalsi 4:877b4e9cad76 160
kkalsi 4:877b4e9cad76 161 if(previousStateButton1 != currentStateButton1)
kkalsi 4:877b4e9cad76 162 {
kkalsi 4:877b4e9cad76 163 numData->pinNumero = 15;
kkalsi 4:877b4e9cad76 164 }
kkalsi 4:877b4e9cad76 165
kkalsi 4:877b4e9cad76 166 if(previousStateButton2 != currentStateButton2)
kkalsi 4:877b4e9cad76 167 {
kkalsi 4:877b4e9cad76 168 numData->pinNumero = 16;
kkalsi 4:877b4e9cad76 169 }
kkalsi 4:877b4e9cad76 170
kkalsi 4:877b4e9cad76 171 numData->seconds = time(NULL);
kkalsi 4:877b4e9cad76 172 queue.put(numData);
kkalsi 4:877b4e9cad76 173 }
kkalsi 4:877b4e9cad76 174
vincentlabbe 2:1303607f8777 175 }
kkalsi 3:637374dbfc6d 176 previousStateButton1 = validationStateButton1; // mise a jour de l'état précédente button 1
kkalsi 3:637374dbfc6d 177 previousStateButton2 = validationStateButton2; // mise a jour de l'etat precedente button 2
kkalsi 3:637374dbfc6d 178 }
kkalsi 3:637374dbfc6d 179 }
kkalsi 3:637374dbfc6d 180
kkalsi 4:877b4e9cad76 181 // Thread pour afficher les evenements
kkalsi 4:877b4e9cad76 182 void collection(void const *args) {
kkalsi 4:877b4e9cad76 183 while (true) {
kkalsi 4:877b4e9cad76 184
kkalsi 4:877b4e9cad76 185 // get data from queue and store in evt
kkalsi 4:877b4e9cad76 186 evt = queue.get();
kkalsi 4:877b4e9cad76 187 // error check
kkalsi 4:877b4e9cad76 188 if (evt.status == osEventMessage) {
kkalsi 4:877b4e9cad76 189 // retrive information from queue to data structure
kkalsi 4:877b4e9cad76 190 data *dataDisplay = (data*)evt.value.p;
kkalsi 4:877b4e9cad76 191
kkalsi 4:877b4e9cad76 192 // conversion des secondes en format AA:MM:JJ:HH:MM:SS
kkalsi 4:877b4e9cad76 193 strftime(buffer, 32, "%y:%m:%d:%H:%M:%S \n\r", localtime(&dataDisplay->seconds));
kkalsi 4:877b4e9cad76 194 printf("Time as a custom formatted string = %s\n\r", buffer);
kkalsi 4:877b4e9cad76 195 printf("Pin numero = %d\n\r", dataDisplay->pinNumero);
kkalsi 4:877b4e9cad76 196
kkalsi 4:877b4e9cad76 197 mpool.free(dataDisplay); // free memory pool
kkalsi 4:877b4e9cad76 198 }
kkalsi 4:877b4e9cad76 199 }
kkalsi 4:877b4e9cad76 200 }
kkalsi 4:877b4e9cad76 201
kkalsi 4:877b4e9cad76 202
kkalsi 3:637374dbfc6d 203 // sampling timer
kkalsi 3:637374dbfc6d 204 void interuptTimer()
kkalsi 3:637374dbfc6d 205 {
kkalsi 3:637374dbfc6d 206 if (ISRcounter % 2 == 0) //permet échantillonage chaque 100ms car detecter 1 fois sur 2
kkalsi 3:637374dbfc6d 207 {
kkalsi 3:637374dbfc6d 208 threadNumerique->signal_set(0x1); //event occurs to trigger in response to signal waiting state
vincentlabbe 2:1303607f8777 209 }
vincentlabbe 1:a18a07e03e7d 210
kkalsi 3:637374dbfc6d 211 if (ISRcounter % 5 == 0) ////permet échantillonage chaque 250ms
kkalsi 3:637374dbfc6d 212 {
kkalsi 3:637374dbfc6d 213 threadAnalogique->signal_set(0x2); //event occurs to trigger in response to signal waiting state
vincentlabbe 2:1303607f8777 214 }
vincentlabbe 2:1303607f8777 215
kkalsi 3:637374dbfc6d 216 ISRcounter++;
vincentlabbe 1:a18a07e03e7d 217 }
vincentlabbe 0:0fb169e1b9b4 218
kkalsi 4:877b4e9cad76 219
vincentlabbe 0:0fb169e1b9b4 220 int main() {
kkalsi 4:877b4e9cad76 221 set_time(1505568984); // Set RTC time to today
kkalsi 3:637374dbfc6d 222
kkalsi 3:637374dbfc6d 223 Thread thread1; //Create thread 1, READY state
kkalsi 3:637374dbfc6d 224 threadNumerique = &thread1;
kkalsi 3:637374dbfc6d 225
kkalsi 3:637374dbfc6d 226 Thread thread2; //Create thread 2, READY state
kkalsi 4:877b4e9cad76 227 threadAnalogique = &thread2;
kkalsi 4:877b4e9cad76 228
kkalsi 4:877b4e9cad76 229 Thread thread3; //Create thread 3, READY state
kkalsi 4:877b4e9cad76 230 threadCollection = &thread3;
kkalsi 3:637374dbfc6d 231
kkalsi 3:637374dbfc6d 232 threadNumerique->start(callback(lecture_num, (void *)NULL)); // RUNNING state
kkalsi 3:637374dbfc6d 233
kkalsi 3:637374dbfc6d 234 threadAnalogique->start(callback(lecture_analog, (void *)NULL)); // RUNNING state
kkalsi 3:637374dbfc6d 235
kkalsi 4:877b4e9cad76 236 threadCollection->start(callback(collection, (void *)NULL)); // RUNNING state
kkalsi 4:877b4e9cad76 237
kkalsi 3:637374dbfc6d 238 sample.attach(&interuptTimer, 0.05); // période d'échantillonage chaque 50ms
kkalsi 3:637374dbfc6d 239 while(1) {}
vincentlabbe 0:0fb169e1b9b4 240 }
vincentlabbe 1:a18a07e03e7d 241