TR

Dependencies:   TextLCD mbed angleandposition

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?

UserRevisionLine numberNew 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 }