Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of tarefa1 by
Tarefa1.cpp
- Committer:
- pmcmendes
- Date:
- 2015-03-12
- Revision:
- 3:14310c47674c
- Parent:
- 2:7476f7336e9a
- Child:
- 4:ee911115dcb6
File content as of revision 3:14310c47674c:
// Mede dois sinais #include <stdio.h> #include <stdlib.h> #include "mbed.h" #include "math.h" // Descomente esta linha caso queira usar funções como sin(x) #define ESCALA_DE_TENSAO 3.3 #define TAM_VALORES_MEDIA_AMPLITUDE 10 Timer t; Ticker flipper; AnalogIn ain0(PTB0); AnalogIn ain1(PTB1); DigitalOut myled(LED1); int aux2 = 0; // Variavel auxiliar, para indicar quando realizar uma amostragem typedef struct { float valorMedido; float tempo; } Medida; void flip() { aux2 = !aux2; } int compare (const void* a, const void * b) { const float *ia = (const float *) a; const float *ib = (const float *) b; if (*ia < *ib) return 1; if (*ia > *ib) return -1; else return 0; } float calculaMedia(float *vetorValores, int tamVetorValores) { float soma = 0; for (int i = 0; i < tamVetorValores; i++) { soma += vetorValores[i]; } return (soma / tamVetorValores); } double calculaTensaoACSenoidal(float * vetorMedidas, int tamVetorMedidas) { const int tamValores = TAM_VALORES_MEDIA_AMPLITUDE; float valoresMaximos[tamValores]; float valoresMinimos[tamValores]; float mediaValoresMaximos, mediaValoresMinimos; qsort(vetorMedidas, tamVetorMedidas, sizeof(float), compare); for (int i = 0; i < tamValores; i++) { valoresMaximos[i] = vetorMedidas[i]; valoresMinimos[i] = vetorMedidas[(tamVetorMedidas - 1) - i]; } mediaValoresMaximos = calculaMedia(valoresMaximos, tamValores); mediaValoresMinimos = calculaMedia(valoresMinimos, tamValores); float amplitude = (mediaValoresMaximos - mediaValoresMinimos) * ESCALA_DE_TENSAO; float tensaoEficaz = amplitude / (sqrt((float) 2)); // Para printar valores maximos e minimos printf("Vetor de valores MAX: ["); for(int i = 0; i < tamValores; i++) { printf(" %.2f,", valoresMaximos[i]); } printf("]\n\r"); printf("Vetor de valores MIN: ["); for(int i = 0; i < tamValores; i++) { printf("%.2f, ", valoresMinimos[i]); } printf("]\n\r"); printf("Media valores MAX: %.2f\n\r", mediaValoresMaximos); printf("Media valores MIN: %.2f\n\r", mediaValoresMinimos); printf("Amplitude calculada em volts: %.2f\n\r", amplitude); printf("Tensao eficaz de %.2f volts\n\r", tensaoEficaz); return tensaoEficaz; } double calculaTensaoACIntegral(float *vetorMedidas, int tamVetorMedidas) { return 0; } int main() { // valor mínimo de ts: ~0.0001 (10 kHz) int contador = 0, tamanho=1000; // Tamanho dos vetores de amostras. float ts = 0.0001, sinal0[tamanho], sinal1[tamanho], n1= 0, sinalDC; myled = 0; // Acende led flipper.attach(&flip, ts); // chama a funcao flip apos ts segundos while(contador<tamanho) { if(aux2 == 1){ sinal0[contador] = ain0; // lê sinais analógicos de dois canais sinal1[contador] = ain1; aux2 = 0; n1 += sinal1[contador]; contador++; } } sinalDC = n1/tamanho * ESCALA_DE_TENSAO; flipper.detach(); /* para o ticker */ myled = 1; printf ("A tensao DC e: %f ", sinalDC); printf ("A tensao AC eh: %f.2", calculaTensaoACSenoidal(sinal0, tamanho)); // Apaga led quando termina // Coloque aqui o seu programa para tratamento dos dados. }