¡Qué majo es Ander Ibabe!

Dependencies:   TextLCD mbed

Committer:
carlospomar
Date:
Fri Jan 12 15:31:01 2018 +0000
Revision:
4:515ede6e2e14
Parent:
3:250e95e6485b
Child:
5:f364983627e5
asdf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
carlospomar 0:91c7502b70de 1 #include "mbed.h"
carlospomar 0:91c7502b70de 2 #include "TextLCD.h"
carlospomar 4:515ede6e2e14 3 #define periodo 0.0002 //1/5000
carlospomar 4:515ede6e2e14 4 #define tamvector 100
carlospomar 4:515ede6e2e14 5 #define dato_v 6.2357e+03
carlospomar 4:515ede6e2e14 6 #define dato_i 9.7128 //((3,3*2000/(2^16*Rburn))^2)*(1/100)
carlospomar 4:515ede6e2e14 7 #define dato_p 202.6327
carlospomar 4:515ede6e2e14 8 #define dato_e 20e-3/3600
carlospomar 0:91c7502b70de 9
carlospomar 0:91c7502b70de 10 Serial bluetooth (D10,D2);
carlospomar 0:91c7502b70de 11 Serial pc(SERIAL_TX,SERIAL_RX);
carlospomar 3:250e95e6485b 12 TextLCD lcd(D8,D9,D3,D4,D5,D6,TextLCD::LCD16x2); //rs,e,d4-d7
carlospomar 0:91c7502b70de 13 InterruptIn pulsador(PC_13);
carlospomar 0:91c7502b70de 14 float muestrasA[100];
carlospomar 0:91c7502b70de 15 float muestrasB[100];
carlospomar 0:91c7502b70de 16 float muestrasC[100];
carlospomar 0:91c7502b70de 17 float muestrasD[100];
carlospomar 0:91c7502b70de 18
carlospomar 0:91c7502b70de 19 AnalogIn tension (A0);
carlospomar 0:91c7502b70de 20 AnalogIn tensioncontinua (A1);
carlospomar 2:9377dbae7237 21 AnalogIn intensidad (A4);
carlospomar 0:91c7502b70de 22 AnalogIn intensidadcontinua (A5);
carlospomar 0:91c7502b70de 23 float Vcont;
carlospomar 0:91c7502b70de 24 float Icont;
carlospomar 0:91c7502b70de 25 int contador=0;
carlospomar 0:91c7502b70de 26 int contadorIntensidad=0;
carlospomar 0:91c7502b70de 27 int bufferlleno;
carlospomar 0:91c7502b70de 28 int nbuffer;
carlospomar 0:91c7502b70de 29 Ticker timerMuestro;
carlospomar 0:91c7502b70de 30 Ticker timerVisualizacion;
carlospomar 0:91c7502b70de 31 int i;
carlospomar 0:91c7502b70de 32 float Vrms;
carlospomar 0:91c7502b70de 33 float Irms;
carlospomar 0:91c7502b70de 34 float PotenciaActiva;
carlospomar 0:91c7502b70de 35 float PotenciaReactiva;
carlospomar 0:91c7502b70de 36 float PotenciaAparente;
carlospomar 0:91c7502b70de 37 float FactorPotencia;
carlospomar 0:91c7502b70de 38 float EnergiaActiva;
carlospomar 0:91c7502b70de 39 float EnergiaReactiva=0;
carlospomar 0:91c7502b70de 40 int mostrardato=0;
carlospomar 0:91c7502b70de 41 float precio;
carlospomar 0:91c7502b70de 42
carlospomar 0:91c7502b70de 43 void temporizador ()
carlospomar 0:91c7502b70de 44 {
carlospomar 0:91c7502b70de 45 if(nbuffer) {
carlospomar 4:515ede6e2e14 46 muestrasA[contador]=(tension.read()-Vcont);
carlospomar 4:515ede6e2e14 47 muestrasC[contador]=(intensidad.read()-Icont);
carlospomar 0:91c7502b70de 48 } else {
carlospomar 4:515ede6e2e14 49 muestrasB[contador]=(tension.read()-Vcont);
carlospomar 4:515ede6e2e14 50 muestrasD[contador]=(intensidad.read()-Icont);
carlospomar 0:91c7502b70de 51 }
carlospomar 0:91c7502b70de 52 contador++;
carlospomar 0:91c7502b70de 53 if(contador==100) {
carlospomar 0:91c7502b70de 54 contador=0;
carlospomar 0:91c7502b70de 55 nbuffer=!nbuffer;
carlospomar 0:91c7502b70de 56 bufferlleno=1;
carlospomar 0:91c7502b70de 57 }
carlospomar 0:91c7502b70de 58 }
carlospomar 0:91c7502b70de 59
carlospomar 0:91c7502b70de 60 void boton()
carlospomar 0:91c7502b70de 61 {
carlospomar 0:91c7502b70de 62 mostrardato++;
carlospomar 4:515ede6e2e14 63 if (mostrardato>7)
carlospomar 0:91c7502b70de 64 mostrardato=0;
carlospomar 0:91c7502b70de 65 }
carlospomar 0:91c7502b70de 66
carlospomar 0:91c7502b70de 67 void mostrar ()
carlospomar 0:91c7502b70de 68 {
carlospomar 0:91c7502b70de 69 lcd.cls();
carlospomar 0:91c7502b70de 70 switch(mostrardato) {
carlospomar 0:91c7502b70de 71 case 0:
carlospomar 4:515ede6e2e14 72 lcd.printf("Vrms:\n %f V",Vrms);
carlospomar 4:515ede6e2e14 73 pc.printf("Vrms:\n %f V",Vrms);
carlospomar 0:91c7502b70de 74 break;
carlospomar 0:91c7502b70de 75 case 1:
carlospomar 4:515ede6e2e14 76 lcd.printf("Irms:\n %f A",Irms);
carlospomar 4:515ede6e2e14 77 pc.printf("Irms:\n %f A",Irms);
carlospomar 0:91c7502b70de 78 break;
carlospomar 0:91c7502b70de 79 case 2:
carlospomar 4:515ede6e2e14 80 lcd.printf("F.pot:\n %f ",FactorPotencia);
carlospomar 4:515ede6e2e14 81 pc.printf("F.pot:\n %f ",FactorPotencia);
carlospomar 0:91c7502b70de 82 break;
carlospomar 0:91c7502b70de 83 case 3:
carlospomar 4:515ede6e2e14 84
carlospomar 4:515ede6e2e14 85 lcd.printf("P.Act:\n %f W",PotenciaActiva);
carlospomar 4:515ede6e2e14 86 pc.printf("P.Act:\n %f W",PotenciaActiva);
carlospomar 0:91c7502b70de 87 break;
carlospomar 0:91c7502b70de 88 case 4:
carlospomar 4:515ede6e2e14 89 lcd.printf("P.React:\n %f VAr",PotenciaReactiva);
carlospomar 4:515ede6e2e14 90 pc.printf("P.React:\n %f VAr",PotenciaReactiva);
carlospomar 0:91c7502b70de 91 break;
carlospomar 0:91c7502b70de 92 case 5:
carlospomar 4:515ede6e2e14 93 lcd.printf("P.Apa:\n %f VA",PotenciaAparente);
carlospomar 4:515ede6e2e14 94 pc.printf("P.Apa:\n %f VA",PotenciaAparente);
carlospomar 0:91c7502b70de 95 break;
carlospomar 0:91c7502b70de 96 case 6:
carlospomar 4:515ede6e2e14 97 lcd.printf("E.Act:\n %f Wh",EnergiaActiva);
carlospomar 4:515ede6e2e14 98 pc.printf("E.Act:\n %f Wh",EnergiaActiva);
carlospomar 0:91c7502b70de 99 break;
carlospomar 0:91c7502b70de 100 case 7:
carlospomar 4:515ede6e2e14 101 lcd.printf("E.React:\n %f Wh",EnergiaReactiva);
carlospomar 4:515ede6e2e14 102 pc.printf("E.React:\n %f Wh",EnergiaReactiva);
carlospomar 4:515ede6e2e14 103 break;
carlospomar 4:515ede6e2e14 104 case 8:
carlospomar 4:515ede6e2e14 105 lcd.printf("Precio:\n %f €",precio);
carlospomar 4:515ede6e2e14 106 pc.printf("Precio:\n %f €",precio);
carlospomar 0:91c7502b70de 107 break;
carlospomar 0:91c7502b70de 108 }
carlospomar 4:515ede6e2e14 109 bluetooth.printf("%Vrms| %Irms | %PotenciaActiva| %precio\n",Vrms,Irms,PotenciaActiva,precio);
carlospomar 0:91c7502b70de 110 }
carlospomar 0:91c7502b70de 111
carlospomar 0:91c7502b70de 112 int main ()
carlospomar 0:91c7502b70de 113 {
carlospomar 0:91c7502b70de 114 float suma;
carlospomar 0:91c7502b70de 115 float sumapotenciaactiva=0;
carlospomar 0:91c7502b70de 116 float sumaIntensidad;
carlospomar 0:91c7502b70de 117 float dato;
carlospomar 0:91c7502b70de 118 float datoIntensidad;
carlospomar 0:91c7502b70de 119
carlospomar 0:91c7502b70de 120 timerMuestro.attach_us(&temporizador,200);
carlospomar 0:91c7502b70de 121 timerVisualizacion.attach(&mostrar,1);
carlospomar 0:91c7502b70de 122 pulsador.rise(&boton);
carlospomar 0:91c7502b70de 123 Vcont=0;
carlospomar 0:91c7502b70de 124 Icont=0;
carlospomar 0:91c7502b70de 125 for (i=0; i<8; i++) {
carlospomar 0:91c7502b70de 126 Vcont=Vcont+tensioncontinua.read();
carlospomar 0:91c7502b70de 127 Icont=Icont+intensidadcontinua.read();
carlospomar 0:91c7502b70de 128 }
carlospomar 2:9377dbae7237 129 Vcont=Vcont/8.0;
carlospomar 2:9377dbae7237 130 Icont=Icont/8.0;
carlospomar 0:91c7502b70de 131
carlospomar 0:91c7502b70de 132 while (1) {
carlospomar 0:91c7502b70de 133 if (bufferlleno) {
carlospomar 0:91c7502b70de 134 bufferlleno=0;
carlospomar 0:91c7502b70de 135 suma=0;
carlospomar 0:91c7502b70de 136 sumaIntensidad=0;
carlospomar 0:91c7502b70de 137 sumapotenciaactiva=0;
carlospomar 0:91c7502b70de 138 for (i=0; i<100; i++) {
carlospomar 0:91c7502b70de 139 if(nbuffer==1) {
carlospomar 0:91c7502b70de 140 dato=muestrasA[i];
carlospomar 0:91c7502b70de 141 datoIntensidad=muestrasC[i];
carlospomar 0:91c7502b70de 142 } else {
carlospomar 0:91c7502b70de 143 dato=muestrasB[i];
carlospomar 0:91c7502b70de 144 datoIntensidad=muestrasD[i];
carlospomar 0:91c7502b70de 145 }
carlospomar 0:91c7502b70de 146 suma=suma+dato*dato;
carlospomar 0:91c7502b70de 147 sumaIntensidad=sumaIntensidad+datoIntensidad*datoIntensidad;
carlospomar 0:91c7502b70de 148 sumapotenciaactiva=sumapotenciaactiva+dato*datoIntensidad;
carlospomar 0:91c7502b70de 149 }
carlospomar 4:515ede6e2e14 150 Vrms=(sqrt(suma*dato_v));
carlospomar 4:515ede6e2e14 151 Irms=(sqrt(sumaIntensidad*dato_i));
carlospomar 4:515ede6e2e14 152 PotenciaActiva=dato_p*sumapotenciaactiva;
carlospomar 0:91c7502b70de 153 PotenciaAparente=Vrms*Irms;
carlospomar 4:515ede6e2e14 154 PotenciaReactiva=(sqrt((PotenciaAparente*PotenciaAparente)-(PotenciaActiva*PotenciaActiva)));
carlospomar 4:515ede6e2e14 155 EnergiaActiva=EnergiaActiva+PotenciaActiva*dato_e;
carlospomar 4:515ede6e2e14 156 EnergiaReactiva=EnergiaReactiva+PotenciaReactiva*dato_e;
carlospomar 4:515ede6e2e14 157 FactorPotencia=PotenciaActiva/PotenciaAparente;
carlospomar 4:515ede6e2e14 158 precio=EnergiaActiva*dato_p;
carlospomar 0:91c7502b70de 159 }
carlospomar 0:91c7502b70de 160 }
carlospomar 4:515ede6e2e14 161 }