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
00001 #include "mbed.h" 00002 #include "TextLCD.h" 00003 #include "eeprom.h" 00004 #include <ctype.h> 00005 #define tamvector 100 00006 #define dato_v 6.2357e+03 00007 #define dato_i 9.7128 //((3,3*2000/(2^16*Rburn))^2)*(1/100) 00008 #define dato_p 202.6327 00009 #define dato_e 0.02/3600000.0 //diferencia de tiempo entre muestras en segundos 00010 #define dato_pr 0,12143 // precio €/kWh 00011 uint16_t VirtAddVarTab[NB_OF_VAR] = {0x5555, 0x6666, 0x7777}; 00012 00013 00014 Serial bluetooth (D10,D2); 00015 Serial pc(SERIAL_TX,SERIAL_RX); 00016 TextLCD lcd(D8,D9,D3,D4,D5,D6,TextLCD::LCD16x2); //rs,e,d4-d7 00017 InterruptIn pulsador(PC_13); 00018 float muestrasA[tamvector]; 00019 float muestrasB[tamvector]; 00020 float muestrasC[tamvector]; 00021 float muestrasD[tamvector]; 00022 00023 AnalogIn tension (A0); 00024 AnalogIn tensioncontinua (A1); 00025 AnalogIn intensidad (A4); 00026 AnalogIn intensidadcontinua (A5); 00027 float Vcont; 00028 float Icont; 00029 int contador=0; 00030 int contadorIntensidad=0; 00031 int bufferlleno; 00032 int nbuffer; 00033 Ticker timerMuestro; 00034 Ticker timerVisualizacion; 00035 int i; 00036 float Vrms; 00037 float Irms; 00038 float PotenciaActiva; 00039 float PotenciaReactiva; 00040 float PotenciaAparente; 00041 float FactorPotencia; 00042 float EnergiaActiva; 00043 float EnergiaReactiva=0; 00044 int mostrardato=0; 00045 float precio; 00046 00047 void temporizador () 00048 { 00049 if(nbuffer) { 00050 muestrasA[contador]=(tension.read()-Vcont); 00051 muestrasC[contador]=(intensidad.read()-Icont); 00052 } else { 00053 muestrasB[contador]=(tension.read()-Vcont); 00054 muestrasD[contador]=(intensidad.read()-Icont); 00055 } 00056 contador++; 00057 if(contador==tamvector) { 00058 contador=0; 00059 nbuffer=!nbuffer; 00060 bufferlleno=1; 00061 } 00062 } 00063 00064 void boton() 00065 { 00066 mostrardato++; 00067 if (mostrardato>8) 00068 mostrardato=0; 00069 } 00070 00071 void Write_Float_Eeprom(uint16_t address, float data) // parte de la memoria eeprom 00072 { 00073 uint16_t *punteroDato; 00074 punteroDato=(uint16_t *)(&data); 00075 EE_WriteVariable(address , *punteroDato); 00076 punteroDato++; 00077 EE_WriteVariable(address +2 , *punteroDato); 00078 00079 } 00080 00081 float Read_Float_Eeprom(uint16_t address) // parte de la memoria eeprom 00082 { 00083 00084 float data; 00085 uint16_t *punteroDato; 00086 punteroDato=(uint16_t *)(&data); 00087 EE_ReadVariable(address,punteroDato); 00088 punteroDato++; 00089 EE_ReadVariable(address+2,punteroDato); 00090 return data; 00091 } 00092 00093 void mostrar () 00094 { 00095 lcd.cls(); 00096 switch(mostrardato) { 00097 case 0: 00098 lcd.printf("Vrms:\n %f V",Vrms); 00099 pc.printf("Vrms:\n %f V",Vrms); 00100 break; 00101 case 1: 00102 lcd.printf("Irms:\n %f A",Irms); 00103 pc.printf("Irms:\n %f A",Irms); 00104 break; 00105 case 2: 00106 lcd.printf("F.pot:\n %f ",FactorPotencia); 00107 pc.printf("F.pot:\n %f ",FactorPotencia); 00108 break; 00109 case 3: 00110 00111 lcd.printf("P.Act:\n %f W",PotenciaActiva); 00112 pc.printf("P.Act:\n %f W",PotenciaActiva); 00113 break; 00114 case 4: 00115 lcd.printf("P.React:\n %f VAr",PotenciaReactiva); 00116 pc.printf("P.React:\n %f VAr",PotenciaReactiva); 00117 break; 00118 case 5: 00119 lcd.printf("P.Apa:\n %f VA",PotenciaAparente); 00120 pc.printf("P.Apa:\n %f VA",PotenciaAparente); 00121 break; 00122 case 6: 00123 lcd.printf("E.Act:\n %f kWh",EnergiaActiva); 00124 pc.printf("E.Act:\n %f kWh",EnergiaActiva); 00125 break; 00126 case 7: 00127 lcd.printf("E.React:\n %f kWh",EnergiaReactiva); 00128 pc.printf("E.React:\n %f kWh",EnergiaReactiva); 00129 break; 00130 case 8: 00131 lcd.printf("Precio:\n %f ",precio); 00132 pc.printf("Precio:\n %f ",precio); 00133 break; 00134 } 00135 bluetooth.printf("%f | %f | %f | %f | %f \n",Vrms,Irms,PotenciaActiva,PotenciaReactiva,PotenciaAparente); 00136 Write_Float_Eeprom(0x5555, EnergiaActiva); // parte de la memoria eeprom 00137 Write_Float_Eeprom(0x6666, EnergiaReactiva); // parte de la memoria eeprom 00138 } 00139 00140 int main () 00141 { 00142 float suma; 00143 float sumapotenciaactiva=0; 00144 float sumaIntensidad; 00145 float dato; 00146 float datoIntensidad; 00147 00148 00149 HAL_FLASH_Unlock(); // parte de la memoria eeprom 00150 00151 EE_Init(); // parte de la memoria eeprom 00152 00153 timerMuestro.attach_us(&temporizador,200); 00154 timerVisualizacion.attach(&mostrar,1); 00155 pulsador.rise(&boton); 00156 Vcont=0; 00157 Icont=0; 00158 for (i=0; i<8; i++) { 00159 Vcont=Vcont+tensioncontinua.read(); 00160 Icont=Icont+intensidadcontinua.read(); 00161 } 00162 Vcont=Vcont/8.0; 00163 Icont=Icont/8.0; 00164 00165 EnergiaActiva=Read_Float_Eeprom(0x5555); // parte de la memoria eeprom 00166 EnergiaReactiva=Read_Float_Eeprom(0x6666); // parte de la memoria eeprom 00167 00168 while (1) { 00169 if (bufferlleno) { 00170 bufferlleno=0; 00171 suma=0; 00172 sumaIntensidad=0; 00173 sumapotenciaactiva=0; 00174 for (i=0; i<100; i++) { 00175 if(nbuffer==1) { 00176 dato=muestrasA[i]; 00177 datoIntensidad=muestrasC[i]; 00178 } else { 00179 dato=muestrasB[i]; 00180 datoIntensidad=muestrasD[i]; 00181 } 00182 suma=suma+dato*dato; 00183 sumaIntensidad=sumaIntensidad+datoIntensidad*datoIntensidad; 00184 sumapotenciaactiva=sumapotenciaactiva+dato*datoIntensidad; 00185 } 00186 Vrms=(sqrt(suma*dato_v)); 00187 Irms=(sqrt(sumaIntensidad*dato_i)); 00188 PotenciaActiva=dato_p*sumapotenciaactiva; 00189 PotenciaAparente=Vrms*Irms; 00190 PotenciaReactiva=(sqrt((PotenciaAparente*PotenciaAparente)-(PotenciaActiva*PotenciaActiva))); 00191 EnergiaActiva=EnergiaActiva+PotenciaActiva*dato_e; 00192 EnergiaReactiva=EnergiaReactiva+PotenciaReactiva*dato_e; 00193 FactorPotencia=PotenciaActiva/PotenciaAparente; 00194 precio=EnergiaActiva*dato_pr; 00195 } 00196 } 00197 }
Generated on Wed Jul 13 2022 20:01:41 by
1.7.2