MII1SistElec
/
Proyecto
¡Qué majo es Ander Ibabe!
main.cpp@8:ddee54b61dc5, 2018-01-19 (annotated)
- Committer:
- carlospomar
- Date:
- Fri Jan 19 08:41:01 2018 +0000
- Revision:
- 8:ddee54b61dc5
- Parent:
- 7:627396bf6990
asdf
Who changed what in which revision?
User | Revision | Line number | New 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 | } |