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
- Committer:
- carlospomar
- Date:
- 2017-12-13
- Revision:
- 1:7c44bfcec04b
- Parent:
- 0:91c7502b70de
- Child:
- 2:9377dbae7237
File content as of revision 1:7c44bfcec04b:
#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",Irms);
pc.printf("Irms:\n3.3f I",Irms);
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;
}
}
}