![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
ff
main.cpp
- Committer:
- jon07
- Date:
- 2018-01-18
- Revision:
- 0:1b3a675e81b5
File content as of revision 0:1b3a675e81b5:
#include "mbed.h" #define period 0.0002 //1/5000 #define sizeVector 100 #define Constant_v 1.2092e-06 #define Constant_i 5.5641e-06//((3,3*2000/(2^16*Rburn))^2)*(1/100) //USER_BUTTON o PC_13 #include "TextLCD.h" #define dato_p 202.6327 //para calcular el precio InterruptIn button(PC_13); AnalogIn valuesV(A0); AnalogIn valuesOffset(A1); AnalogIn valuesI(A5); Serial bluetooth(D10,D2); TextLCD lcd(D8, D9, D3, D4, D5, D6 ,TextLCD::LCD16x2); // rs, e, d4-d7 int16_t vA[sizeVector]; int16_t vB[sizeVector]; int16_t iA[sizeVector]; int16_t iB[sizeVector]; uint16_t valorOffset; uint32_t temporal; int counter=0; int flag=0; int whatVector=0; int state=0; int16_t temp_v=0; int16_t temp_i=0; int64_t sum_values_v=0; int64_t sum_values_i=0; float VRMS=0; float IRMS=0; float Pact=0; float Preactiva=0; float Paparente=0; float EnergiActiva=0; float EnergiaReactiva=0; float cosPHI=0; float precio=0; Ticker sample; //Puntero para el attach Ticker visualize; void fsample() { valorOffset=(int16_t)(valuesOffset.read_u16()^0x8000); if (whatVector) { temporal=((valuesV.read_u16()+valuesV.read_u16()+valuesV.read_u16()+valuesV.read_u16())/4); vB[counter]=((int16_t)(temporal^0xFFFF8000))-valorOffset; //printf("%u %d\r\n",vB[counter], counter); temporal=((valuesI.read_u16()+valuesI.read_u16()+valuesI.read_u16()+valuesI.read_u16())/4); iB[counter]=((int16_t)(temporal^0xFFFF8000))-valorOffset; } else { temporal=((valuesV.read_u16()+valuesV.read_u16()+valuesV.read_u16()+valuesV.read_u16())/4); vA[counter]=((int16_t)(temporal^0xFFFF8000))-valorOffset; temporal=((valuesI.read_u16()+valuesI.read_u16()+valuesI.read_u16()+valuesI.read_u16())/4); iA[counter]=((int16_t)(temporal^0xFFFF8000))-valorOffset; } counter++; if (counter==100) { counter=0; flag=1; whatVector=!whatVector; } } void change_button() { state++; if(state>8) { state=0; } } void visualiza() { lcd.cls(); bluetooth.printf("%f|%f|%f|%f|%f|%f|%f\n\r",VRMS,IRMS,Pact,EnergiActiva,EnergiaReactiva,Preactiva,Paparente); switch(state) { case 0: lcd.printf("VRMS: \n %f",VRMS); break; case 1: lcd.printf("IRMS: \n %f",IRMS); break; case 2: lcd.printf("Potencia Activa: \n %f",Pact); break; case 3: lcd.printf("Energia Activa:\n\r%f",EnergiActiva); break; case 4: lcd.printf("Energía Reactiva:\n\r%f",EnergiaReactiva); break; case 5: lcd.printf("Potecia Reactiva:\n\r%f",Preactiva); break; case 6: lcd.printf("Potencia Aparente:\n\r%f",Paparente); break; case 7: lcd.printf("Coseno de phi:\n\r%f",cosPHI); break; bluetooth.printf("%f | %f | %f | %f | %f \n",VRMS,IRMS,Pact,Preactiva,Paparente); } } int main() { sample.attach(&fsample,period); visualize.attach(&visualiza,1); button.rise(&change_button); int32_t productoTemp; while(1) { if (flag) { flag=0; //Para que entre en el if cuando haya un cambio a 1 de flag, es decir, counter=100 sum_values_v=0; //Inicializar a 0 sum_values_i=0; //printf("****************************\n\r"); for(int n=0; n<100; n++) { if(whatVector) { temp_v=vA[n]; temp_i=iA[n]; } else { temp_v=vB[n]; temp_i=iB[n]; } //printf("%d\n\r",temp_v); productoTemp=temp_v*temp_v; sum_values_v=sum_values_v+productoTemp; productoTemp=temp_i*temp_i; sum_values_i=sum_values_i+productoTemp; sum_values_pa=sum_values_pa+(sum_values_i*sum_values_v); sum_values_pr= sum_values_papa= } } printf("%f\n\r",(float)sum_values_v); VRMS=sqrt(Constant_v*(float)sum_values_v); //VRMS=sqrt((((float)Constant_v*(float)Constant_v)*(1/100))*(float)sum_values_v); //IRMS=sqrt((((float)Constant_i*(float)Constant_i)*(1/100))*(float)sum_values_i); IRMS=sqrt(Constant_i*(float)sum_values_i); //Pact=(((((float)Constant_v*(float)Constant_i)*(1/100))*(float)sum_values_v)*(float)sum_values_i); Pact=202.63*sum_values_pa; EnergiActiva=EnergiActiva+Pact*20e-3/(3600*1000); //kWh Paparente=VRMS*IRMS; Preactiva=sqrt((Paparente*Paparente)-(Pact*Pact)); EnergiaReactiva=EnergiaReactiva+Preactiva*20e-3/(3600*1000); cosPHI=Pact/Paparente; precio=EnergiActiva*dato_p; } }