Primer cambio codigo 20/01/2020

Dependencies:   mbed TextLCD

main.cpp

Committer:
javicas95
Date:
2020-01-30
Revision:
1:873f8f9b7f69
Parent:
0:0a17318c9c22

File content as of revision 1:873f8f9b7f69:

void visualizar();

#include "mbed.h"
#define buffer_length 2000

Ticker tMuestrear;
Ticker tVisualizar;
#include "TextLCD.h"


InterruptIn button(PC_13); 

TextLCD lcd(D8, D9, D2, D3, D4, D5, TextLCD::LCD16x2); // rs, e, d4-d7
Serial pc(USBTX, USBRX); // tx, rx 

Serial bluetooth(PC_0, PC_1); 

AnalogIn adc_in(A0); 
AnalogIn adc_in_in(A2); 
AnalogIn adc_in_dos(A1);

void muestrear();
void visualizar();
int flag=0;
int contador=0;
int contador_boton=0;
bool buffer_activo=0;
struct buffer {
    int16_t vA[buffer_length];
    int16_t iA[buffer_length];
    int16_t vB[buffer_length];
    int16_t iB[buffer_length];
};
buffer buffers;
struct estr_medidas
{
    float vrms;
    float irms;
    float pot_activa;
    float pot_reactiva;
    float pot_aparente;
    float en_consumida;
    float fact_potencia;
};
estr_medidas medidas;
void procesado(int16_t *datosV, int16_t *datosI, int longi, estr_medidas *medidas)
{
    int64_t b=0.0;
    int64_t c=0;
    int64_t d=0;
 for(int j=0;j<longi;j++)
 {
    b = b + datosV[j]*datosV[j]; 
    c = c + datosI[j]*datosI[j]; 
    d = d + datosV[j]*datosI[j]; 
 }


 medidas->vrms=0.01275509675*sqrt(((float)b)/longi);
 medidas->irms=0.0004536585089*sqrt(((float)c)/longi);
 medidas->pot_activa=(5.786458173e-6*d)/longi;
 medidas->pot_aparente=medidas->vrms*medidas->irms;
 medidas->pot_reactiva=sqrt((medidas->pot_aparente*medidas->pot_aparente)-(medidas->pot_activa*medidas->pot_activa));
 medidas->fact_potencia=((float)medidas->pot_activa)/medidas->pot_aparente;
 medidas->en_consumida+=0.001*medidas->pot_activa*longi;


}
void flip() {
 contador_boton++;
 if (contador_boton==8)
 {
 contador_boton=0;
 }
}
int main()
{
    pc.baud(115200);
    bluetooth.baud(9600); 
    tMuestrear.attach_us(&muestrear, 200);
    tVisualizar.attach(&visualizar, 1);
    button.rise(&flip); 
    while(1) {
        if(flag==1) {

            flag=0;

            if(buffer_activo) {

                procesado((int16_t *) buffers.vA, (int16_t *)buffers.iA, buffer_length, &medidas);

            } else {
                procesado((int16_t *)buffers.vB,(int16_t *)buffers.iB, buffer_length, &medidas);

 }


 }

 }
 }
void muestrear()
{
    int16_t datov=(int16_t)(adc_in.read_u16()^0x8000);
    int16_t datoi=(int16_t)(adc_in_in.read_u16()^0x8000);
    int16_t continua=(int16_t)(adc_in_dos.read_u16()^0x8000);
    if (buffer_activo==0) {
        buffers.vA[contador]=datov-continua;
        buffers.iA[contador]=datoi-continua;

    } else {
        buffers.vB[contador]=datov-continua;
        buffers.iB[contador]=datoi-continua;

    }
    contador++;
    if(contador==buffer_length) {
 //pc.printf("2");
        contador=0;
        flag=1;
        buffer_activo=!buffer_activo;
 }
}
void visualizar(){


    pc.printf("**** El valor Vrms es %f ****\n",medidas.vrms);
    pc.printf("**** El valor Irms es %f ****\n",medidas.irms);
    pc.printf("**** La potencia activa es %f ****\n",medidas.pot_activa);
    pc.printf("**** La potencia reactiva es %f ****\n",medidas.pot_reactiva);
    pc.printf("**** La potencia aparente es %f ****\n",medidas.pot_aparente);
    pc.printf("**** La energia consumida es %f ****\n",medidas.en_consumida);
    pc.printf("**** El factor de potencia es es %f ****\n\n",medidas.fact_potencia);

    switch (contador_boton){
        case 1:

            lcd.cls();
            lcd.printf("Vrms:\n%3.4f V\n", medidas.vrms);
        break;

        case 2:

            lcd.cls();
            lcd.printf("Irms:\n%3.2f A\n", medidas.irms);
        break;

        case 3:

            lcd.cls();
            lcd.printf("Pot activa\n%3.2f W\n", medidas.pot_activa);
        break;
        
        case 4:

            lcd.cls();
            lcd.printf("Pot reactiva\n%3.2f VAr\n", medidas.pot_reactiva);
        break;

        case 5:

            lcd.cls();
            lcd.printf("Pot aparente\n%3.2f VA\n", medidas.pot_aparente);
        break;
        
        case 6:

            lcd.cls();
            lcd.printf("En consumida\n%3.2f kW\n", medidas.en_consumida);
        break;
        
        case 7:

            lcd.cls();
            lcd.printf("Fact potencia\n%3.2f\n", medidas.fact_potencia);
        break;
        default:
            lcd.cls();
            lcd.printf("Pulsar boton");
    }
    bluetooth.printf("%3.2f|%3.2f|%3.2f|%3.2f|%3.2f|%3.2f|%3.2f|\n",medidas.vrms,
 medidas.irms,medidas.pot_activa,medidas.pot_reactiva,
 medidas.pot_aparente,medidas.en_consumida,medidas.fact_potencia);
}