
Primer cambio codigo 20/01/2020
main.cpp@0:0a17318c9c22, 2020-01-20 (annotated)
- Committer:
- javicas95
- Date:
- Mon Jan 20 14:46:34 2020 +0000
- Revision:
- 0:0a17318c9c22
- Child:
- 1:873f8f9b7f69
20/01/2020 - Primer cambio codigo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
javicas95 | 0:0a17318c9c22 | 1 | void visualizar(); |
javicas95 | 0:0a17318c9c22 | 2 | |
javicas95 | 0:0a17318c9c22 | 3 | #include "mbed.h" |
javicas95 | 0:0a17318c9c22 | 4 | #define buffer_length 2000 |
javicas95 | 0:0a17318c9c22 | 5 | |
javicas95 | 0:0a17318c9c22 | 6 | Ticker tMuestrear; |
javicas95 | 0:0a17318c9c22 | 7 | Ticker tVisualizar; |
javicas95 | 0:0a17318c9c22 | 8 | #include "TextLCD.h" |
javicas95 | 0:0a17318c9c22 | 9 | |
javicas95 | 0:0a17318c9c22 | 10 | //PARA LA PLACA LCD |
javicas95 | 0:0a17318c9c22 | 11 | InterruptIn button(PC_13); |
javicas95 | 0:0a17318c9c22 | 12 | //Inicializas el interruptor |
javicas95 | 0:0a17318c9c22 | 13 | TextLCD lcd(D8, D9, D2, D3, D4, D5, TextLCD::LCD16x2); // rs, e, d4-d7 |
javicas95 | 0:0a17318c9c22 | 14 | Serial pc(USBTX, USBRX); |
javicas95 | 0:0a17318c9c22 | 15 | // tx, rx esto es para que vaya más rápido, para que procese más rápido |
javicas95 | 0:0a17318c9c22 | 16 | Serial bluetooth(PC_0, PC_1); //ESTA SE QUITA |
javicas95 | 0:0a17318c9c22 | 17 | // tx, rx esto es para inicializar los pines para conectar el bluetooth |
javicas95 | 0:0a17318c9c22 | 18 | AnalogIn adc_in(A0); //datos de tensión |
javicas95 | 0:0a17318c9c22 | 19 | AnalogIn adc_in_in(A2); //datos de intensidad |
javicas95 | 0:0a17318c9c22 | 20 | AnalogIn adc_in_dos(A1); //datos de continua (la salida del LM 358) |
javicas95 | 0:0a17318c9c22 | 21 | void muestrear(); |
javicas95 | 0:0a17318c9c22 | 22 | void visualizar(); |
javicas95 | 0:0a17318c9c22 | 23 | int flag=0; |
javicas95 | 0:0a17318c9c22 | 24 | int contador=0; |
javicas95 | 0:0a17318c9c22 | 25 | int contador_boton=0; |
javicas95 | 0:0a17318c9c22 | 26 | bool buffer_activo=0; |
javicas95 | 0:0a17318c9c22 | 27 | struct buffer { |
javicas95 | 0:0a17318c9c22 | 28 | int16_t vA[buffer_length]; |
javicas95 | 0:0a17318c9c22 | 29 | int16_t iA[buffer_length]; |
javicas95 | 0:0a17318c9c22 | 30 | int16_t vB[buffer_length]; |
javicas95 | 0:0a17318c9c22 | 31 | int16_t iB[buffer_length]; |
javicas95 | 0:0a17318c9c22 | 32 | }; |
javicas95 | 0:0a17318c9c22 | 33 | buffer buffers; |
javicas95 | 0:0a17318c9c22 | 34 | struct estr_medidas |
javicas95 | 0:0a17318c9c22 | 35 | { |
javicas95 | 0:0a17318c9c22 | 36 | float vrms; |
javicas95 | 0:0a17318c9c22 | 37 | float irms; |
javicas95 | 0:0a17318c9c22 | 38 | float pot_activa; |
javicas95 | 0:0a17318c9c22 | 39 | float pot_reactiva; |
javicas95 | 0:0a17318c9c22 | 40 | float pot_aparente; |
javicas95 | 0:0a17318c9c22 | 41 | float en_consumida; |
javicas95 | 0:0a17318c9c22 | 42 | float fact_potencia; |
javicas95 | 0:0a17318c9c22 | 43 | }; |
javicas95 | 0:0a17318c9c22 | 44 | estr_medidas medidas; |
javicas95 | 0:0a17318c9c22 | 45 | void proces(int16_t *datosV, int16_t *datosI, int longi, estr_medidas *medidas) |
javicas95 | 0:0a17318c9c22 | 46 | { |
javicas95 | 0:0a17318c9c22 | 47 | int64_t b=0.0; |
javicas95 | 0:0a17318c9c22 | 48 | int64_t c=0; |
javicas95 | 0:0a17318c9c22 | 49 | int64_t d=0; |
javicas95 | 0:0a17318c9c22 | 50 | for(int j=0;j<longi;j++) |
javicas95 | 0:0a17318c9c22 | 51 | { |
javicas95 | 0:0a17318c9c22 | 52 | b = b + datosV[j]*datosV[j]; //calcula el sumatorio de v^2 |
javicas95 | 0:0a17318c9c22 | 53 | c = c + datosI[j]*datosI[j]; //calcula el sumatorio de i^2 |
javicas95 | 0:0a17318c9c22 | 54 | d = d + datosV[j]*datosI[j]; //calcula el sumatorio de v*i |
javicas95 | 0:0a17318c9c22 | 55 | } |
javicas95 | 0:0a17318c9c22 | 56 | //el puntero *medidas apunta la dirección de los distitntos vectores de la estructura |
javicas95 | 0:0a17318c9c22 | 57 | //guardamos los resultados en la dirección de memoria que apunta *medidas para cada uno de los resultados |
javicas95 | 0:0a17318c9c22 | 58 | medidas->vrms=0.011812328729925*sqrt(((float)b)/longi); |
javicas95 | 0:0a17318c9c22 | 59 | medidas->irms=0.000842270393376366*sqrt(((float)c)/longi); |
javicas95 | 0:0a17318c9c22 | 60 | medidas->pot_activa=(9.949174801697868320688107085e-6*d)/longi; |
javicas95 | 0:0a17318c9c22 | 61 | medidas->pot_aparente=medidas->vrms*medidas->irms; |
javicas95 | 0:0a17318c9c22 | 62 | medidas->pot_reactiva=sqrt((medidas->pot_aparente*medidas->pot_aparente)-(medidas->pot_activa*medidas->pot_activa)); |
javicas95 | 0:0a17318c9c22 | 63 | medidas->fact_potencia=((float)medidas->pot_activa)/medidas->pot_aparente; |
javicas95 | 0:0a17318c9c22 | 64 | medidas->en_consumida+=0.001*medidas->pot_activa*longi; |
javicas95 | 0:0a17318c9c22 | 65 | |
javicas95 | 0:0a17318c9c22 | 66 | // Se lleva la cuenta,mediante un contador, del número de veces que se ha |
javicas95 | 0:0a17318c9c22 | 67 | //pulsado el pulsador para saber qué dato se deberá visualizar. Una vez que el |
javicas95 | 0:0a17318c9c22 | 68 | //contador llegue al número máximo de datos, éste vuelve a cero y comienza de |
javicas95 | 0:0a17318c9c22 | 69 | //nuevo la cuenta. |
javicas95 | 0:0a17318c9c22 | 70 | } |
javicas95 | 0:0a17318c9c22 | 71 | void flip() { |
javicas95 | 0:0a17318c9c22 | 72 | contador_boton++; |
javicas95 | 0:0a17318c9c22 | 73 | if (contador_boton==8) |
javicas95 | 0:0a17318c9c22 | 74 | { |
javicas95 | 0:0a17318c9c22 | 75 | contador_boton=0; |
javicas95 | 0:0a17318c9c22 | 76 | } |
javicas95 | 0:0a17318c9c22 | 77 | } |
javicas95 | 0:0a17318c9c22 | 78 | int main() |
javicas95 | 0:0a17318c9c22 | 79 | { |
javicas95 | 0:0a17318c9c22 | 80 | pc.baud(115200); |
javicas95 | 0:0a17318c9c22 | 81 | bluetooth.baud(9600); //ESTA SE QUITA |
javicas95 | 0:0a17318c9c22 | 82 | tMuestrear.attach_us(&muestrear, 200); |
javicas95 | 0:0a17318c9c22 | 83 | tVisualizar.attach(&visualizar, 1); |
javicas95 | 0:0a17318c9c22 | 84 | button.rise(&flip); // attach the address of the flip function to the rising edge |
javicas95 | 0:0a17318c9c22 | 85 | while(1) { |
javicas95 | 0:0a17318c9c22 | 86 | if(flag==1) { |
javicas95 | 0:0a17318c9c22 | 87 | // pc.printf("1"); |
javicas95 | 0:0a17318c9c22 | 88 | flag=0; |
javicas95 | 0:0a17318c9c22 | 89 | |
javicas95 | 0:0a17318c9c22 | 90 | if(buffer_activo) { |
javicas95 | 0:0a17318c9c22 | 91 | |
javicas95 | 0:0a17318c9c22 | 92 | procesado((int16_t *) buffers.vA, (int16_t *)buffers.iA, buffer_length, &medidas); |
javicas95 | 0:0a17318c9c22 | 93 | |
javicas95 | 0:0a17318c9c22 | 94 | } else { |
javicas95 | 0:0a17318c9c22 | 95 | procesado((int16_t *)buffers.vB,(int16_t *)buffers.iB, buffer_length, &medidas); |
javicas95 | 0:0a17318c9c22 | 96 | |
javicas95 | 0:0a17318c9c22 | 97 | } |
javicas95 | 0:0a17318c9c22 | 98 | |
javicas95 | 0:0a17318c9c22 | 99 | |
javicas95 | 0:0a17318c9c22 | 100 | } |
javicas95 | 0:0a17318c9c22 | 101 | //wait_us(1); |
javicas95 | 0:0a17318c9c22 | 102 | } |
javicas95 | 0:0a17318c9c22 | 103 | } |
javicas95 | 0:0a17318c9c22 | 104 | void muestrear() |
javicas95 | 0:0a17318c9c22 | 105 | { |
javicas95 | 0:0a17318c9c22 | 106 | int16_t datov=(int16_t)(adc_in.read_u16()^0x8000); |
javicas95 | 0:0a17318c9c22 | 107 | int16_t datoi=(int16_t)(adc_in_in.read_u16()^0x8000); |
javicas95 | 0:0a17318c9c22 | 108 | int16_t continua=(int16_t)(adc_in_dos.read_u16()^0x8000); |
javicas95 | 0:0a17318c9c22 | 109 | if (bufferActivo==0) { |
javicas95 | 0:0a17318c9c22 | 110 | buffers.vA[contador]=datov-continua; |
javicas95 | 0:0a17318c9c22 | 111 | buffers.iA[contador]=datoi-continua; |
javicas95 | 0:0a17318c9c22 | 112 | |
javicas95 | 0:0a17318c9c22 | 113 | } else { |
javicas95 | 0:0a17318c9c22 | 114 | buffers.vB[contador]=datov-continua; |
javicas95 | 0:0a17318c9c22 | 115 | buffers.iB[contador]=datoi-continua; |
javicas95 | 0:0a17318c9c22 | 116 | |
javicas95 | 0:0a17318c9c22 | 117 | } |
javicas95 | 0:0a17318c9c22 | 118 | contador++; |
javicas95 | 0:0a17318c9c22 | 119 | if(contador==buffer_length) { |
javicas95 | 0:0a17318c9c22 | 120 | //pc.printf("2"); |
javicas95 | 0:0a17318c9c22 | 121 | contador=0; |
javicas95 | 0:0a17318c9c22 | 122 | flag=1; |
javicas95 | 0:0a17318c9c22 | 123 | buffer_activo=!buffer_activo; |
javicas95 | 0:0a17318c9c22 | 124 | } |
javicas95 | 0:0a17318c9c22 | 125 | } |
javicas95 | 0:0a17318c9c22 | 126 | void visualizar(){ |
javicas95 | 0:0a17318c9c22 | 127 | |
javicas95 | 0:0a17318c9c22 | 128 | //printf("**** Datos calculados en %d us ****\n",timer.read_us()); |
javicas95 | 0:0a17318c9c22 | 129 | pc.printf("**** El valor Vrms es %f ****\n",medidas.vrms); |
javicas95 | 0:0a17318c9c22 | 130 | pc.printf("**** El valor Irms es %f ****\n",medidas.irms); |
javicas95 | 0:0a17318c9c22 | 131 | pc.printf("**** La potencia activa es %f ****\n",medidas.pot_activa); |
javicas95 | 0:0a17318c9c22 | 132 | pc.printf("**** La potencia reactiva es %f ****\n",medidas.pot_reactiva); |
javicas95 | 0:0a17318c9c22 | 133 | pc.printf("**** La potencia aparente es %f ****\n",medidas.pot_aparente); |
javicas95 | 0:0a17318c9c22 | 134 | pc.printf("**** La energia consumida es %f ****\n",medidas.en_consumida); |
javicas95 | 0:0a17318c9c22 | 135 | pc.printf("**** El factor de potencia es es %f ****\n\n",medidas.fact_potencia); |
javicas95 | 0:0a17318c9c22 | 136 | |
javicas95 | 0:0a17318c9c22 | 137 | switch (contador_boton){ |
javicas95 | 0:0a17318c9c22 | 138 | case 1: |
javicas95 | 0:0a17318c9c22 | 139 | |
javicas95 | 0:0a17318c9c22 | 140 | lcd.cls(); |
javicas95 | 0:0a17318c9c22 | 141 | lcd.printf("Vrms:\n%3.4f V\n", medidas.vrms); |
javicas95 | 0:0a17318c9c22 | 142 | break; |
javicas95 | 0:0a17318c9c22 | 143 | |
javicas95 | 0:0a17318c9c22 | 144 | case 2: |
javicas95 | 0:0a17318c9c22 | 145 | |
javicas95 | 0:0a17318c9c22 | 146 | lcd.cls(); |
javicas95 | 0:0a17318c9c22 | 147 | lcd.printf("Irms:\n%3.2f A\n", medidas.irms); |
javicas95 | 0:0a17318c9c22 | 148 | break; |
javicas95 | 0:0a17318c9c22 | 149 | |
javicas95 | 0:0a17318c9c22 | 150 | case 3: |
javicas95 | 0:0a17318c9c22 | 151 | |
javicas95 | 0:0a17318c9c22 | 152 | lcd.cls(); |
javicas95 | 0:0a17318c9c22 | 153 | lcd.printf("Pot activa\n%3.2f W\n", medidas.pot_activa); |
javicas95 | 0:0a17318c9c22 | 154 | break; |
javicas95 | 0:0a17318c9c22 | 155 | case 4: |
javicas95 | 0:0a17318c9c22 | 156 | |
javicas95 | 0:0a17318c9c22 | 157 | lcd.cls(); |
javicas95 | 0:0a17318c9c22 | 158 | lcd.printf("Pot reactiva\n%3.2f VAr\n", medidas.pot_reactiva); |
javicas95 | 0:0a17318c9c22 | 159 | break; |
javicas95 | 0:0a17318c9c22 | 160 | |
javicas95 | 0:0a17318c9c22 | 161 | case 5: |
javicas95 | 0:0a17318c9c22 | 162 | |
javicas95 | 0:0a17318c9c22 | 163 | lcd.cls(); |
javicas95 | 0:0a17318c9c22 | 164 | lcd.printf("Pot aparente\n%3.2f VA\n", medidas.pot_aparente); |
javicas95 | 0:0a17318c9c22 | 165 | break; |
javicas95 | 0:0a17318c9c22 | 166 | case 6: |
javicas95 | 0:0a17318c9c22 | 167 | |
javicas95 | 0:0a17318c9c22 | 168 | lcd.cls(); |
javicas95 | 0:0a17318c9c22 | 169 | lcd.printf("E. consumida\n%3.2f kW\n", medidas.en_consumida); |
javicas95 | 0:0a17318c9c22 | 170 | break; |
javicas95 | 0:0a17318c9c22 | 171 | case 7: |
javicas95 | 0:0a17318c9c22 | 172 | |
javicas95 | 0:0a17318c9c22 | 173 | lcd.cls(); |
javicas95 | 0:0a17318c9c22 | 174 | lcd.printf("Factor potencia\n%3.2f\n", medidas.fact_potencia); |
javicas95 | 0:0a17318c9c22 | 175 | break; |
javicas95 | 0:0a17318c9c22 | 176 | default: |
javicas95 | 0:0a17318c9c22 | 177 | lcd.cls(); |
javicas95 | 0:0a17318c9c22 | 178 | lcd.printf("Pulsa el boton"); |
javicas95 | 0:0a17318c9c22 | 179 | } |
javicas95 | 0:0a17318c9c22 | 180 | bluetooth.printf("%3.2f|%3.2f|%3.2f|%3.2f|%3.2f|%3.2f|%3.2f|\n",medidas.vrms, |
javicas95 | 0:0a17318c9c22 | 181 | medidas.irms,medidas.potenciaActiva,medidas.potenciaReactiva, |
javicas95 | 0:0a17318c9c22 | 182 | medidas.potenciaAparente,medidas.energiaConsumida,medidas.factorDePotencia); |
javicas95 | 0:0a17318c9c22 | 183 | } |
javicas95 | 0:0a17318c9c22 | 184 | // TODO ESTO SE QUITA |