
Primer cambio codigo 20/01/2020
main.cpp@1:873f8f9b7f69, 2020-01-30 (annotated)
- Committer:
- javicas95
- Date:
- Thu Jan 30 14:12:47 2020 +0000
- Revision:
- 1:873f8f9b7f69
- Parent:
- 0:0a17318c9c22
final final
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 | 1:873f8f9b7f69 | 10 | |
javicas95 | 0:0a17318c9c22 | 11 | InterruptIn button(PC_13); |
javicas95 | 1:873f8f9b7f69 | 12 | |
javicas95 | 0:0a17318c9c22 | 13 | TextLCD lcd(D8, D9, D2, D3, D4, D5, TextLCD::LCD16x2); // rs, e, d4-d7 |
javicas95 | 1:873f8f9b7f69 | 14 | Serial pc(USBTX, USBRX); // tx, rx |
javicas95 | 1:873f8f9b7f69 | 15 | |
javicas95 | 1:873f8f9b7f69 | 16 | Serial bluetooth(PC_0, PC_1); |
javicas95 | 1:873f8f9b7f69 | 17 | |
javicas95 | 1:873f8f9b7f69 | 18 | AnalogIn adc_in(A0); |
javicas95 | 1:873f8f9b7f69 | 19 | AnalogIn adc_in_in(A2); |
javicas95 | 1:873f8f9b7f69 | 20 | AnalogIn adc_in_dos(A1); |
javicas95 | 1:873f8f9b7f69 | 21 | |
javicas95 | 0:0a17318c9c22 | 22 | void muestrear(); |
javicas95 | 0:0a17318c9c22 | 23 | void visualizar(); |
javicas95 | 0:0a17318c9c22 | 24 | int flag=0; |
javicas95 | 0:0a17318c9c22 | 25 | int contador=0; |
javicas95 | 0:0a17318c9c22 | 26 | int contador_boton=0; |
javicas95 | 0:0a17318c9c22 | 27 | bool buffer_activo=0; |
javicas95 | 0:0a17318c9c22 | 28 | struct buffer { |
javicas95 | 0:0a17318c9c22 | 29 | int16_t vA[buffer_length]; |
javicas95 | 0:0a17318c9c22 | 30 | int16_t iA[buffer_length]; |
javicas95 | 0:0a17318c9c22 | 31 | int16_t vB[buffer_length]; |
javicas95 | 0:0a17318c9c22 | 32 | int16_t iB[buffer_length]; |
javicas95 | 0:0a17318c9c22 | 33 | }; |
javicas95 | 0:0a17318c9c22 | 34 | buffer buffers; |
javicas95 | 0:0a17318c9c22 | 35 | struct estr_medidas |
javicas95 | 0:0a17318c9c22 | 36 | { |
javicas95 | 0:0a17318c9c22 | 37 | float vrms; |
javicas95 | 0:0a17318c9c22 | 38 | float irms; |
javicas95 | 0:0a17318c9c22 | 39 | float pot_activa; |
javicas95 | 0:0a17318c9c22 | 40 | float pot_reactiva; |
javicas95 | 0:0a17318c9c22 | 41 | float pot_aparente; |
javicas95 | 0:0a17318c9c22 | 42 | float en_consumida; |
javicas95 | 0:0a17318c9c22 | 43 | float fact_potencia; |
javicas95 | 0:0a17318c9c22 | 44 | }; |
javicas95 | 0:0a17318c9c22 | 45 | estr_medidas medidas; |
javicas95 | 1:873f8f9b7f69 | 46 | void procesado(int16_t *datosV, int16_t *datosI, int longi, estr_medidas *medidas) |
javicas95 | 0:0a17318c9c22 | 47 | { |
javicas95 | 0:0a17318c9c22 | 48 | int64_t b=0.0; |
javicas95 | 0:0a17318c9c22 | 49 | int64_t c=0; |
javicas95 | 0:0a17318c9c22 | 50 | int64_t d=0; |
javicas95 | 0:0a17318c9c22 | 51 | for(int j=0;j<longi;j++) |
javicas95 | 0:0a17318c9c22 | 52 | { |
javicas95 | 1:873f8f9b7f69 | 53 | b = b + datosV[j]*datosV[j]; |
javicas95 | 1:873f8f9b7f69 | 54 | c = c + datosI[j]*datosI[j]; |
javicas95 | 1:873f8f9b7f69 | 55 | d = d + datosV[j]*datosI[j]; |
javicas95 | 0:0a17318c9c22 | 56 | } |
javicas95 | 1:873f8f9b7f69 | 57 | |
javicas95 | 1:873f8f9b7f69 | 58 | |
javicas95 | 1:873f8f9b7f69 | 59 | medidas->vrms=0.01275509675*sqrt(((float)b)/longi); |
javicas95 | 1:873f8f9b7f69 | 60 | medidas->irms=0.0004536585089*sqrt(((float)c)/longi); |
javicas95 | 1:873f8f9b7f69 | 61 | medidas->pot_activa=(5.786458173e-6*d)/longi; |
javicas95 | 0:0a17318c9c22 | 62 | medidas->pot_aparente=medidas->vrms*medidas->irms; |
javicas95 | 0:0a17318c9c22 | 63 | medidas->pot_reactiva=sqrt((medidas->pot_aparente*medidas->pot_aparente)-(medidas->pot_activa*medidas->pot_activa)); |
javicas95 | 0:0a17318c9c22 | 64 | medidas->fact_potencia=((float)medidas->pot_activa)/medidas->pot_aparente; |
javicas95 | 0:0a17318c9c22 | 65 | medidas->en_consumida+=0.001*medidas->pot_activa*longi; |
javicas95 | 0:0a17318c9c22 | 66 | |
javicas95 | 1:873f8f9b7f69 | 67 | |
javicas95 | 0:0a17318c9c22 | 68 | } |
javicas95 | 0:0a17318c9c22 | 69 | void flip() { |
javicas95 | 0:0a17318c9c22 | 70 | contador_boton++; |
javicas95 | 0:0a17318c9c22 | 71 | if (contador_boton==8) |
javicas95 | 0:0a17318c9c22 | 72 | { |
javicas95 | 0:0a17318c9c22 | 73 | contador_boton=0; |
javicas95 | 0:0a17318c9c22 | 74 | } |
javicas95 | 0:0a17318c9c22 | 75 | } |
javicas95 | 0:0a17318c9c22 | 76 | int main() |
javicas95 | 0:0a17318c9c22 | 77 | { |
javicas95 | 0:0a17318c9c22 | 78 | pc.baud(115200); |
javicas95 | 1:873f8f9b7f69 | 79 | bluetooth.baud(9600); |
javicas95 | 0:0a17318c9c22 | 80 | tMuestrear.attach_us(&muestrear, 200); |
javicas95 | 0:0a17318c9c22 | 81 | tVisualizar.attach(&visualizar, 1); |
javicas95 | 1:873f8f9b7f69 | 82 | button.rise(&flip); |
javicas95 | 0:0a17318c9c22 | 83 | while(1) { |
javicas95 | 0:0a17318c9c22 | 84 | if(flag==1) { |
javicas95 | 1:873f8f9b7f69 | 85 | |
javicas95 | 0:0a17318c9c22 | 86 | flag=0; |
javicas95 | 0:0a17318c9c22 | 87 | |
javicas95 | 0:0a17318c9c22 | 88 | if(buffer_activo) { |
javicas95 | 0:0a17318c9c22 | 89 | |
javicas95 | 0:0a17318c9c22 | 90 | procesado((int16_t *) buffers.vA, (int16_t *)buffers.iA, buffer_length, &medidas); |
javicas95 | 0:0a17318c9c22 | 91 | |
javicas95 | 0:0a17318c9c22 | 92 | } else { |
javicas95 | 0:0a17318c9c22 | 93 | procesado((int16_t *)buffers.vB,(int16_t *)buffers.iB, buffer_length, &medidas); |
javicas95 | 0:0a17318c9c22 | 94 | |
javicas95 | 0:0a17318c9c22 | 95 | } |
javicas95 | 0:0a17318c9c22 | 96 | |
javicas95 | 0:0a17318c9c22 | 97 | |
javicas95 | 0:0a17318c9c22 | 98 | } |
javicas95 | 1:873f8f9b7f69 | 99 | |
javicas95 | 0:0a17318c9c22 | 100 | } |
javicas95 | 0:0a17318c9c22 | 101 | } |
javicas95 | 0:0a17318c9c22 | 102 | void muestrear() |
javicas95 | 0:0a17318c9c22 | 103 | { |
javicas95 | 0:0a17318c9c22 | 104 | int16_t datov=(int16_t)(adc_in.read_u16()^0x8000); |
javicas95 | 0:0a17318c9c22 | 105 | int16_t datoi=(int16_t)(adc_in_in.read_u16()^0x8000); |
javicas95 | 0:0a17318c9c22 | 106 | int16_t continua=(int16_t)(adc_in_dos.read_u16()^0x8000); |
javicas95 | 1:873f8f9b7f69 | 107 | if (buffer_activo==0) { |
javicas95 | 0:0a17318c9c22 | 108 | buffers.vA[contador]=datov-continua; |
javicas95 | 0:0a17318c9c22 | 109 | buffers.iA[contador]=datoi-continua; |
javicas95 | 0:0a17318c9c22 | 110 | |
javicas95 | 0:0a17318c9c22 | 111 | } else { |
javicas95 | 0:0a17318c9c22 | 112 | buffers.vB[contador]=datov-continua; |
javicas95 | 0:0a17318c9c22 | 113 | buffers.iB[contador]=datoi-continua; |
javicas95 | 0:0a17318c9c22 | 114 | |
javicas95 | 0:0a17318c9c22 | 115 | } |
javicas95 | 0:0a17318c9c22 | 116 | contador++; |
javicas95 | 0:0a17318c9c22 | 117 | if(contador==buffer_length) { |
javicas95 | 0:0a17318c9c22 | 118 | //pc.printf("2"); |
javicas95 | 0:0a17318c9c22 | 119 | contador=0; |
javicas95 | 0:0a17318c9c22 | 120 | flag=1; |
javicas95 | 0:0a17318c9c22 | 121 | buffer_activo=!buffer_activo; |
javicas95 | 0:0a17318c9c22 | 122 | } |
javicas95 | 0:0a17318c9c22 | 123 | } |
javicas95 | 0:0a17318c9c22 | 124 | void visualizar(){ |
javicas95 | 0:0a17318c9c22 | 125 | |
javicas95 | 1:873f8f9b7f69 | 126 | |
javicas95 | 0:0a17318c9c22 | 127 | pc.printf("**** El valor Vrms es %f ****\n",medidas.vrms); |
javicas95 | 0:0a17318c9c22 | 128 | pc.printf("**** El valor Irms es %f ****\n",medidas.irms); |
javicas95 | 0:0a17318c9c22 | 129 | pc.printf("**** La potencia activa es %f ****\n",medidas.pot_activa); |
javicas95 | 0:0a17318c9c22 | 130 | pc.printf("**** La potencia reactiva es %f ****\n",medidas.pot_reactiva); |
javicas95 | 0:0a17318c9c22 | 131 | pc.printf("**** La potencia aparente es %f ****\n",medidas.pot_aparente); |
javicas95 | 0:0a17318c9c22 | 132 | pc.printf("**** La energia consumida es %f ****\n",medidas.en_consumida); |
javicas95 | 0:0a17318c9c22 | 133 | pc.printf("**** El factor de potencia es es %f ****\n\n",medidas.fact_potencia); |
javicas95 | 0:0a17318c9c22 | 134 | |
javicas95 | 0:0a17318c9c22 | 135 | switch (contador_boton){ |
javicas95 | 0:0a17318c9c22 | 136 | case 1: |
javicas95 | 0:0a17318c9c22 | 137 | |
javicas95 | 0:0a17318c9c22 | 138 | lcd.cls(); |
javicas95 | 0:0a17318c9c22 | 139 | lcd.printf("Vrms:\n%3.4f V\n", medidas.vrms); |
javicas95 | 0:0a17318c9c22 | 140 | break; |
javicas95 | 0:0a17318c9c22 | 141 | |
javicas95 | 0:0a17318c9c22 | 142 | case 2: |
javicas95 | 0:0a17318c9c22 | 143 | |
javicas95 | 0:0a17318c9c22 | 144 | lcd.cls(); |
javicas95 | 0:0a17318c9c22 | 145 | lcd.printf("Irms:\n%3.2f A\n", medidas.irms); |
javicas95 | 0:0a17318c9c22 | 146 | break; |
javicas95 | 0:0a17318c9c22 | 147 | |
javicas95 | 0:0a17318c9c22 | 148 | case 3: |
javicas95 | 0:0a17318c9c22 | 149 | |
javicas95 | 0:0a17318c9c22 | 150 | lcd.cls(); |
javicas95 | 0:0a17318c9c22 | 151 | lcd.printf("Pot activa\n%3.2f W\n", medidas.pot_activa); |
javicas95 | 0:0a17318c9c22 | 152 | break; |
javicas95 | 1:873f8f9b7f69 | 153 | |
javicas95 | 0:0a17318c9c22 | 154 | case 4: |
javicas95 | 0:0a17318c9c22 | 155 | |
javicas95 | 0:0a17318c9c22 | 156 | lcd.cls(); |
javicas95 | 0:0a17318c9c22 | 157 | lcd.printf("Pot reactiva\n%3.2f VAr\n", medidas.pot_reactiva); |
javicas95 | 0:0a17318c9c22 | 158 | break; |
javicas95 | 0:0a17318c9c22 | 159 | |
javicas95 | 0:0a17318c9c22 | 160 | case 5: |
javicas95 | 0:0a17318c9c22 | 161 | |
javicas95 | 0:0a17318c9c22 | 162 | lcd.cls(); |
javicas95 | 0:0a17318c9c22 | 163 | lcd.printf("Pot aparente\n%3.2f VA\n", medidas.pot_aparente); |
javicas95 | 0:0a17318c9c22 | 164 | break; |
javicas95 | 1:873f8f9b7f69 | 165 | |
javicas95 | 0:0a17318c9c22 | 166 | case 6: |
javicas95 | 0:0a17318c9c22 | 167 | |
javicas95 | 0:0a17318c9c22 | 168 | lcd.cls(); |
javicas95 | 1:873f8f9b7f69 | 169 | lcd.printf("En consumida\n%3.2f kW\n", medidas.en_consumida); |
javicas95 | 0:0a17318c9c22 | 170 | break; |
javicas95 | 1:873f8f9b7f69 | 171 | |
javicas95 | 0:0a17318c9c22 | 172 | case 7: |
javicas95 | 0:0a17318c9c22 | 173 | |
javicas95 | 0:0a17318c9c22 | 174 | lcd.cls(); |
javicas95 | 1:873f8f9b7f69 | 175 | lcd.printf("Fact potencia\n%3.2f\n", medidas.fact_potencia); |
javicas95 | 0:0a17318c9c22 | 176 | break; |
javicas95 | 0:0a17318c9c22 | 177 | default: |
javicas95 | 0:0a17318c9c22 | 178 | lcd.cls(); |
javicas95 | 1:873f8f9b7f69 | 179 | lcd.printf("Pulsar boton"); |
javicas95 | 0:0a17318c9c22 | 180 | } |
javicas95 | 0:0a17318c9c22 | 181 | bluetooth.printf("%3.2f|%3.2f|%3.2f|%3.2f|%3.2f|%3.2f|%3.2f|\n",medidas.vrms, |
javicas95 | 1:873f8f9b7f69 | 182 | medidas.irms,medidas.pot_activa,medidas.pot_reactiva, |
javicas95 | 1:873f8f9b7f69 | 183 | medidas.pot_aparente,medidas.en_consumida,medidas.fact_potencia); |
javicas95 | 0:0a17318c9c22 | 184 | } |