¡Que majo es Ander Ibabe!
Dependencies: mbed
main.cpp
- Committer:
- carlospomar
- Date:
- 2017-11-16
- Revision:
- 0:6ce5f0c2625c
- Child:
- 1:5ed5c373907b
File content as of revision 0:6ce5f0c2625c:
#include "mbed.h" #include "math.h" #include "TextLCD.h" Serial bluetooth (D10,D2); Serial pc(SERIAL_TX,SERIAL_RX); TextLCD lcd(D8,D9,D6,D3,D4,D5,TextLCD::LCD16x2); //rs,e,d4-d7 InterruptIn pulsador(PC_13); float muestrasA[100]; float muestrasB[100]; float muestrasC[100]; float muestrasD[100]; AnalogIn tension (A0); AnalogIn tensioncontinua (A1); AnalogIn intensisdad (A4); AnalogIn intensidadcontinua (A5); float Vcont; float Icont; int contador=0; int contadorIntensidad=0; int bufferlleno; int nbuffer; Ticker timerMuestro; Ticker timerVisualizacion; int i; float Vrms; float Irms; float PotenciaActiva; float PotenciaReactiva; float PotenciaAparente; float FactorPotencia; float EnergiaActiva; float EnergiaReactiva=0; int mostrardato=0; float precio; void temporizador () { if(nbuffer) { muestrasA[contador]=(tension.read()-Vcont)*219.626*3.3f; muestrasC[contador]=(intensidad.read()-Icont)*9.525*3.3f; } else { muestrasB[contador]=(tension.read()-Vcont)*219.626f*3.3f; muestrasD[contador]=(intensidad.read()-Icont)*9.725*3.3f; } contador++; if(contador==100) { contador=0; nbuffer=!nbuffer; bufferlleno=1; } } void boton() { mostrardato++; if (mostrardato>8) mostrardato=0; } void mostrar () { lcd.cls(); switch(mostrardato) { case 0: lcd.printf("Vrms:\n3.3f V",Vrms); pc.printf("Vrms:\n3.3f V",Vrms); break; case 1: lcd.printf("Irms:\n3.3f I",Vrms); pc.printf("Irms:\n3.3f I",Vrms); break; case 2: lcd.printf("F.pot:\n3.3f ",FactorPotencia); pc.printf("F.pot:\n3.3f ",FactorPotencia); break; case 3: lcd.printf("P.Apa:\n3.3f VA",PotenciaAparente); pc.printf("P.Apa:\n3.3f VA",PotenciaAparente); break; case 4: lcd.printf("P.React:\n3.3f VAr",PotenciaReactiva); pc.printf("P.React:\n3.3f VAr",PotenciaReactiva); break; case 5: lcd.printf("P.Act:\n3.3f W",PotenciaActiva); pc.printf("P.Act:\n3.3f W",PotenciaActiva); break; case 6: lcd.printf("E.Act:\n3.3f kWh",EnergiaActiva); pc.printf("E.Act:\n3.3f kWh",EnergiaActiva); break; case 7: lcd.printf("E.React:\n3.3f kWh",EnergiaReactiva); pc.printf("E.React:\n3.3f kWh",EnergiaReactiva); break; } bluetooth.printf("%3.3f| %3.3f| %3.3f| %3.3f\n",Vrms,Irms,PotenciaActiva,precio); } int main () { float suma; float sumapotenciaactiva=0; float sumaIntensidad; float dato; float datoIntensidad; timerMuestro.attach_us(&temporizador,200); timerVisualizacion.attach(&mostrar,1); pulsador.rise(&boton); Vcont=0; Icont=0; for (i=0; i<8; i++) { Vcont=Vcont+tensioncontinua.read(); Icont=Icont+intensidadcontinua.read(); } Vcont=Vcont/8.0f; Icont=Icont/8.0f; while (1) { if (bufferlleno) { bufferlleno=0; suma=0; sumaIntensidad=0; sumapotenciaactiva=0; for (i=0; i<100; i++) { if(nbuffer==1) { dato=muestrasA[i]; datoIntensidad=muestrasC[i]; } else { dato=muestrasB[i]; datoIntensidad=muestrasD[i]; } suma=suma+dato*dato; sumaIntensidad=sumaIntensidad+datoIntensidad*datoIntensidad; sumapotenciaactiva=sumapotenciaactiva+dato*datoIntensidad; } Vrms=(sqrt(suma/100.0f)*1.01449275362f); Irms=(sqrt(sumaIntensidad/100.0f)*0.9869); PotenciaActiva=(sumapotenciaactiva/100.0f)/10.00139f; EnergiaActiva=EnergiaActiva+(PotenciaActiva/180000000.0f); PotenciaAparente=Vrms*Irms; PotenciaReactiva=(sqrt((PotenciaActiva-PotenciaAparente)-(PotenciaActiva*PotenciaActiva))); EnergiaActiva=EnergiaReactiva+(PotenciaReactiva/180000000.0f); FactorPotencia=(PotenciaActiva/PotenciaAparente); precio=EnergiActiva*0.121f; } } }