¡Qué majo es Ander Ibabe!

Dependencies:   TextLCD mbed

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