¡Qué majo es Ander Ibabe!
Embed:
(wiki syntax)
Show/hide line numbers
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