Primer cambio codigo 20/01/2020

Dependencies:   mbed TextLCD

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?

UserRevisionLine numberNew 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