Unidos pela Paes / Mbed 2 deprecated tarefa1

Dependencies:   mbed

Fork of tarefa1 by Pedro Mendes

Committer:
pmcmendes
Date:
Thu Mar 12 11:23:50 2015 +0000
Revision:
1:6e573b77c775
Parent:
0:cce430bf36f7
Child:
2:7476f7336e9a
fix program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pmcmendes 0:cce430bf36f7 1 // Mede dois sinais
pmcmendes 0:cce430bf36f7 2 #include <stdio.h>
pmcmendes 0:cce430bf36f7 3
pmcmendes 0:cce430bf36f7 4 #include <stdlib.h>
pmcmendes 0:cce430bf36f7 5 #include "mbed.h"
pmcmendes 0:cce430bf36f7 6 #include "math.h" // Descomente esta linha caso queira usar funções como sin(x)
pmcmendes 0:cce430bf36f7 7
pmcmendes 0:cce430bf36f7 8 #define ESCALA_DE_TENSAO 3.3
pmcmendes 0:cce430bf36f7 9 #define TAM_VALORES_MEDIA_AMPLITUDE 10
pmcmendes 0:cce430bf36f7 10
pmcmendes 0:cce430bf36f7 11
pmcmendes 0:cce430bf36f7 12 Ticker flipper;
pmcmendes 0:cce430bf36f7 13 AnalogIn ain0(PTB0);
pmcmendes 0:cce430bf36f7 14 AnalogIn ain1(PTB1);
pmcmendes 0:cce430bf36f7 15 DigitalOut myled(LED1);
pmcmendes 0:cce430bf36f7 16 int aux2 = 0; // Variavel auxiliar, para indicar quando realizar uma amostragem
pmcmendes 0:cce430bf36f7 17
pmcmendes 0:cce430bf36f7 18 void flip() {
pmcmendes 0:cce430bf36f7 19 aux2 = !aux2;
pmcmendes 0:cce430bf36f7 20 }
pmcmendes 0:cce430bf36f7 21
pmcmendes 0:cce430bf36f7 22 int compare (const void* a, const void * b) {
pmcmendes 1:6e573b77c775 23 const float *ia = (const float *) a;
pmcmendes 1:6e573b77c775 24 const float *ib = (const float *) b;
pmcmendes 1:6e573b77c775 25
pmcmendes 1:6e573b77c775 26 if (*ia < *ib) return 1;
pmcmendes 0:cce430bf36f7 27 if (*ia > *ib) return -1;
pmcmendes 1:6e573b77c775 28 else return 0;
pmcmendes 0:cce430bf36f7 29 }
pmcmendes 0:cce430bf36f7 30
pmcmendes 0:cce430bf36f7 31 float calculaMedia(float *vetorValores, int tamVetorValores) {
pmcmendes 0:cce430bf36f7 32 float soma = 0;
pmcmendes 1:6e573b77c775 33 for (int i = 0; i < tamVetorValores; i++) {
pmcmendes 0:cce430bf36f7 34 soma += vetorValores[i];
pmcmendes 0:cce430bf36f7 35 }
pmcmendes 0:cce430bf36f7 36
pmcmendes 0:cce430bf36f7 37 return (soma / tamVetorValores);
pmcmendes 0:cce430bf36f7 38 }
pmcmendes 0:cce430bf36f7 39
pmcmendes 0:cce430bf36f7 40 double calculaTensaoACSenoidal(float * vetorMedidas, int tamVetorMedidas) {
pmcmendes 0:cce430bf36f7 41 const int tamValores = TAM_VALORES_MEDIA_AMPLITUDE;
pmcmendes 0:cce430bf36f7 42 float valoresMaximos[tamValores];
pmcmendes 0:cce430bf36f7 43 float valoresMinimos[tamValores];
pmcmendes 0:cce430bf36f7 44 float mediaValoresMaximos, mediaValoresMinimos;
pmcmendes 1:6e573b77c775 45
pmcmendes 0:cce430bf36f7 46 qsort(vetorMedidas, tamVetorMedidas, sizeof(float), compare);
pmcmendes 0:cce430bf36f7 47
pmcmendes 0:cce430bf36f7 48 for (int i = 0; i < tamValores; i++) {
pmcmendes 0:cce430bf36f7 49 valoresMaximos[i] = vetorMedidas[i];
pmcmendes 0:cce430bf36f7 50 valoresMinimos[i] = vetorMedidas[(tamVetorMedidas - 1) - i];
pmcmendes 0:cce430bf36f7 51 }
pmcmendes 0:cce430bf36f7 52
pmcmendes 0:cce430bf36f7 53 mediaValoresMaximos = calculaMedia(valoresMaximos, tamValores);
pmcmendes 0:cce430bf36f7 54 mediaValoresMinimos = calculaMedia(valoresMinimos, tamValores);
pmcmendes 0:cce430bf36f7 55
pmcmendes 1:6e573b77c775 56 float amplitude = (mediaValoresMaximos - mediaValoresMinimos) * ESCALA_DE_TENSAO;
pmcmendes 1:6e573b77c775 57 float tensaoEficaz = amplitude / 1.414;
pmcmendes 0:cce430bf36f7 58
pmcmendes 1:6e573b77c775 59 // Para printar valores maximos e minimos
pmcmendes 1:6e573b77c775 60 printf("Vetor de valores MAX: [");
pmcmendes 1:6e573b77c775 61 for(int i = 0; i < tamValores; i++) {
pmcmendes 1:6e573b77c775 62 printf(" %.2f,", valoresMaximos[i]);
pmcmendes 1:6e573b77c775 63 }
pmcmendes 1:6e573b77c775 64 printf("]\n");
pmcmendes 1:6e573b77c775 65 printf("Vetor de valores MIN: [");
pmcmendes 1:6e573b77c775 66 for(int i = 0; i < tamValores; i++) {
pmcmendes 1:6e573b77c775 67 printf("%.2f, ", valoresMinimos[i]);
pmcmendes 1:6e573b77c775 68 }
pmcmendes 1:6e573b77c775 69 printf("]\n");
pmcmendes 1:6e573b77c775 70 printf("Media valores MAX: %.2f\n", mediaValoresMaximos);
pmcmendes 1:6e573b77c775 71 printf("Media valores MIN: %.2f\n", mediaValoresMinimos);
pmcmendes 1:6e573b77c775 72 printf("Amplitude calculada em volts: %.2f\n", amplitude);
pmcmendes 1:6e573b77c775 73 printf("Tensao eficaz de %.2f volts\n", tensaoEficaz);
pmcmendes 0:cce430bf36f7 74
pmcmendes 1:6e573b77c775 75 return tensaoEficaz;
pmcmendes 1:6e573b77c775 76 }
pmcmendes 1:6e573b77c775 77
pmcmendes 1:6e573b77c775 78 double calculaTensaoACIntegral(float *vetorMedidas, int tamVetorMedidas) {
pmcmendes 1:6e573b77c775 79
pmcmendes 1:6e573b77c775 80 return 0;
pmcmendes 0:cce430bf36f7 81 }
pmcmendes 0:cce430bf36f7 82
pmcmendes 0:cce430bf36f7 83 int main()
pmcmendes 0:cce430bf36f7 84 { // valor mínimo de ts: ~0.0001 (10 kHz)
pmcmendes 0:cce430bf36f7 85 int contador = 0, tamanho=1000, opçao; // Tamanho dos vetores de amostras.
pmcmendes 0:cce430bf36f7 86 float ts = 0.0001, sinal0[tamanho], sinal1[tamanho], n1= 0, sinalDC;
pmcmendes 0:cce430bf36f7 87
pmcmendes 0:cce430bf36f7 88 myled = 0; // Acende led
pmcmendes 0:cce430bf36f7 89 flipper.attach(&flip, ts); // chama a funcao flip apos ts segundos
pmcmendes 0:cce430bf36f7 90 while(contador<tamanho) {
pmcmendes 0:cce430bf36f7 91 if(aux2 == 1){
pmcmendes 0:cce430bf36f7 92 sinal0[contador] = ain0; // lê sinais analógicos de dois canais
pmcmendes 0:cce430bf36f7 93 sinal1[contador] = ain1;
pmcmendes 0:cce430bf36f7 94 aux2 = 0;
pmcmendes 0:cce430bf36f7 95 n1 += sinal1[contador];
pmcmendes 0:cce430bf36f7 96 contador++;
pmcmendes 0:cce430bf36f7 97 }
pmcmendes 0:cce430bf36f7 98 }
pmcmendes 0:cce430bf36f7 99
pmcmendes 0:cce430bf36f7 100 sinalDC = n1/tamanho * ESCALA_DE_TENSAO;
pmcmendes 0:cce430bf36f7 101
pmcmendes 0:cce430bf36f7 102 flipper.detach(); /* para o ticker */
pmcmendes 0:cce430bf36f7 103 myled = 1;
pmcmendes 0:cce430bf36f7 104
pmcmendes 0:cce430bf36f7 105 while (1){
pmcmendes 0:cce430bf36f7 106 printf ("A tensão DC é: %f ", sinalDC);
pmcmendes 0:cce430bf36f7 107
pmcmendes 0:cce430bf36f7 108
pmcmendes 0:cce430bf36f7 109 printf ("A tensão AC é: %f.2", calculaTensaoACSenoidal(&sinal0, tamanho);
pmcmendes 0:cce430bf36f7 110
pmcmendes 0:cce430bf36f7 111 }
pmcmendes 0:cce430bf36f7 112
pmcmendes 0:cce430bf36f7 113 // Apaga led quando termina
pmcmendes 0:cce430bf36f7 114 // Coloque aqui o seu programa para tratamento dos dados.
pmcmendes 0:cce430bf36f7 115 }
pmcmendes 0:cce430bf36f7 116
pmcmendes 0:cce430bf36f7 117
pmcmendes 0:cce430bf36f7 118
pmcmendes 0:cce430bf36f7 119 //
pmcmendes 0:cce430bf36f7 120
pmcmendes 0:cce430bf36f7 121 // Mede dois sinais
pmcmendes 0:cce430bf36f7 122
pmcmendes 0:cce430bf36f7 123 #include <stdio.h>
pmcmendes 0:cce430bf36f7 124
pmcmendes 0:cce430bf36f7 125 #include <stdlib.h>
pmcmendes 0:cce430bf36f7 126
pmcmendes 0:cce430bf36f7 127 #include "math.h" // Descomente esta linha caso queira usar funções como sin(x)
pmcmendes 0:cce430bf36f7 128
pmcmendes 0:cce430bf36f7 129 #define ESCALA_DE_TENSAO 3.3
pmcmendes 0:cce430bf36f7 130
pmcmendes 0:cce430bf36f7 131 #define TAM_VALORES_MEDIA_AMPLITUDE 10
pmcmendes 0:cce430bf36f7 132
pmcmendes 0:cce430bf36f7 133 int compare (const void* a, const void * b) {
pmcmendes 0:cce430bf36f7 134
pmcmendes 0:cce430bf36f7 135 const float *ia = (const float *) a;
pmcmendes 0:cce430bf36f7 136
pmcmendes 0:cce430bf36f7 137 const float *ib = (const float *) b;
pmcmendes 0:cce430bf36f7 138
pmcmendes 0:cce430bf36f7 139
pmcmendes 0:cce430bf36f7 140
pmcmendes 0:cce430bf36f7 141 if (*ia < *ib) return 1;
pmcmendes 0:cce430bf36f7 142
pmcmendes 0:cce430bf36f7 143 if (*ia > *ib) return -1;
pmcmendes 0:cce430bf36f7 144
pmcmendes 0:cce430bf36f7 145 else return 0;
pmcmendes 0:cce430bf36f7 146
pmcmendes 0:cce430bf36f7 147 }
pmcmendes 0:cce430bf36f7 148
pmcmendes 0:cce430bf36f7 149 float calculaMedia(float *vetorValores, int tamVetorValores) {
pmcmendes 0:cce430bf36f7 150
pmcmendes 0:cce430bf36f7 151 float soma = 0;
pmcmendes 0:cce430bf36f7 152
pmcmendes 0:cce430bf36f7 153 for (int i = 0; i < tamVetorValores; i++) {
pmcmendes 0:cce430bf36f7 154
pmcmendes 0:cce430bf36f7 155 soma += vetorValores[i];
pmcmendes 0:cce430bf36f7 156
pmcmendes 0:cce430bf36f7 157 }
pmcmendes 0:cce430bf36f7 158
pmcmendes 0:cce430bf36f7 159 return (soma / tamVetorValores);
pmcmendes 0:cce430bf36f7 160
pmcmendes 0:cce430bf36f7 161 }
pmcmendes 0:cce430bf36f7 162
pmcmendes 0:cce430bf36f7 163 double calculaTensaoACSenoidal(float * vetorMedidas, int tamVetorMedidas) {
pmcmendes 0:cce430bf36f7 164
pmcmendes 0:cce430bf36f7 165 const int tamValores = TAM_VALORES_MEDIA_AMPLITUDE;
pmcmendes 0:cce430bf36f7 166
pmcmendes 0:cce430bf36f7 167 float valoresMaximos[tamValores];
pmcmendes 0:cce430bf36f7 168
pmcmendes 0:cce430bf36f7 169 float valoresMinimos[tamValores];
pmcmendes 0:cce430bf36f7 170
pmcmendes 0:cce430bf36f7 171 float mediaValoresMaximos, mediaValoresMinimos;
pmcmendes 0:cce430bf36f7 172
pmcmendes 0:cce430bf36f7 173
pmcmendes 0:cce430bf36f7 174
pmcmendes 0:cce430bf36f7 175 qsort(vetorMedidas, tamVetorMedidas, sizeof(float), compare);
pmcmendes 0:cce430bf36f7 176
pmcmendes 0:cce430bf36f7 177
pmcmendes 0:cce430bf36f7 178
pmcmendes 0:cce430bf36f7 179 for (int i = 0; i < tamValores; i++) {
pmcmendes 0:cce430bf36f7 180
pmcmendes 0:cce430bf36f7 181 valoresMaximos[i] = vetorMedidas[i];
pmcmendes 0:cce430bf36f7 182
pmcmendes 0:cce430bf36f7 183 valoresMinimos[i] = vetorMedidas[(tamVetorMedidas - 1) - i];
pmcmendes 0:cce430bf36f7 184
pmcmendes 0:cce430bf36f7 185 }
pmcmendes 0:cce430bf36f7 186
pmcmendes 0:cce430bf36f7 187
pmcmendes 0:cce430bf36f7 188
pmcmendes 0:cce430bf36f7 189 mediaValoresMaximos = calculaMedia(valoresMaximos, tamValores);
pmcmendes 0:cce430bf36f7 190
pmcmendes 0:cce430bf36f7 191 mediaValoresMinimos = calculaMedia(valoresMinimos, tamValores);
pmcmendes 0:cce430bf36f7 192
pmcmendes 0:cce430bf36f7 193
pmcmendes 0:cce430bf36f7 194
pmcmendes 0:cce430bf36f7 195 float amplitude = (mediaValoresMaximos - mediaValoresMinimos) * ESCALA_DE_TENSAO;
pmcmendes 0:cce430bf36f7 196
pmcmendes 0:cce430bf36f7 197 float tensaoEficaz = amplitude / 1.414;
pmcmendes 0:cce430bf36f7 198
pmcmendes 0:cce430bf36f7 199
pmcmendes 0:cce430bf36f7 200
pmcmendes 0:cce430bf36f7 201
pmcmendes 0:cce430bf36f7 202
pmcmendes 0:cce430bf36f7 203 // Para printar valores maximos e minimos
pmcmendes 0:cce430bf36f7 204
pmcmendes 0:cce430bf36f7 205 printf("Vetor de valores MAX: [");
pmcmendes 0:cce430bf36f7 206
pmcmendes 0:cce430bf36f7 207 for(int i = 0; i < tamValores; i++) {
pmcmendes 0:cce430bf36f7 208
pmcmendes 0:cce430bf36f7 209 printf(" %.2f,", valoresMaximos[i]);
pmcmendes 0:cce430bf36f7 210
pmcmendes 0:cce430bf36f7 211 }
pmcmendes 0:cce430bf36f7 212
pmcmendes 0:cce430bf36f7 213 printf("]\n");
pmcmendes 0:cce430bf36f7 214
pmcmendes 0:cce430bf36f7 215
pmcmendes 0:cce430bf36f7 216
pmcmendes 0:cce430bf36f7 217 printf("Vetor de valores MIN: [");
pmcmendes 0:cce430bf36f7 218
pmcmendes 0:cce430bf36f7 219 for(int i = 0; i < tamValores; i++) {
pmcmendes 0:cce430bf36f7 220
pmcmendes 0:cce430bf36f7 221 printf("%.2f, ", valoresMinimos[i]);
pmcmendes 0:cce430bf36f7 222
pmcmendes 0:cce430bf36f7 223 }
pmcmendes 0:cce430bf36f7 224
pmcmendes 0:cce430bf36f7 225 printf("]\n");
pmcmendes 0:cce430bf36f7 226
pmcmendes 0:cce430bf36f7 227
pmcmendes 0:cce430bf36f7 228
pmcmendes 0:cce430bf36f7 229 printf("Media valores MAX: %.2f\n", mediaValoresMaximos);
pmcmendes 0:cce430bf36f7 230
pmcmendes 0:cce430bf36f7 231 printf("Media valores MIN: %.2f\n", mediaValoresMinimos);
pmcmendes 0:cce430bf36f7 232
pmcmendes 0:cce430bf36f7 233
pmcmendes 0:cce430bf36f7 234
pmcmendes 0:cce430bf36f7 235 printf("Amplitude calculada em volts: %.2f\n", amplitude);
pmcmendes 0:cce430bf36f7 236
pmcmendes 0:cce430bf36f7 237 printf("Tensao eficaz de %.2f volts\n", tensaoEficaz);
pmcmendes 0:cce430bf36f7 238
pmcmendes 0:cce430bf36f7 239
pmcmendes 0:cce430bf36f7 240
pmcmendes 0:cce430bf36f7 241 return tensaoEficaz;
pmcmendes 0:cce430bf36f7 242
pmcmendes 0:cce430bf36f7 243 }
pmcmendes 0:cce430bf36f7 244
pmcmendes 0:cce430bf36f7 245 double calculaTensaoACIntegral(float *vetorMedidas, int tamVetorMedidas) {
pmcmendes 0:cce430bf36f7 246
pmcmendes 0:cce430bf36f7 247
pmcmendes 0:cce430bf36f7 248
pmcmendes 0:cce430bf36f7 249 return 0;
pmcmendes 0:cce430bf36f7 250
pmcmendes 0:cce430bf36f7 251 }
pmcmendes 0:cce430bf36f7 252
pmcmendes 0:cce430bf36f7 253
pmcmendes 0:cce430bf36f7 254
pmcmendes 0:cce430bf36f7 255