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