Unidos pela Paes / Mbed 2 deprecated tarefa1

Dependencies:   mbed

Fork of tarefa1 by Pedro Mendes

Committer:
pmcmendes
Date:
Thu Mar 12 13:50:57 2015 +0000
Revision:
3:14310c47674c
Parent:
2:7476f7336e9a
Child:
4:ee911115dcb6
before change to struct

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 3:14310c47674c 11 Timer t;
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 3:14310c47674c 18 typedef struct {
pmcmendes 3:14310c47674c 19 float valorMedido;
pmcmendes 3:14310c47674c 20 float tempo;
pmcmendes 3:14310c47674c 21 } Medida;
pmcmendes 3:14310c47674c 22
pmcmendes 0:cce430bf36f7 23 void flip() {
pmcmendes 0:cce430bf36f7 24 aux2 = !aux2;
pmcmendes 0:cce430bf36f7 25 }
pmcmendes 0:cce430bf36f7 26
pmcmendes 0:cce430bf36f7 27 int compare (const void* a, const void * b) {
pmcmendes 1:6e573b77c775 28 const float *ia = (const float *) a;
pmcmendes 1:6e573b77c775 29 const float *ib = (const float *) b;
pmcmendes 1:6e573b77c775 30
pmcmendes 1:6e573b77c775 31 if (*ia < *ib) return 1;
pmcmendes 0:cce430bf36f7 32 if (*ia > *ib) return -1;
pmcmendes 1:6e573b77c775 33 else return 0;
pmcmendes 0:cce430bf36f7 34 }
pmcmendes 0:cce430bf36f7 35
pmcmendes 0:cce430bf36f7 36 float calculaMedia(float *vetorValores, int tamVetorValores) {
pmcmendes 0:cce430bf36f7 37 float soma = 0;
pmcmendes 1:6e573b77c775 38 for (int i = 0; i < tamVetorValores; i++) {
pmcmendes 0:cce430bf36f7 39 soma += vetorValores[i];
pmcmendes 0:cce430bf36f7 40 }
pmcmendes 0:cce430bf36f7 41
pmcmendes 0:cce430bf36f7 42 return (soma / tamVetorValores);
pmcmendes 0:cce430bf36f7 43 }
pmcmendes 0:cce430bf36f7 44
pmcmendes 0:cce430bf36f7 45 double calculaTensaoACSenoidal(float * vetorMedidas, int tamVetorMedidas) {
pmcmendes 0:cce430bf36f7 46 const int tamValores = TAM_VALORES_MEDIA_AMPLITUDE;
pmcmendes 0:cce430bf36f7 47 float valoresMaximos[tamValores];
pmcmendes 0:cce430bf36f7 48 float valoresMinimos[tamValores];
pmcmendes 0:cce430bf36f7 49 float mediaValoresMaximos, mediaValoresMinimos;
pmcmendes 1:6e573b77c775 50
pmcmendes 0:cce430bf36f7 51 qsort(vetorMedidas, tamVetorMedidas, sizeof(float), compare);
pmcmendes 0:cce430bf36f7 52
pmcmendes 0:cce430bf36f7 53 for (int i = 0; i < tamValores; i++) {
pmcmendes 0:cce430bf36f7 54 valoresMaximos[i] = vetorMedidas[i];
pmcmendes 0:cce430bf36f7 55 valoresMinimos[i] = vetorMedidas[(tamVetorMedidas - 1) - i];
pmcmendes 0:cce430bf36f7 56 }
pmcmendes 0:cce430bf36f7 57
pmcmendes 0:cce430bf36f7 58 mediaValoresMaximos = calculaMedia(valoresMaximos, tamValores);
pmcmendes 0:cce430bf36f7 59 mediaValoresMinimos = calculaMedia(valoresMinimos, tamValores);
pmcmendes 0:cce430bf36f7 60
pmcmendes 1:6e573b77c775 61 float amplitude = (mediaValoresMaximos - mediaValoresMinimos) * ESCALA_DE_TENSAO;
pmcmendes 3:14310c47674c 62 float tensaoEficaz = amplitude / (sqrt((float) 2));
pmcmendes 0:cce430bf36f7 63
pmcmendes 1:6e573b77c775 64 // Para printar valores maximos e minimos
pmcmendes 1:6e573b77c775 65 printf("Vetor de valores MAX: [");
pmcmendes 1:6e573b77c775 66 for(int i = 0; i < tamValores; i++) {
pmcmendes 1:6e573b77c775 67 printf(" %.2f,", valoresMaximos[i]);
pmcmendes 1:6e573b77c775 68 }
pmcmendes 3:14310c47674c 69 printf("]\n\r");
pmcmendes 1:6e573b77c775 70 printf("Vetor de valores MIN: [");
pmcmendes 1:6e573b77c775 71 for(int i = 0; i < tamValores; i++) {
pmcmendes 1:6e573b77c775 72 printf("%.2f, ", valoresMinimos[i]);
pmcmendes 1:6e573b77c775 73 }
pmcmendes 3:14310c47674c 74 printf("]\n\r");
pmcmendes 3:14310c47674c 75 printf("Media valores MAX: %.2f\n\r", mediaValoresMaximos);
pmcmendes 3:14310c47674c 76 printf("Media valores MIN: %.2f\n\r", mediaValoresMinimos);
pmcmendes 3:14310c47674c 77 printf("Amplitude calculada em volts: %.2f\n\r", amplitude);
pmcmendes 3:14310c47674c 78 printf("Tensao eficaz de %.2f volts\n\r", tensaoEficaz);
pmcmendes 0:cce430bf36f7 79
pmcmendes 1:6e573b77c775 80 return tensaoEficaz;
pmcmendes 1:6e573b77c775 81 }
pmcmendes 1:6e573b77c775 82
pmcmendes 1:6e573b77c775 83 double calculaTensaoACIntegral(float *vetorMedidas, int tamVetorMedidas) {
pmcmendes 1:6e573b77c775 84
pmcmendes 1:6e573b77c775 85 return 0;
pmcmendes 0:cce430bf36f7 86 }
pmcmendes 0:cce430bf36f7 87
pmcmendes 0:cce430bf36f7 88 int main()
pmcmendes 0:cce430bf36f7 89 { // valor mínimo de ts: ~0.0001 (10 kHz)
pmcmendes 3:14310c47674c 90 int contador = 0, tamanho=1000; // Tamanho dos vetores de amostras.
pmcmendes 0:cce430bf36f7 91 float ts = 0.0001, sinal0[tamanho], sinal1[tamanho], n1= 0, sinalDC;
pmcmendes 0:cce430bf36f7 92
pmcmendes 0:cce430bf36f7 93 myled = 0; // Acende led
pmcmendes 0:cce430bf36f7 94 flipper.attach(&flip, ts); // chama a funcao flip apos ts segundos
pmcmendes 0:cce430bf36f7 95 while(contador<tamanho) {
pmcmendes 0:cce430bf36f7 96 if(aux2 == 1){
pmcmendes 0:cce430bf36f7 97 sinal0[contador] = ain0; // lê sinais analógicos de dois canais
pmcmendes 0:cce430bf36f7 98 sinal1[contador] = ain1;
pmcmendes 0:cce430bf36f7 99 aux2 = 0;
pmcmendes 0:cce430bf36f7 100 n1 += sinal1[contador];
pmcmendes 0:cce430bf36f7 101 contador++;
pmcmendes 0:cce430bf36f7 102 }
pmcmendes 0:cce430bf36f7 103 }
pmcmendes 0:cce430bf36f7 104
pmcmendes 0:cce430bf36f7 105 sinalDC = n1/tamanho * ESCALA_DE_TENSAO;
pmcmendes 0:cce430bf36f7 106
pmcmendes 0:cce430bf36f7 107 flipper.detach(); /* para o ticker */
pmcmendes 0:cce430bf36f7 108 myled = 1;
pmcmendes 0:cce430bf36f7 109
pmcmendes 3:14310c47674c 110
pmcmendes 3:14310c47674c 111 printf ("A tensao DC e: %f ", sinalDC);
pmcmendes 0:cce430bf36f7 112
pmcmendes 0:cce430bf36f7 113
pmcmendes 3:14310c47674c 114 printf ("A tensao AC eh: %f.2", calculaTensaoACSenoidal(sinal0, tamanho));
pmcmendes 0:cce430bf36f7 115
pmcmendes 3:14310c47674c 116
pmcmendes 0:cce430bf36f7 117
pmcmendes 0:cce430bf36f7 118 // Apaga led quando termina
pmcmendes 0:cce430bf36f7 119 // Coloque aqui o seu programa para tratamento dos dados.
pmcmendes 0:cce430bf36f7 120 }
pmcmendes 3:14310c47674c 121
pmcmendes 3:14310c47674c 122
pmcmendes 3:14310c47674c 123