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.
main.cpp@3:637374dbfc6d, 2017-09-16 (annotated)
- 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?
User | Revision | Line number | New 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 |