¡Qué majo es Ander Ibabe!

Dependencies:   TextLCD mbed

Committer:
carlospomar
Date:
Fri Jan 19 08:41:01 2018 +0000
Revision:
8:ddee54b61dc5
Parent:
7:627396bf6990
asdf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
carlospomar 0:91c7502b70de 1 #include "mbed.h"
carlospomar 0:91c7502b70de 2 #include "TextLCD.h"
carlospomar 5:f364983627e5 3 #include "eeprom.h"
carlospomar 5:f364983627e5 4 #include <ctype.h>
carlospomar 4:515ede6e2e14 5 #define tamvector 100
carlospomar 4:515ede6e2e14 6 #define dato_v 6.2357e+03
carlospomar 4:515ede6e2e14 7 #define dato_i 9.7128 //((3,3*2000/(2^16*Rburn))^2)*(1/100)
carlospomar 4:515ede6e2e14 8 #define dato_p 202.6327
carlospomar 5:f364983627e5 9 #define dato_e 0.02/3600000.0 //diferencia de tiempo entre muestras en segundos
carlospomar 7:627396bf6990 10 #define dato_pr 0,12143 // precio €/kWh
carlospomar 5:f364983627e5 11 uint16_t VirtAddVarTab[NB_OF_VAR] = {0x5555, 0x6666, 0x7777};
carlospomar 5:f364983627e5 12
carlospomar 0:91c7502b70de 13
carlospomar 0:91c7502b70de 14 Serial bluetooth (D10,D2);
carlospomar 0:91c7502b70de 15 Serial pc(SERIAL_TX,SERIAL_RX);
carlospomar 3:250e95e6485b 16 TextLCD lcd(D8,D9,D3,D4,D5,D6,TextLCD::LCD16x2); //rs,e,d4-d7
carlospomar 0:91c7502b70de 17 InterruptIn pulsador(PC_13);
carlospomar 5:f364983627e5 18 float muestrasA[tamvector];
carlospomar 5:f364983627e5 19 float muestrasB[tamvector];
carlospomar 5:f364983627e5 20 float muestrasC[tamvector];
carlospomar 5:f364983627e5 21 float muestrasD[tamvector];
carlospomar 0:91c7502b70de 22
carlospomar 0:91c7502b70de 23 AnalogIn tension (A0);
carlospomar 0:91c7502b70de 24 AnalogIn tensioncontinua (A1);
carlospomar 2:9377dbae7237 25 AnalogIn intensidad (A4);
carlospomar 0:91c7502b70de 26 AnalogIn intensidadcontinua (A5);
carlospomar 0:91c7502b70de 27 float Vcont;
carlospomar 0:91c7502b70de 28 float Icont;
carlospomar 0:91c7502b70de 29 int contador=0;
carlospomar 0:91c7502b70de 30 int contadorIntensidad=0;
carlospomar 0:91c7502b70de 31 int bufferlleno;
carlospomar 0:91c7502b70de 32 int nbuffer;
carlospomar 0:91c7502b70de 33 Ticker timerMuestro;
carlospomar 0:91c7502b70de 34 Ticker timerVisualizacion;
carlospomar 0:91c7502b70de 35 int i;
carlospomar 0:91c7502b70de 36 float Vrms;
carlospomar 0:91c7502b70de 37 float Irms;
carlospomar 0:91c7502b70de 38 float PotenciaActiva;
carlospomar 0:91c7502b70de 39 float PotenciaReactiva;
carlospomar 0:91c7502b70de 40 float PotenciaAparente;
carlospomar 0:91c7502b70de 41 float FactorPotencia;
carlospomar 0:91c7502b70de 42 float EnergiaActiva;
carlospomar 0:91c7502b70de 43 float EnergiaReactiva=0;
carlospomar 0:91c7502b70de 44 int mostrardato=0;
carlospomar 0:91c7502b70de 45 float precio;
carlospomar 0:91c7502b70de 46
carlospomar 0:91c7502b70de 47 void temporizador ()
carlospomar 0:91c7502b70de 48 {
carlospomar 0:91c7502b70de 49 if(nbuffer) {
carlospomar 4:515ede6e2e14 50 muestrasA[contador]=(tension.read()-Vcont);
carlospomar 4:515ede6e2e14 51 muestrasC[contador]=(intensidad.read()-Icont);
carlospomar 0:91c7502b70de 52 } else {
carlospomar 4:515ede6e2e14 53 muestrasB[contador]=(tension.read()-Vcont);
carlospomar 4:515ede6e2e14 54 muestrasD[contador]=(intensidad.read()-Icont);
carlospomar 0:91c7502b70de 55 }
carlospomar 0:91c7502b70de 56 contador++;
carlospomar 5:f364983627e5 57 if(contador==tamvector) {
carlospomar 0:91c7502b70de 58 contador=0;
carlospomar 0:91c7502b70de 59 nbuffer=!nbuffer;
carlospomar 0:91c7502b70de 60 bufferlleno=1;
carlospomar 0:91c7502b70de 61 }
carlospomar 0:91c7502b70de 62 }
carlospomar 0:91c7502b70de 63
carlospomar 0:91c7502b70de 64 void boton()
carlospomar 0:91c7502b70de 65 {
carlospomar 0:91c7502b70de 66 mostrardato++;
carlospomar 5:f364983627e5 67 if (mostrardato>8)
carlospomar 0:91c7502b70de 68 mostrardato=0;
carlospomar 0:91c7502b70de 69 }
carlospomar 0:91c7502b70de 70
carlospomar 5:f364983627e5 71 void Write_Float_Eeprom(uint16_t address, float data) // parte de la memoria eeprom
carlospomar 5:f364983627e5 72 {
carlospomar 5:f364983627e5 73 uint16_t *punteroDato;
carlospomar 5:f364983627e5 74 punteroDato=(uint16_t *)(&data);
carlospomar 5:f364983627e5 75 EE_WriteVariable(address , *punteroDato);
carlospomar 5:f364983627e5 76 punteroDato++;
carlospomar 5:f364983627e5 77 EE_WriteVariable(address +2 , *punteroDato);
carlospomar 5:f364983627e5 78
carlospomar 5:f364983627e5 79 }
carlospomar 5:f364983627e5 80
carlospomar 5:f364983627e5 81 float Read_Float_Eeprom(uint16_t address) // parte de la memoria eeprom
carlospomar 5:f364983627e5 82 {
carlospomar 5:f364983627e5 83
carlospomar 5:f364983627e5 84 float data;
carlospomar 5:f364983627e5 85 uint16_t *punteroDato;
carlospomar 5:f364983627e5 86 punteroDato=(uint16_t *)(&data);
carlospomar 5:f364983627e5 87 EE_ReadVariable(address,punteroDato);
carlospomar 5:f364983627e5 88 punteroDato++;
carlospomar 5:f364983627e5 89 EE_ReadVariable(address+2,punteroDato);
carlospomar 5:f364983627e5 90 return data;
carlospomar 5:f364983627e5 91 }
carlospomar 5:f364983627e5 92
carlospomar 0:91c7502b70de 93 void mostrar ()
carlospomar 0:91c7502b70de 94 {
carlospomar 0:91c7502b70de 95 lcd.cls();
carlospomar 0:91c7502b70de 96 switch(mostrardato) {
carlospomar 0:91c7502b70de 97 case 0:
carlospomar 4:515ede6e2e14 98 lcd.printf("Vrms:\n %f V",Vrms);
carlospomar 4:515ede6e2e14 99 pc.printf("Vrms:\n %f V",Vrms);
carlospomar 0:91c7502b70de 100 break;
carlospomar 0:91c7502b70de 101 case 1:
carlospomar 4:515ede6e2e14 102 lcd.printf("Irms:\n %f A",Irms);
carlospomar 4:515ede6e2e14 103 pc.printf("Irms:\n %f A",Irms);
carlospomar 0:91c7502b70de 104 break;
carlospomar 0:91c7502b70de 105 case 2:
carlospomar 4:515ede6e2e14 106 lcd.printf("F.pot:\n %f ",FactorPotencia);
carlospomar 4:515ede6e2e14 107 pc.printf("F.pot:\n %f ",FactorPotencia);
carlospomar 0:91c7502b70de 108 break;
carlospomar 0:91c7502b70de 109 case 3:
carlospomar 4:515ede6e2e14 110
carlospomar 4:515ede6e2e14 111 lcd.printf("P.Act:\n %f W",PotenciaActiva);
carlospomar 4:515ede6e2e14 112 pc.printf("P.Act:\n %f W",PotenciaActiva);
carlospomar 0:91c7502b70de 113 break;
carlospomar 0:91c7502b70de 114 case 4:
carlospomar 4:515ede6e2e14 115 lcd.printf("P.React:\n %f VAr",PotenciaReactiva);
carlospomar 4:515ede6e2e14 116 pc.printf("P.React:\n %f VAr",PotenciaReactiva);
carlospomar 0:91c7502b70de 117 break;
carlospomar 0:91c7502b70de 118 case 5:
carlospomar 4:515ede6e2e14 119 lcd.printf("P.Apa:\n %f VA",PotenciaAparente);
carlospomar 4:515ede6e2e14 120 pc.printf("P.Apa:\n %f VA",PotenciaAparente);
carlospomar 0:91c7502b70de 121 break;
carlospomar 0:91c7502b70de 122 case 6:
carlospomar 5:f364983627e5 123 lcd.printf("E.Act:\n %f kWh",EnergiaActiva);
carlospomar 5:f364983627e5 124 pc.printf("E.Act:\n %f kWh",EnergiaActiva);
carlospomar 0:91c7502b70de 125 break;
carlospomar 0:91c7502b70de 126 case 7:
carlospomar 5:f364983627e5 127 lcd.printf("E.React:\n %f kWh",EnergiaReactiva);
carlospomar 5:f364983627e5 128 pc.printf("E.React:\n %f kWh",EnergiaReactiva);
carlospomar 4:515ede6e2e14 129 break;
carlospomar 4:515ede6e2e14 130 case 8:
carlospomar 8:ddee54b61dc5 131 lcd.printf("Precio:\n %f ",precio);
carlospomar 8:ddee54b61dc5 132 pc.printf("Precio:\n %f ",precio);
carlospomar 0:91c7502b70de 133 break;
carlospomar 0:91c7502b70de 134 }
carlospomar 6:93c85e86afad 135 bluetooth.printf("%f | %f | %f | %f | %f \n",Vrms,Irms,PotenciaActiva,PotenciaReactiva,PotenciaAparente);
carlospomar 5:f364983627e5 136 Write_Float_Eeprom(0x5555, EnergiaActiva); // parte de la memoria eeprom
carlospomar 5:f364983627e5 137 Write_Float_Eeprom(0x6666, EnergiaReactiva); // parte de la memoria eeprom
carlospomar 0:91c7502b70de 138 }
carlospomar 0:91c7502b70de 139
carlospomar 0:91c7502b70de 140 int main ()
carlospomar 0:91c7502b70de 141 {
carlospomar 0:91c7502b70de 142 float suma;
carlospomar 0:91c7502b70de 143 float sumapotenciaactiva=0;
carlospomar 0:91c7502b70de 144 float sumaIntensidad;
carlospomar 0:91c7502b70de 145 float dato;
carlospomar 0:91c7502b70de 146 float datoIntensidad;
carlospomar 0:91c7502b70de 147
carlospomar 5:f364983627e5 148
carlospomar 5:f364983627e5 149 HAL_FLASH_Unlock(); // parte de la memoria eeprom
carlospomar 5:f364983627e5 150
carlospomar 5:f364983627e5 151 EE_Init(); // parte de la memoria eeprom
carlospomar 5:f364983627e5 152
carlospomar 0:91c7502b70de 153 timerMuestro.attach_us(&temporizador,200);
carlospomar 0:91c7502b70de 154 timerVisualizacion.attach(&mostrar,1);
carlospomar 0:91c7502b70de 155 pulsador.rise(&boton);
carlospomar 0:91c7502b70de 156 Vcont=0;
carlospomar 0:91c7502b70de 157 Icont=0;
carlospomar 0:91c7502b70de 158 for (i=0; i<8; i++) {
carlospomar 0:91c7502b70de 159 Vcont=Vcont+tensioncontinua.read();
carlospomar 0:91c7502b70de 160 Icont=Icont+intensidadcontinua.read();
carlospomar 0:91c7502b70de 161 }
carlospomar 2:9377dbae7237 162 Vcont=Vcont/8.0;
carlospomar 5:f364983627e5 163 Icont=Icont/8.0;
carlospomar 5:f364983627e5 164
carlospomar 5:f364983627e5 165 EnergiaActiva=Read_Float_Eeprom(0x5555); // parte de la memoria eeprom
carlospomar 5:f364983627e5 166 EnergiaReactiva=Read_Float_Eeprom(0x6666); // parte de la memoria eeprom
carlospomar 0:91c7502b70de 167
carlospomar 0:91c7502b70de 168 while (1) {
carlospomar 0:91c7502b70de 169 if (bufferlleno) {
carlospomar 0:91c7502b70de 170 bufferlleno=0;
carlospomar 0:91c7502b70de 171 suma=0;
carlospomar 0:91c7502b70de 172 sumaIntensidad=0;
carlospomar 0:91c7502b70de 173 sumapotenciaactiva=0;
carlospomar 0:91c7502b70de 174 for (i=0; i<100; i++) {
carlospomar 0:91c7502b70de 175 if(nbuffer==1) {
carlospomar 0:91c7502b70de 176 dato=muestrasA[i];
carlospomar 0:91c7502b70de 177 datoIntensidad=muestrasC[i];
carlospomar 0:91c7502b70de 178 } else {
carlospomar 0:91c7502b70de 179 dato=muestrasB[i];
carlospomar 0:91c7502b70de 180 datoIntensidad=muestrasD[i];
carlospomar 0:91c7502b70de 181 }
carlospomar 0:91c7502b70de 182 suma=suma+dato*dato;
carlospomar 0:91c7502b70de 183 sumaIntensidad=sumaIntensidad+datoIntensidad*datoIntensidad;
carlospomar 0:91c7502b70de 184 sumapotenciaactiva=sumapotenciaactiva+dato*datoIntensidad;
carlospomar 0:91c7502b70de 185 }
carlospomar 4:515ede6e2e14 186 Vrms=(sqrt(suma*dato_v));
carlospomar 4:515ede6e2e14 187 Irms=(sqrt(sumaIntensidad*dato_i));
carlospomar 4:515ede6e2e14 188 PotenciaActiva=dato_p*sumapotenciaactiva;
carlospomar 0:91c7502b70de 189 PotenciaAparente=Vrms*Irms;
carlospomar 4:515ede6e2e14 190 PotenciaReactiva=(sqrt((PotenciaAparente*PotenciaAparente)-(PotenciaActiva*PotenciaActiva)));
carlospomar 4:515ede6e2e14 191 EnergiaActiva=EnergiaActiva+PotenciaActiva*dato_e;
carlospomar 4:515ede6e2e14 192 EnergiaReactiva=EnergiaReactiva+PotenciaReactiva*dato_e;
carlospomar 4:515ede6e2e14 193 FactorPotencia=PotenciaActiva/PotenciaAparente;
carlospomar 7:627396bf6990 194 precio=EnergiaActiva*dato_pr;
carlospomar 0:91c7502b70de 195 }
carlospomar 0:91c7502b70de 196 }
carlospomar 4:515ede6e2e14 197 }