¡Que majo es Ander Ibabe!

Dependencies:   mbed

Committer:
carlospomar
Date:
Wed Dec 13 10:10:13 2017 +0000
Revision:
1:5ed5c373907b
Parent:
0:6ce5f0c2625c
asdf

Who changed what in which revision?

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