![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
ff
main.cpp@0:1b3a675e81b5, 2018-01-18 (annotated)
- Committer:
- jon07
- Date:
- Thu Jan 18 12:23:56 2018 +0000
- Revision:
- 0:1b3a675e81b5
asdf
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jon07 | 0:1b3a675e81b5 | 1 | #include "mbed.h" |
jon07 | 0:1b3a675e81b5 | 2 | #define period 0.0002 //1/5000 |
jon07 | 0:1b3a675e81b5 | 3 | #define sizeVector 100 |
jon07 | 0:1b3a675e81b5 | 4 | #define Constant_v 1.2092e-06 |
jon07 | 0:1b3a675e81b5 | 5 | #define Constant_i 5.5641e-06//((3,3*2000/(2^16*Rburn))^2)*(1/100) |
jon07 | 0:1b3a675e81b5 | 6 | //USER_BUTTON o PC_13 |
jon07 | 0:1b3a675e81b5 | 7 | #include "TextLCD.h" |
jon07 | 0:1b3a675e81b5 | 8 | #define dato_p 202.6327 //para calcular el precio |
jon07 | 0:1b3a675e81b5 | 9 | |
jon07 | 0:1b3a675e81b5 | 10 | InterruptIn button(PC_13); |
jon07 | 0:1b3a675e81b5 | 11 | AnalogIn valuesV(A0); |
jon07 | 0:1b3a675e81b5 | 12 | AnalogIn valuesOffset(A1); |
jon07 | 0:1b3a675e81b5 | 13 | AnalogIn valuesI(A5); |
jon07 | 0:1b3a675e81b5 | 14 | |
jon07 | 0:1b3a675e81b5 | 15 | Serial bluetooth(D10,D2); |
jon07 | 0:1b3a675e81b5 | 16 | TextLCD lcd(D8, D9, D3, D4, D5, D6 ,TextLCD::LCD16x2); // rs, e, d4-d7 |
jon07 | 0:1b3a675e81b5 | 17 | |
jon07 | 0:1b3a675e81b5 | 18 | int16_t vA[sizeVector]; |
jon07 | 0:1b3a675e81b5 | 19 | int16_t vB[sizeVector]; |
jon07 | 0:1b3a675e81b5 | 20 | int16_t iA[sizeVector]; |
jon07 | 0:1b3a675e81b5 | 21 | int16_t iB[sizeVector]; |
jon07 | 0:1b3a675e81b5 | 22 | uint16_t valorOffset; |
jon07 | 0:1b3a675e81b5 | 23 | |
jon07 | 0:1b3a675e81b5 | 24 | uint32_t temporal; |
jon07 | 0:1b3a675e81b5 | 25 | |
jon07 | 0:1b3a675e81b5 | 26 | int counter=0; |
jon07 | 0:1b3a675e81b5 | 27 | int flag=0; |
jon07 | 0:1b3a675e81b5 | 28 | int whatVector=0; |
jon07 | 0:1b3a675e81b5 | 29 | int state=0; |
jon07 | 0:1b3a675e81b5 | 30 | int16_t temp_v=0; |
jon07 | 0:1b3a675e81b5 | 31 | int16_t temp_i=0; |
jon07 | 0:1b3a675e81b5 | 32 | int64_t sum_values_v=0; |
jon07 | 0:1b3a675e81b5 | 33 | int64_t sum_values_i=0; |
jon07 | 0:1b3a675e81b5 | 34 | float VRMS=0; |
jon07 | 0:1b3a675e81b5 | 35 | float IRMS=0; |
jon07 | 0:1b3a675e81b5 | 36 | float Pact=0; |
jon07 | 0:1b3a675e81b5 | 37 | float Preactiva=0; |
jon07 | 0:1b3a675e81b5 | 38 | float Paparente=0; |
jon07 | 0:1b3a675e81b5 | 39 | float EnergiActiva=0; |
jon07 | 0:1b3a675e81b5 | 40 | float EnergiaReactiva=0; |
jon07 | 0:1b3a675e81b5 | 41 | float cosPHI=0; |
jon07 | 0:1b3a675e81b5 | 42 | float precio=0; |
jon07 | 0:1b3a675e81b5 | 43 | |
jon07 | 0:1b3a675e81b5 | 44 | |
jon07 | 0:1b3a675e81b5 | 45 | |
jon07 | 0:1b3a675e81b5 | 46 | Ticker sample; //Puntero para el attach |
jon07 | 0:1b3a675e81b5 | 47 | Ticker visualize; |
jon07 | 0:1b3a675e81b5 | 48 | |
jon07 | 0:1b3a675e81b5 | 49 | void fsample() |
jon07 | 0:1b3a675e81b5 | 50 | { |
jon07 | 0:1b3a675e81b5 | 51 | valorOffset=(int16_t)(valuesOffset.read_u16()^0x8000); |
jon07 | 0:1b3a675e81b5 | 52 | if (whatVector) { |
jon07 | 0:1b3a675e81b5 | 53 | temporal=((valuesV.read_u16()+valuesV.read_u16()+valuesV.read_u16()+valuesV.read_u16())/4); |
jon07 | 0:1b3a675e81b5 | 54 | |
jon07 | 0:1b3a675e81b5 | 55 | vB[counter]=((int16_t)(temporal^0xFFFF8000))-valorOffset; |
jon07 | 0:1b3a675e81b5 | 56 | //printf("%u %d\r\n",vB[counter], counter); |
jon07 | 0:1b3a675e81b5 | 57 | temporal=((valuesI.read_u16()+valuesI.read_u16()+valuesI.read_u16()+valuesI.read_u16())/4); |
jon07 | 0:1b3a675e81b5 | 58 | iB[counter]=((int16_t)(temporal^0xFFFF8000))-valorOffset; |
jon07 | 0:1b3a675e81b5 | 59 | } else { |
jon07 | 0:1b3a675e81b5 | 60 | temporal=((valuesV.read_u16()+valuesV.read_u16()+valuesV.read_u16()+valuesV.read_u16())/4); |
jon07 | 0:1b3a675e81b5 | 61 | vA[counter]=((int16_t)(temporal^0xFFFF8000))-valorOffset; |
jon07 | 0:1b3a675e81b5 | 62 | |
jon07 | 0:1b3a675e81b5 | 63 | temporal=((valuesI.read_u16()+valuesI.read_u16()+valuesI.read_u16()+valuesI.read_u16())/4); |
jon07 | 0:1b3a675e81b5 | 64 | iA[counter]=((int16_t)(temporal^0xFFFF8000))-valorOffset; |
jon07 | 0:1b3a675e81b5 | 65 | } |
jon07 | 0:1b3a675e81b5 | 66 | counter++; |
jon07 | 0:1b3a675e81b5 | 67 | if (counter==100) { |
jon07 | 0:1b3a675e81b5 | 68 | counter=0; |
jon07 | 0:1b3a675e81b5 | 69 | flag=1; |
jon07 | 0:1b3a675e81b5 | 70 | whatVector=!whatVector; |
jon07 | 0:1b3a675e81b5 | 71 | } |
jon07 | 0:1b3a675e81b5 | 72 | } |
jon07 | 0:1b3a675e81b5 | 73 | void change_button() |
jon07 | 0:1b3a675e81b5 | 74 | { |
jon07 | 0:1b3a675e81b5 | 75 | state++; |
jon07 | 0:1b3a675e81b5 | 76 | if(state>8) { |
jon07 | 0:1b3a675e81b5 | 77 | state=0; |
jon07 | 0:1b3a675e81b5 | 78 | } |
jon07 | 0:1b3a675e81b5 | 79 | } |
jon07 | 0:1b3a675e81b5 | 80 | void visualiza() |
jon07 | 0:1b3a675e81b5 | 81 | { |
jon07 | 0:1b3a675e81b5 | 82 | lcd.cls(); |
jon07 | 0:1b3a675e81b5 | 83 | bluetooth.printf("%f|%f|%f|%f|%f|%f|%f\n\r",VRMS,IRMS,Pact,EnergiActiva,EnergiaReactiva,Preactiva,Paparente); |
jon07 | 0:1b3a675e81b5 | 84 | switch(state) { |
jon07 | 0:1b3a675e81b5 | 85 | |
jon07 | 0:1b3a675e81b5 | 86 | case 0: |
jon07 | 0:1b3a675e81b5 | 87 | lcd.printf("VRMS: \n %f",VRMS); |
jon07 | 0:1b3a675e81b5 | 88 | break; |
jon07 | 0:1b3a675e81b5 | 89 | case 1: |
jon07 | 0:1b3a675e81b5 | 90 | lcd.printf("IRMS: \n %f",IRMS); |
jon07 | 0:1b3a675e81b5 | 91 | break; |
jon07 | 0:1b3a675e81b5 | 92 | case 2: |
jon07 | 0:1b3a675e81b5 | 93 | lcd.printf("Potencia Activa: \n %f",Pact); |
jon07 | 0:1b3a675e81b5 | 94 | break; |
jon07 | 0:1b3a675e81b5 | 95 | case 3: |
jon07 | 0:1b3a675e81b5 | 96 | lcd.printf("Energia Activa:\n\r%f",EnergiActiva); |
jon07 | 0:1b3a675e81b5 | 97 | break; |
jon07 | 0:1b3a675e81b5 | 98 | case 4: |
jon07 | 0:1b3a675e81b5 | 99 | lcd.printf("Energía Reactiva:\n\r%f",EnergiaReactiva); |
jon07 | 0:1b3a675e81b5 | 100 | break; |
jon07 | 0:1b3a675e81b5 | 101 | case 5: |
jon07 | 0:1b3a675e81b5 | 102 | lcd.printf("Potecia Reactiva:\n\r%f",Preactiva); |
jon07 | 0:1b3a675e81b5 | 103 | break; |
jon07 | 0:1b3a675e81b5 | 104 | case 6: |
jon07 | 0:1b3a675e81b5 | 105 | lcd.printf("Potencia Aparente:\n\r%f",Paparente); |
jon07 | 0:1b3a675e81b5 | 106 | break; |
jon07 | 0:1b3a675e81b5 | 107 | case 7: |
jon07 | 0:1b3a675e81b5 | 108 | lcd.printf("Coseno de phi:\n\r%f",cosPHI); |
jon07 | 0:1b3a675e81b5 | 109 | break; |
jon07 | 0:1b3a675e81b5 | 110 | |
jon07 | 0:1b3a675e81b5 | 111 | bluetooth.printf("%f | %f | %f | %f | %f \n",VRMS,IRMS,Pact,Preactiva,Paparente); |
jon07 | 0:1b3a675e81b5 | 112 | } |
jon07 | 0:1b3a675e81b5 | 113 | } |
jon07 | 0:1b3a675e81b5 | 114 | int main() |
jon07 | 0:1b3a675e81b5 | 115 | { |
jon07 | 0:1b3a675e81b5 | 116 | sample.attach(&fsample,period); |
jon07 | 0:1b3a675e81b5 | 117 | visualize.attach(&visualiza,1); |
jon07 | 0:1b3a675e81b5 | 118 | button.rise(&change_button); |
jon07 | 0:1b3a675e81b5 | 119 | int32_t productoTemp; |
jon07 | 0:1b3a675e81b5 | 120 | |
jon07 | 0:1b3a675e81b5 | 121 | while(1) { |
jon07 | 0:1b3a675e81b5 | 122 | if (flag) { |
jon07 | 0:1b3a675e81b5 | 123 | flag=0; //Para que entre en el if cuando haya un cambio a 1 de flag, es decir, counter=100 |
jon07 | 0:1b3a675e81b5 | 124 | sum_values_v=0; //Inicializar a 0 |
jon07 | 0:1b3a675e81b5 | 125 | sum_values_i=0; |
jon07 | 0:1b3a675e81b5 | 126 | //printf("****************************\n\r"); |
jon07 | 0:1b3a675e81b5 | 127 | for(int n=0; n<100; n++) { |
jon07 | 0:1b3a675e81b5 | 128 | if(whatVector) { |
jon07 | 0:1b3a675e81b5 | 129 | temp_v=vA[n]; |
jon07 | 0:1b3a675e81b5 | 130 | temp_i=iA[n]; |
jon07 | 0:1b3a675e81b5 | 131 | } else { |
jon07 | 0:1b3a675e81b5 | 132 | temp_v=vB[n]; |
jon07 | 0:1b3a675e81b5 | 133 | temp_i=iB[n]; |
jon07 | 0:1b3a675e81b5 | 134 | } |
jon07 | 0:1b3a675e81b5 | 135 | //printf("%d\n\r",temp_v); |
jon07 | 0:1b3a675e81b5 | 136 | productoTemp=temp_v*temp_v; |
jon07 | 0:1b3a675e81b5 | 137 | sum_values_v=sum_values_v+productoTemp; |
jon07 | 0:1b3a675e81b5 | 138 | productoTemp=temp_i*temp_i; |
jon07 | 0:1b3a675e81b5 | 139 | sum_values_i=sum_values_i+productoTemp; |
jon07 | 0:1b3a675e81b5 | 140 | sum_values_pa=sum_values_pa+(sum_values_i*sum_values_v); |
jon07 | 0:1b3a675e81b5 | 141 | sum_values_pr= |
jon07 | 0:1b3a675e81b5 | 142 | sum_values_papa= |
jon07 | 0:1b3a675e81b5 | 143 | |
jon07 | 0:1b3a675e81b5 | 144 | |
jon07 | 0:1b3a675e81b5 | 145 | } |
jon07 | 0:1b3a675e81b5 | 146 | |
jon07 | 0:1b3a675e81b5 | 147 | } |
jon07 | 0:1b3a675e81b5 | 148 | printf("%f\n\r",(float)sum_values_v); |
jon07 | 0:1b3a675e81b5 | 149 | VRMS=sqrt(Constant_v*(float)sum_values_v); |
jon07 | 0:1b3a675e81b5 | 150 | //VRMS=sqrt((((float)Constant_v*(float)Constant_v)*(1/100))*(float)sum_values_v); |
jon07 | 0:1b3a675e81b5 | 151 | //IRMS=sqrt((((float)Constant_i*(float)Constant_i)*(1/100))*(float)sum_values_i); |
jon07 | 0:1b3a675e81b5 | 152 | IRMS=sqrt(Constant_i*(float)sum_values_i); |
jon07 | 0:1b3a675e81b5 | 153 | //Pact=(((((float)Constant_v*(float)Constant_i)*(1/100))*(float)sum_values_v)*(float)sum_values_i); |
jon07 | 0:1b3a675e81b5 | 154 | Pact=202.63*sum_values_pa; |
jon07 | 0:1b3a675e81b5 | 155 | EnergiActiva=EnergiActiva+Pact*20e-3/(3600*1000); //kWh |
jon07 | 0:1b3a675e81b5 | 156 | Paparente=VRMS*IRMS; |
jon07 | 0:1b3a675e81b5 | 157 | Preactiva=sqrt((Paparente*Paparente)-(Pact*Pact)); |
jon07 | 0:1b3a675e81b5 | 158 | EnergiaReactiva=EnergiaReactiva+Preactiva*20e-3/(3600*1000); |
jon07 | 0:1b3a675e81b5 | 159 | cosPHI=Pact/Paparente; |
jon07 | 0:1b3a675e81b5 | 160 | precio=EnergiActiva*dato_p; |
jon07 | 0:1b3a675e81b5 | 161 | |
jon07 | 0:1b3a675e81b5 | 162 | } |
jon07 | 0:1b3a675e81b5 | 163 | } |
jon07 | 0:1b3a675e81b5 | 164 | |
jon07 | 0:1b3a675e81b5 | 165 |