TR
Dependencies: TextLCD mbed angleandposition
main.cpp@0:6faafff1fb3b, 2016-05-19 (annotated)
- Committer:
- POSIPI
- Date:
- Thu May 19 13:56:14 2016 +0000
- Revision:
- 0:6faafff1fb3b
- Child:
- 1:7471900740a2
test_jacquot
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
POSIPI | 0:6faafff1fb3b | 1 | #include "mbed.h" |
POSIPI | 0:6faafff1fb3b | 2 | #include <stdlib.h> |
POSIPI | 0:6faafff1fb3b | 3 | #include <stdio.h> |
POSIPI | 0:6faafff1fb3b | 4 | #include "TextLCD.h" |
POSIPI | 0:6faafff1fb3b | 5 | |
POSIPI | 0:6faafff1fb3b | 6 | DigitalOut led1(LED1); |
POSIPI | 0:6faafff1fb3b | 7 | Serial pc(USBTX, USBRX); // tx, rx |
POSIPI | 0:6faafff1fb3b | 8 | TextLCD lcd(p21, p22, p23, p24, p25, p26, TextLCD::LCD20x4); // rs, e, d4-d7 |
POSIPI | 0:6faafff1fb3b | 9 | LocalFileSystem local("local");//enregistrement en local |
POSIPI | 0:6faafff1fb3b | 10 | |
POSIPI | 0:6faafff1fb3b | 11 | Ticker echantillonnage; |
POSIPI | 0:6faafff1fb3b | 12 | |
POSIPI | 0:6faafff1fb3b | 13 | AnalogIn Uana(p16); |
POSIPI | 0:6faafff1fb3b | 14 | AnalogIn Iana(p17); |
POSIPI | 0:6faafff1fb3b | 15 | |
POSIPI | 0:6faafff1fb3b | 16 | int compteur_echantillonnage = 0; |
POSIPI | 0:6faafff1fb3b | 17 | unsigned char n = 200; // nb d'échantillonnage sur une période |
POSIPI | 0:6faafff1fb3b | 18 | |
POSIPI | 0:6faafff1fb3b | 19 | #define Nmax 200 // nombre d'échantillonnages sur une période |
POSIPI | 0:6faafff1fb3b | 20 | #define nb_echantillon_max 10000 // 1s/20ms(temps acquisition) * Techantillonnage = 50 * 200 = 10 000 |
POSIPI | 0:6faafff1fb3b | 21 | |
POSIPI | 0:6faafff1fb3b | 22 | float U0, U20, U2n_1, Un, U2n; |
POSIPI | 0:6faafff1fb3b | 23 | float Veff = 0; |
POSIPI | 0:6faafff1fb3b | 24 | float Ufinal=0; |
POSIPI | 0:6faafff1fb3b | 25 | float I0, I20, I2n_1, In, I2n; |
POSIPI | 0:6faafff1fb3b | 26 | float Ieff = 0; |
POSIPI | 0:6faafff1fb3b | 27 | float Ifinal=0; |
POSIPI | 0:6faafff1fb3b | 28 | float P = 0; |
POSIPI | 0:6faafff1fb3b | 29 | float energie = 0; |
POSIPI | 0:6faafff1fb3b | 30 | float energie2 = 0; |
POSIPI | 0:6faafff1fb3b | 31 | float Cpt = 0; |
POSIPI | 0:6faafff1fb3b | 32 | float stock = 0; |
POSIPI | 0:6faafff1fb3b | 33 | int flag=0; |
POSIPI | 0:6faafff1fb3b | 34 | int caractereActuel = 0; |
POSIPI | 0:6faafff1fb3b | 35 | |
POSIPI | 0:6faafff1fb3b | 36 | void calcul() |
POSIPI | 0:6faafff1fb3b | 37 | { |
POSIPI | 0:6faafff1fb3b | 38 | if (compteur_echantillonnage == 0) |
POSIPI | 0:6faafff1fb3b | 39 | { |
POSIPI | 0:6faafff1fb3b | 40 | |
POSIPI | 0:6faafff1fb3b | 41 | U0 = Uana; |
POSIPI | 0:6faafff1fb3b | 42 | U0 = U0 - 0.5; |
POSIPI | 0:6faafff1fb3b | 43 | U20 = U0 * U0; |
POSIPI | 0:6faafff1fb3b | 44 | U2n_1 = U20; |
POSIPI | 0:6faafff1fb3b | 45 | |
POSIPI | 0:6faafff1fb3b | 46 | I0 = Iana; |
POSIPI | 0:6faafff1fb3b | 47 | I0 = I0 - 0.5; |
POSIPI | 0:6faafff1fb3b | 48 | I20 = I0 * I0; |
POSIPI | 0:6faafff1fb3b | 49 | I2n_1 = I20; |
POSIPI | 0:6faafff1fb3b | 50 | |
POSIPI | 0:6faafff1fb3b | 51 | compteur_echantillonnage++; |
POSIPI | 0:6faafff1fb3b | 52 | } |
POSIPI | 0:6faafff1fb3b | 53 | |
POSIPI | 0:6faafff1fb3b | 54 | |
POSIPI | 0:6faafff1fb3b | 55 | |
POSIPI | 0:6faafff1fb3b | 56 | if (compteur_echantillonnage > 0 && (compteur_echantillonnage < nb_echantillon_max)) { |
POSIPI | 0:6faafff1fb3b | 57 | |
POSIPI | 0:6faafff1fb3b | 58 | Un = Uana; |
POSIPI | 0:6faafff1fb3b | 59 | Un = Un - 0.5; |
POSIPI | 0:6faafff1fb3b | 60 | U2n = Un * Un; |
POSIPI | 0:6faafff1fb3b | 61 | |
POSIPI | 0:6faafff1fb3b | 62 | In = Iana; |
POSIPI | 0:6faafff1fb3b | 63 | In = In - 0.5; |
POSIPI | 0:6faafff1fb3b | 64 | I2n = In * In; |
POSIPI | 0:6faafff1fb3b | 65 | |
POSIPI | 0:6faafff1fb3b | 66 | Veff = (U2n + U2n_1) / 2 + Veff; |
POSIPI | 0:6faafff1fb3b | 67 | U2n_1 = U2n; |
POSIPI | 0:6faafff1fb3b | 68 | |
POSIPI | 0:6faafff1fb3b | 69 | Ieff = (I2n + I2n_1) / 2 + Ieff; |
POSIPI | 0:6faafff1fb3b | 70 | I2n_1 = I2n; |
POSIPI | 0:6faafff1fb3b | 71 | |
POSIPI | 0:6faafff1fb3b | 72 | compteur_echantillonnage++; |
POSIPI | 0:6faafff1fb3b | 73 | } |
POSIPI | 0:6faafff1fb3b | 74 | |
POSIPI | 0:6faafff1fb3b | 75 | |
POSIPI | 0:6faafff1fb3b | 76 | |
POSIPI | 0:6faafff1fb3b | 77 | if (compteur_echantillonnage >= nb_echantillon_max) |
POSIPI | 0:6faafff1fb3b | 78 | { |
POSIPI | 0:6faafff1fb3b | 79 | Ufinal = 707*sqrt(Veff/nb_echantillon_max)*0.97; // 707=2*sqrt(2)*250; 8 offset of 17/03/2016 |
POSIPI | 0:6faafff1fb3b | 80 | Ifinal = 14*sqrt(Ieff/nb_echantillon_max); // 14=2*sqrt(2)*5; |
POSIPI | 0:6faafff1fb3b | 81 | P = Ufinal * Ifinal; |
POSIPI | 0:6faafff1fb3b | 82 | flag=1; |
POSIPI | 0:6faafff1fb3b | 83 | } |
POSIPI | 0:6faafff1fb3b | 84 | } |
POSIPI | 0:6faafff1fb3b | 85 | |
POSIPI | 0:6faafff1fb3b | 86 | int main() |
POSIPI | 0:6faafff1fb3b | 87 | { |
POSIPI | 0:6faafff1fb3b | 88 | |
POSIPI | 0:6faafff1fb3b | 89 | echantillonnage.attach(&calcul, 0.0001); // 100µs |
POSIPI | 0:6faafff1fb3b | 90 | // lcd.printf("debut"); |
POSIPI | 0:6faafff1fb3b | 91 | while(1) |
POSIPI | 0:6faafff1fb3b | 92 | { |
POSIPI | 0:6faafff1fb3b | 93 | if (flag==1) |
POSIPI | 0:6faafff1fb3b | 94 | { |
POSIPI | 0:6faafff1fb3b | 95 | // Ufinal = 707*sqrt(Veff/nb_echantillon_max); // 707=2*sqrt(2)*250; |
POSIPI | 0:6faafff1fb3b | 96 | // Ifinal = 14*sqrt(Ieff/nb_echantillon_max); // 14=2*sqrt(2)*5; |
POSIPI | 0:6faafff1fb3b | 97 | wait(1); |
POSIPI | 0:6faafff1fb3b | 98 | lcd.cls(); |
POSIPI | 0:6faafff1fb3b | 99 | pc.printf("Ueff = %.2f V\r\n",Ufinal); |
POSIPI | 0:6faafff1fb3b | 100 | lcd.printf("Ueff = %.2f V\n",Ufinal); |
POSIPI | 0:6faafff1fb3b | 101 | pc.printf("Ieff = %.2f A\r\n",Ifinal); |
POSIPI | 0:6faafff1fb3b | 102 | lcd.printf("Ieff = %.2f A\n",Ifinal); |
POSIPI | 0:6faafff1fb3b | 103 | // pc.printf("Pn = %.2f\r\n",Pn); |
POSIPI | 0:6faafff1fb3b | 104 | // lcd.printf("Pn = %.2f\n",Pn); |
POSIPI | 0:6faafff1fb3b | 105 | compteur_echantillonnage = 0; |
POSIPI | 0:6faafff1fb3b | 106 | Veff=0; |
POSIPI | 0:6faafff1fb3b | 107 | Ieff=0; |
POSIPI | 0:6faafff1fb3b | 108 | flag=0; |
POSIPI | 0:6faafff1fb3b | 109 | Cpt++; |
POSIPI | 0:6faafff1fb3b | 110 | // pc.printf("Cpt = %.2f\r\n",Cpt); |
POSIPI | 0:6faafff1fb3b | 111 | if (Cpt == 1)//toutes les secondes |
POSIPI | 0:6faafff1fb3b | 112 | { |
POSIPI | 0:6faafff1fb3b | 113 | |
POSIPI | 0:6faafff1fb3b | 114 | char ligne[20]; |
POSIPI | 0:6faafff1fb3b | 115 | FILE* File2 = fopen("/local/datafile.txt","r"); |
POSIPI | 0:6faafff1fb3b | 116 | fputs(ligne,File2); |
POSIPI | 0:6faafff1fb3b | 117 | //on coupe de 11 à 18 |
POSIPI | 0:6faafff1fb3b | 118 | //on convertit string en float |
POSIPI | 0:6faafff1fb3b | 119 | // on marque les(s) équalisté nécessaire(s) |
POSIPI | 0:6faafff1fb3b | 120 | fclose(File2); |
POSIPI | 0:6faafff1fb3b | 121 | |
POSIPI | 0:6faafff1fb3b | 122 | energie = energie + P; |
POSIPI | 0:6faafff1fb3b | 123 | energie = energie; |
POSIPI | 0:6faafff1fb3b | 124 | // EEPROM.write(500, energie);//eeprom hard? |
POSIPI | 0:6faafff1fb3b | 125 | energie2 = energie2 + P; //energie en joule |
POSIPI | 0:6faafff1fb3b | 126 | energie2 = energie2 / 3600; //energie en wattheure |
POSIPI | 0:6faafff1fb3b | 127 | wait(1); |
POSIPI | 0:6faafff1fb3b | 128 | lcd.cls(); |
POSIPI | 0:6faafff1fb3b | 129 | pc.printf("P = %.2f W\r\n",P); |
POSIPI | 0:6faafff1fb3b | 130 | lcd.printf("P = %.2f W\n",P); |
POSIPI | 0:6faafff1fb3b | 131 | pc.printf("E = %.0f J\r\n",energie); |
POSIPI | 0:6faafff1fb3b | 132 | lcd.printf("E = %.0f J\n",energie); |
POSIPI | 0:6faafff1fb3b | 133 | Cpt = 0; |
POSIPI | 0:6faafff1fb3b | 134 | stock = energie; |
POSIPI | 0:6faafff1fb3b | 135 | stock = energie / 3600; |
POSIPI | 0:6faafff1fb3b | 136 | if (energie2 >= 1) |
POSIPI | 0:6faafff1fb3b | 137 | { |
POSIPI | 0:6faafff1fb3b | 138 | led1 = 1; |
POSIPI | 0:6faafff1fb3b | 139 | wait(0.5); |
POSIPI | 0:6faafff1fb3b | 140 | led1 = 0; |
POSIPI | 0:6faafff1fb3b | 141 | energie2 = energie2 - 3600; |
POSIPI | 0:6faafff1fb3b | 142 | } |
POSIPI | 0:6faafff1fb3b | 143 | FILE* File1 = fopen("/local/datafile.txt","w"); |
POSIPI | 0:6faafff1fb3b | 144 | fprintf(File1, "[energie] %.6f Wh", stock ); |
POSIPI | 0:6faafff1fb3b | 145 | fclose(File1); |
POSIPI | 0:6faafff1fb3b | 146 | } |
POSIPI | 0:6faafff1fb3b | 147 | |
POSIPI | 0:6faafff1fb3b | 148 | } |
POSIPI | 0:6faafff1fb3b | 149 | } |
POSIPI | 0:6faafff1fb3b | 150 | } |