¡Que majo es Ander Ibabe!
Dependencies: mbed
main.cpp@0:6ce5f0c2625c, 2017-11-16 (annotated)
- Committer:
- carlospomar
- Date:
- Thu Nov 16 13:20:50 2017 +0000
- Revision:
- 0:6ce5f0c2625c
- Child:
- 1:5ed5c373907b
?Qu? majo es Ander Ibabe!
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:6ce5f0c2625c | 71 | lcd.printf("Irms:\n3.3f I",Vrms); |
carlospomar | 0:6ce5f0c2625c | 72 | pc.printf("Irms:\n3.3f I",Vrms); |
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 | } |