team app1 / Mbed 2 deprecated app2

Dependencies:   mbed mbed-rtos

Committer:
kkalsi
Date:
Sat Sep 16 16:41:19 2017 +0000
Revision:
3:637374dbfc6d
Parent:
2:1303607f8777
Child:
4:877b4e9cad76
pot et buttons fonctionelle

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
vincentlabbe 1:a18a07e03e7d 35
kkalsi 3:637374dbfc6d 36 // Thread pour lecture analogique
kkalsi 3:637374dbfc6d 37 void lecture_analog(void const *args) {
kkalsi 3:637374dbfc6d 38 while (true)
kkalsi 3:637374dbfc6d 39 {
kkalsi 3:637374dbfc6d 40 Thread::signal_wait(0x2); // WAITING STATE (waiting for an event)
kkalsi 3:637374dbfc6d 41
kkalsi 3:637374dbfc6d 42 Tableau_Moyenne_p19[tab_counter] = ea_1.read_u16(); //= LIRE PATTE 8 ;
kkalsi 3:637374dbfc6d 43 Tableau_Moyenne_p20[tab_counter] = ea_2.read_u16(); //= LIRE PATTE 8 ;
kkalsi 3:637374dbfc6d 44
kkalsi 3:637374dbfc6d 45 tab_counter = tab_counter % 5 + 1; // incrémentation de i
kkalsi 3:637374dbfc6d 46
kkalsi 3:637374dbfc6d 47 if(tab_counter % 5 == 0) // validation duree de 1.25 seconde sont terminée
kkalsi 3:637374dbfc6d 48 {
kkalsi 3:637374dbfc6d 49 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 50 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 51 }
vincentlabbe 1:a18a07e03e7d 52
kkalsi 3:637374dbfc6d 53 // vérification de la difference de la moyenne de 12.5% pour la première potentiometre
kkalsi 3:637374dbfc6d 54 if((Ancienne_moyenne_p19 - Nouvelle_moyenne_p19) > 40960 || (Nouvelle_moyenne_p19 - Ancienne_moyenne_p19) > 40960)
kkalsi 3:637374dbfc6d 55 {
kkalsi 3:637374dbfc6d 56 //Detection dun evenement
kkalsi 3:637374dbfc6d 57 pc.printf("ancienne moyenne pin 19 1 = %d ", Ancienne_moyenne_p19);
kkalsi 3:637374dbfc6d 58 pc.printf("nouvelle moyenne pin 19= %d ", Nouvelle_moyenne_p19);
kkalsi 3:637374dbfc6d 59 pc.printf("difference pin 19 = %d ", (Ancienne_moyenne_p19 - Nouvelle_moyenne_p19)/5);
kkalsi 3:637374dbfc6d 60 pc.printf("Evenement detectee \n\r");
kkalsi 3:637374dbfc6d 61 }
kkalsi 3:637374dbfc6d 62
kkalsi 3:637374dbfc6d 63 // vérification de la difference de la moyenne de 12.5% pour le deuxieme potentiometre
kkalsi 3:637374dbfc6d 64 if((Ancienne_moyenne_p20 - Nouvelle_moyenne_p20) > 40960 || (Nouvelle_moyenne_p20 - Ancienne_moyenne_p20) > 40960)
kkalsi 3:637374dbfc6d 65 {
kkalsi 3:637374dbfc6d 66 //Detection dun evenement
kkalsi 3:637374dbfc6d 67 pc.printf("ancienne moyenne pin 20= %d ", Ancienne_moyenne_p20);
kkalsi 3:637374dbfc6d 68 pc.printf("nouvelle moyenne pin 20= %d ", Nouvelle_moyenne_p20);
kkalsi 3:637374dbfc6d 69 pc.printf("difference pin 20= %d ", (Ancienne_moyenne_p20 - Nouvelle_moyenne_p20)/5);
kkalsi 3:637374dbfc6d 70 pc.printf("Evenement detectee \n\r");
kkalsi 3:637374dbfc6d 71 }
kkalsi 3:637374dbfc6d 72
kkalsi 3:637374dbfc6d 73 // mise a jour de l'ancienne moyenne pour les 2 potentiometres
kkalsi 3:637374dbfc6d 74 if(tab_counter % 5 == 0)
kkalsi 3:637374dbfc6d 75 {
kkalsi 3:637374dbfc6d 76 Ancienne_moyenne_p19 = Nouvelle_moyenne_p19;
kkalsi 3:637374dbfc6d 77 Ancienne_moyenne_p20 = Nouvelle_moyenne_p20;
kkalsi 3:637374dbfc6d 78 }
kkalsi 3:637374dbfc6d 79 }
kkalsi 3:637374dbfc6d 80 }
vincentlabbe 1:a18a07e03e7d 81
kkalsi 3:637374dbfc6d 82 // Thread pour lecture numérique
kkalsi 3:637374dbfc6d 83 void lecture_num(void const *args)
kkalsi 3:637374dbfc6d 84 {
kkalsi 3:637374dbfc6d 85 while (true)
kkalsi 3:637374dbfc6d 86 {
kkalsi 3:637374dbfc6d 87 Thread::signal_wait(0x1); // WAITING STATE (waiting for an event)
kkalsi 3:637374dbfc6d 88 currentStateButton1 = en_1.read(); // lecture courante numérique button 1
kkalsi 3:637374dbfc6d 89 currentStateButton2 = en_2.read(); // lecture courante numerique button 2
vincentlabbe 2:1303607f8777 90
kkalsi 3:637374dbfc6d 91 if(previousStateButton1 != currentStateButton1 || previousStateButton2 != currentStateButton2) // détection de changement d'état pour les 2 buttons
kkalsi 3:637374dbfc6d 92 {
kkalsi 3:637374dbfc6d 93 Thread::wait(50); // période de stabilisation de 50ms
kkalsi 3:637374dbfc6d 94
kkalsi 3:637374dbfc6d 95 validationStateButton1 = en_1.read(); // nouvelle lecture apres stabilisation button 1
kkalsi 3:637374dbfc6d 96 validationStateButton2 = en_2.read(); // nouvelle lecture apres stabilisation button 2
kkalsi 3:637374dbfc6d 97
kkalsi 3:637374dbfc6d 98 if(currentStateButton1 == validationStateButton1 || currentStateButton2 == validationStateButton2) // validation apres stabilisation pour les 2 buttons
kkalsi 3:637374dbfc6d 99 {
kkalsi 3:637374dbfc6d 100 pc.printf("Button peser evenement detecter!\n\r"); // declarer evenement
kkalsi 3:637374dbfc6d 101 }
vincentlabbe 2:1303607f8777 102 }
kkalsi 3:637374dbfc6d 103 previousStateButton1 = validationStateButton1; // mise a jour de l'état précédente button 1
kkalsi 3:637374dbfc6d 104 previousStateButton2 = validationStateButton2; // mise a jour de l'etat precedente button 2
kkalsi 3:637374dbfc6d 105 }
kkalsi 3:637374dbfc6d 106 }
kkalsi 3:637374dbfc6d 107
kkalsi 3:637374dbfc6d 108 // sampling timer
kkalsi 3:637374dbfc6d 109 void interuptTimer()
kkalsi 3:637374dbfc6d 110 {
kkalsi 3:637374dbfc6d 111 if (ISRcounter % 2 == 0) //permet échantillonage chaque 100ms car detecter 1 fois sur 2
kkalsi 3:637374dbfc6d 112 {
kkalsi 3:637374dbfc6d 113 threadNumerique->signal_set(0x1); //event occurs to trigger in response to signal waiting state
vincentlabbe 2:1303607f8777 114 }
vincentlabbe 1:a18a07e03e7d 115
kkalsi 3:637374dbfc6d 116 if (ISRcounter % 5 == 0) ////permet échantillonage chaque 250ms
kkalsi 3:637374dbfc6d 117 {
kkalsi 3:637374dbfc6d 118 threadAnalogique->signal_set(0x2); //event occurs to trigger in response to signal waiting state
vincentlabbe 2:1303607f8777 119 }
vincentlabbe 2:1303607f8777 120
kkalsi 3:637374dbfc6d 121 ISRcounter++;
vincentlabbe 1:a18a07e03e7d 122 }
vincentlabbe 0:0fb169e1b9b4 123
vincentlabbe 0:0fb169e1b9b4 124 int main() {
kkalsi 3:637374dbfc6d 125
kkalsi 3:637374dbfc6d 126 Thread thread1; //Create thread 1, READY state
kkalsi 3:637374dbfc6d 127 threadNumerique = &thread1;
kkalsi 3:637374dbfc6d 128
kkalsi 3:637374dbfc6d 129 Thread thread2; //Create thread 2, READY state
kkalsi 3:637374dbfc6d 130 threadAnalogique = &thread2;
kkalsi 3:637374dbfc6d 131
kkalsi 3:637374dbfc6d 132 threadNumerique->start(callback(lecture_num, (void *)NULL)); // RUNNING state
kkalsi 3:637374dbfc6d 133
kkalsi 3:637374dbfc6d 134 threadAnalogique->start(callback(lecture_analog, (void *)NULL)); // RUNNING state
kkalsi 3:637374dbfc6d 135
kkalsi 3:637374dbfc6d 136 sample.attach(&interuptTimer, 0.05); // période d'échantillonage chaque 50ms
kkalsi 3:637374dbfc6d 137 while(1) {}
vincentlabbe 0:0fb169e1b9b4 138 }
vincentlabbe 1:a18a07e03e7d 139
vincentlabbe 1:a18a07e03e7d 140
vincentlabbe 1:a18a07e03e7d 141
kkalsi 3:637374dbfc6d 142
kkalsi 3:637374dbfc6d 143
kkalsi 3:637374dbfc6d 144
kkalsi 3:637374dbfc6d 145
kkalsi 3:637374dbfc6d 146
kkalsi 3:637374dbfc6d 147
kkalsi 3:637374dbfc6d 148
kkalsi 3:637374dbfc6d 149
kkalsi 3:637374dbfc6d 150
kkalsi 3:637374dbfc6d 151
kkalsi 3:637374dbfc6d 152
kkalsi 3:637374dbfc6d 153
kkalsi 3:637374dbfc6d 154
kkalsi 3:637374dbfc6d 155
kkalsi 3:637374dbfc6d 156
kkalsi 3:637374dbfc6d 157
kkalsi 3:637374dbfc6d 158
kkalsi 3:637374dbfc6d 159
kkalsi 3:637374dbfc6d 160
kkalsi 3:637374dbfc6d 161
kkalsi 3:637374dbfc6d 162
kkalsi 3:637374dbfc6d 163
kkalsi 3:637374dbfc6d 164
kkalsi 3:637374dbfc6d 165
kkalsi 3:637374dbfc6d 166