Unidos pela Paes / Mbed 2 deprecated tarefa1

Dependencies:   mbed

Fork of tarefa1 by Pedro Mendes

Committer:
pmcmendes
Date:
Thu Mar 12 11:13:20 2015 +0000
Revision:
0:cce430bf36f7
Child:
1:6e573b77c775
Oi

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
pmcmendes 0:cce430bf36f7 10 #define TAM_VALORES_MEDIA_AMPLITUDE 10
pmcmendes 0:cce430bf36f7 11
pmcmendes 0:cce430bf36f7 12
pmcmendes 0:cce430bf36f7 13 Ticker flipper;
pmcmendes 0:cce430bf36f7 14 AnalogIn ain0(PTB0);
pmcmendes 0:cce430bf36f7 15 AnalogIn ain1(PTB1);
pmcmendes 0:cce430bf36f7 16 DigitalOut myled(LED1);
pmcmendes 0:cce430bf36f7 17 int aux2 = 0; // Variavel auxiliar, para indicar quando realizar uma amostragem
pmcmendes 0:cce430bf36f7 18
pmcmendes 0:cce430bf36f7 19 void flip() {
pmcmendes 0:cce430bf36f7 20 aux2 = !aux2;
pmcmendes 0:cce430bf36f7 21 }
pmcmendes 0:cce430bf36f7 22
pmcmendes 0:cce430bf36f7 23 int compare (const void* a, const void * b) {
pmcmendes 0:cce430bf36f7 24
pmcmendes 0:cce430bf36f7 25 float int *ia = (const float *) a;
pmcmendes 0:cce430bf36f7 26
pmcmendes 0:cce430bf36f7 27 float int *ib = (const float *) b;
pmcmendes 0:cce430bf36f7 28
pmcmendes 0:cce430bf36f7 29 if (*ia > *ib) return 0;
pmcmendes 0:cce430bf36f7 30
pmcmendes 0:cce430bf36f7 31 if (*ia > *ib) return -1;
pmcmendes 0:cce430bf36f7 32
pmcmendes 0:cce430bf36f7 33 else return 1;
pmcmendes 0:cce430bf36f7 34
pmcmendes 0:cce430bf36f7 35 }
pmcmendes 0:cce430bf36f7 36
pmcmendes 0:cce430bf36f7 37 float calculaMedia(float *vetorValores, int tamVetorValores) {
pmcmendes 0:cce430bf36f7 38
pmcmendes 0:cce430bf36f7 39 float soma = 0;
pmcmendes 0:cce430bf36f7 40
pmcmendes 0:cce430bf36f7 41 for (int i = 0; i < tamValores; i++) {
pmcmendes 0:cce430bf36f7 42
pmcmendes 0:cce430bf36f7 43 soma += vetorValores[i];
pmcmendes 0:cce430bf36f7 44
pmcmendes 0:cce430bf36f7 45 }
pmcmendes 0:cce430bf36f7 46
pmcmendes 0:cce430bf36f7 47 return (soma / tamVetorValores);
pmcmendes 0:cce430bf36f7 48
pmcmendes 0:cce430bf36f7 49 }
pmcmendes 0:cce430bf36f7 50
pmcmendes 0:cce430bf36f7 51 double calculaTensaoACSenoidal(float * vetorMedidas, int tamVetorMedidas) {
pmcmendes 0:cce430bf36f7 52
pmcmendes 0:cce430bf36f7 53 const int tamValores = TAM_VALORES_MEDIA_AMPLITUDE;
pmcmendes 0:cce430bf36f7 54
pmcmendes 0:cce430bf36f7 55 float valoresMaximos[tamValores];
pmcmendes 0:cce430bf36f7 56
pmcmendes 0:cce430bf36f7 57 float valoresMinimos[tamValores];
pmcmendes 0:cce430bf36f7 58
pmcmendes 0:cce430bf36f7 59 float mediaValoresMaximos, mediaValoresMinimos;
pmcmendes 0:cce430bf36f7 60
pmcmendes 0:cce430bf36f7 61 qsort(vetorMedidas, tamVetorMedidas, sizeof(float), compare);
pmcmendes 0:cce430bf36f7 62
pmcmendes 0:cce430bf36f7 63
pmcmendes 0:cce430bf36f7 64
pmcmendes 0:cce430bf36f7 65 for (int i = 0; i < tamValores; i++) {
pmcmendes 0:cce430bf36f7 66
pmcmendes 0:cce430bf36f7 67 valoresMaximos[i] = vetorMedidas[i];
pmcmendes 0:cce430bf36f7 68
pmcmendes 0:cce430bf36f7 69 valoresMinimos[i] = vetorMedidas[(tamVetorMedidas - 1) - i];
pmcmendes 0:cce430bf36f7 70
pmcmendes 0:cce430bf36f7 71 }
pmcmendes 0:cce430bf36f7 72
pmcmendes 0:cce430bf36f7 73 mediaValoresMaximos = calculaMedia(valoresMaximos, tamValores);
pmcmendes 0:cce430bf36f7 74
pmcmendes 0:cce430bf36f7 75 mediaValoresMinimos = calculaMedia(valoresMinimos, tamValores);
pmcmendes 0:cce430bf36f7 76
pmcmendes 0:cce430bf36f7 77 float amplitude = abs(mediaValoresMaximos - mediaValoresMinimos);
pmcmendes 0:cce430bf36f7 78
pmcmendes 0:cce430bf36f7 79 return amplitude / 1.414;
pmcmendes 0:cce430bf36f7 80
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 // main.c
pmcmendes 0:cce430bf36f7 122
pmcmendes 0:cce430bf36f7 123 // Tarefa1-CircLab
pmcmendes 0:cce430bf36f7 124
pmcmendes 0:cce430bf36f7 125 //
pmcmendes 0:cce430bf36f7 126
pmcmendes 0:cce430bf36f7 127 // Created by João Soares on 3/10/15.
pmcmendes 0:cce430bf36f7 128
pmcmendes 0:cce430bf36f7 129 // Copyright (c) 2015 João Soares. All rights reserved.
pmcmendes 0:cce430bf36f7 130
pmcmendes 0:cce430bf36f7 131 //
pmcmendes 0:cce430bf36f7 132
pmcmendes 0:cce430bf36f7 133 // Mede dois sinais
pmcmendes 0:cce430bf36f7 134
pmcmendes 0:cce430bf36f7 135 #include <stdio.h>
pmcmendes 0:cce430bf36f7 136
pmcmendes 0:cce430bf36f7 137 #include <stdlib.h>
pmcmendes 0:cce430bf36f7 138
pmcmendes 0:cce430bf36f7 139 #include "math.h" // Descomente esta linha caso queira usar funções como sin(x)
pmcmendes 0:cce430bf36f7 140
pmcmendes 0:cce430bf36f7 141 #define ESCALA_DE_TENSAO 3.3
pmcmendes 0:cce430bf36f7 142
pmcmendes 0:cce430bf36f7 143 #define TAM_VALORES_MEDIA_AMPLITUDE 10
pmcmendes 0:cce430bf36f7 144
pmcmendes 0:cce430bf36f7 145 int compare (const void* a, const void * b) {
pmcmendes 0:cce430bf36f7 146
pmcmendes 0:cce430bf36f7 147 const float *ia = (const float *) a;
pmcmendes 0:cce430bf36f7 148
pmcmendes 0:cce430bf36f7 149 const float *ib = (const float *) b;
pmcmendes 0:cce430bf36f7 150
pmcmendes 0:cce430bf36f7 151
pmcmendes 0:cce430bf36f7 152
pmcmendes 0:cce430bf36f7 153 if (*ia < *ib) return 1;
pmcmendes 0:cce430bf36f7 154
pmcmendes 0:cce430bf36f7 155 if (*ia > *ib) return -1;
pmcmendes 0:cce430bf36f7 156
pmcmendes 0:cce430bf36f7 157 else return 0;
pmcmendes 0:cce430bf36f7 158
pmcmendes 0:cce430bf36f7 159 }
pmcmendes 0:cce430bf36f7 160
pmcmendes 0:cce430bf36f7 161 float calculaMedia(float *vetorValores, int tamVetorValores) {
pmcmendes 0:cce430bf36f7 162
pmcmendes 0:cce430bf36f7 163 float soma = 0;
pmcmendes 0:cce430bf36f7 164
pmcmendes 0:cce430bf36f7 165 for (int i = 0; i < tamVetorValores; i++) {
pmcmendes 0:cce430bf36f7 166
pmcmendes 0:cce430bf36f7 167 soma += vetorValores[i];
pmcmendes 0:cce430bf36f7 168
pmcmendes 0:cce430bf36f7 169 }
pmcmendes 0:cce430bf36f7 170
pmcmendes 0:cce430bf36f7 171 return (soma / tamVetorValores);
pmcmendes 0:cce430bf36f7 172
pmcmendes 0:cce430bf36f7 173 }
pmcmendes 0:cce430bf36f7 174
pmcmendes 0:cce430bf36f7 175 double calculaTensaoACSenoidal(float * vetorMedidas, int tamVetorMedidas) {
pmcmendes 0:cce430bf36f7 176
pmcmendes 0:cce430bf36f7 177 const int tamValores = TAM_VALORES_MEDIA_AMPLITUDE;
pmcmendes 0:cce430bf36f7 178
pmcmendes 0:cce430bf36f7 179 float valoresMaximos[tamValores];
pmcmendes 0:cce430bf36f7 180
pmcmendes 0:cce430bf36f7 181 float valoresMinimos[tamValores];
pmcmendes 0:cce430bf36f7 182
pmcmendes 0:cce430bf36f7 183 float mediaValoresMaximos, mediaValoresMinimos;
pmcmendes 0:cce430bf36f7 184
pmcmendes 0:cce430bf36f7 185
pmcmendes 0:cce430bf36f7 186
pmcmendes 0:cce430bf36f7 187 qsort(vetorMedidas, tamVetorMedidas, sizeof(float), compare);
pmcmendes 0:cce430bf36f7 188
pmcmendes 0:cce430bf36f7 189
pmcmendes 0:cce430bf36f7 190
pmcmendes 0:cce430bf36f7 191 for (int i = 0; i < tamValores; i++) {
pmcmendes 0:cce430bf36f7 192
pmcmendes 0:cce430bf36f7 193 valoresMaximos[i] = vetorMedidas[i];
pmcmendes 0:cce430bf36f7 194
pmcmendes 0:cce430bf36f7 195 valoresMinimos[i] = vetorMedidas[(tamVetorMedidas - 1) - i];
pmcmendes 0:cce430bf36f7 196
pmcmendes 0:cce430bf36f7 197 }
pmcmendes 0:cce430bf36f7 198
pmcmendes 0:cce430bf36f7 199
pmcmendes 0:cce430bf36f7 200
pmcmendes 0:cce430bf36f7 201 mediaValoresMaximos = calculaMedia(valoresMaximos, tamValores);
pmcmendes 0:cce430bf36f7 202
pmcmendes 0:cce430bf36f7 203 mediaValoresMinimos = calculaMedia(valoresMinimos, tamValores);
pmcmendes 0:cce430bf36f7 204
pmcmendes 0:cce430bf36f7 205
pmcmendes 0:cce430bf36f7 206
pmcmendes 0:cce430bf36f7 207 float amplitude = (mediaValoresMaximos - mediaValoresMinimos) * ESCALA_DE_TENSAO;
pmcmendes 0:cce430bf36f7 208
pmcmendes 0:cce430bf36f7 209 float tensaoEficaz = amplitude / 1.414;
pmcmendes 0:cce430bf36f7 210
pmcmendes 0:cce430bf36f7 211
pmcmendes 0:cce430bf36f7 212
pmcmendes 0:cce430bf36f7 213
pmcmendes 0:cce430bf36f7 214
pmcmendes 0:cce430bf36f7 215 // Para printar valores maximos e minimos
pmcmendes 0:cce430bf36f7 216
pmcmendes 0:cce430bf36f7 217 printf("Vetor de valores MAX: [");
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,", valoresMaximos[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("Vetor de valores MIN: [");
pmcmendes 0:cce430bf36f7 230
pmcmendes 0:cce430bf36f7 231 for(int i = 0; i < tamValores; i++) {
pmcmendes 0:cce430bf36f7 232
pmcmendes 0:cce430bf36f7 233 printf("%.2f, ", valoresMinimos[i]);
pmcmendes 0:cce430bf36f7 234
pmcmendes 0:cce430bf36f7 235 }
pmcmendes 0:cce430bf36f7 236
pmcmendes 0:cce430bf36f7 237 printf("]\n");
pmcmendes 0:cce430bf36f7 238
pmcmendes 0:cce430bf36f7 239
pmcmendes 0:cce430bf36f7 240
pmcmendes 0:cce430bf36f7 241 printf("Media valores MAX: %.2f\n", mediaValoresMaximos);
pmcmendes 0:cce430bf36f7 242
pmcmendes 0:cce430bf36f7 243 printf("Media valores MIN: %.2f\n", mediaValoresMinimos);
pmcmendes 0:cce430bf36f7 244
pmcmendes 0:cce430bf36f7 245
pmcmendes 0:cce430bf36f7 246
pmcmendes 0:cce430bf36f7 247 printf("Amplitude calculada em volts: %.2f\n", amplitude);
pmcmendes 0:cce430bf36f7 248
pmcmendes 0:cce430bf36f7 249 printf("Tensao eficaz de %.2f volts\n", tensaoEficaz);
pmcmendes 0:cce430bf36f7 250
pmcmendes 0:cce430bf36f7 251
pmcmendes 0:cce430bf36f7 252
pmcmendes 0:cce430bf36f7 253 return tensaoEficaz;
pmcmendes 0:cce430bf36f7 254
pmcmendes 0:cce430bf36f7 255 }
pmcmendes 0:cce430bf36f7 256
pmcmendes 0:cce430bf36f7 257 double calculaTensaoACIntegral(float *vetorMedidas, int tamVetorMedidas) {
pmcmendes 0:cce430bf36f7 258
pmcmendes 0:cce430bf36f7 259
pmcmendes 0:cce430bf36f7 260
pmcmendes 0:cce430bf36f7 261 return 0;
pmcmendes 0:cce430bf36f7 262
pmcmendes 0:cce430bf36f7 263 }
pmcmendes 0:cce430bf36f7 264
pmcmendes 0:cce430bf36f7 265
pmcmendes 0:cce430bf36f7 266
pmcmendes 0:cce430bf36f7 267