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
Revision 4:ee911115dcb6, committed 2015-03-19
- Comitter:
- pmcmendes
- Date:
- Thu Mar 19 12:50:26 2015 +0000
- Parent:
- 3:14310c47674c
- Commit message:
- para fazer tarefa 2
Changed in this revision
Tarefa1.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/Tarefa1.cpp Thu Mar 12 13:50:57 2015 +0000 +++ b/Tarefa1.cpp Thu Mar 19 12:50:26 2015 +0000 @@ -6,7 +6,11 @@ #include "math.h" // Descomente esta linha caso queira usar funções como sin(x) #define ESCALA_DE_TENSAO 3.3 + +#define ESCALA_DE_TENSAO_AC 3.3 +#define ESCALA_DE_TENSAO_DC 3.3 #define TAM_VALORES_MEDIA_AMPLITUDE 10 +#define LIMITE_RECONHECIMENTO_PICO 0.8 Timer t; Ticker flipper; @@ -25,93 +29,101 @@ } 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; + 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); + float soma = 0; + for (int i = 0; i < tamVetorValores; i++) { + if (vetorValores[i] < ESCALA_DE_TENSAO) 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; +double calculaAmplitude(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); - 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); + for (int i = 0; i < tamValores; i++) { + valoresMaximos[i] = vetorMedidas[i]; + valoresMinimos[i] = vetorMedidas[(tamVetorMedidas - 1) - i]; + } - float amplitude = (mediaValoresMaximos - mediaValoresMinimos) * ESCALA_DE_TENSAO; - float tensaoEficaz = amplitude / (sqrt((float) 2)); + mediaValoresMaximos = calculaMedia(valoresMaximos, tamValores); + mediaValoresMinimos = calculaMedia(valoresMinimos, tamValores); - // 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); + float amplitude = (mediaValoresMaximos - mediaValoresMinimos); + - return tensaoEficaz; + printf("Media superior: %.2f Media inferior: %.2f Amplitude pico-a-pico: %.2f\n\r", mediaValoresMaximos, mediaValoresMinimos, amplitude); + return amplitude; } -double calculaTensaoACIntegral(float *vetorMedidas, int tamVetorMedidas) { +float * filtrarMatrizPorAmplitudeMinima(float * vetorMedidas, int tamVetorMedidas, float limite) { + return NULL; + } + +float calculaTensaoDC(float *vetorMedidas, int tamVetorMedidas) { + return calculaMedia(vetorMedidas, tamVetorMedidas); +} - return 0; +float calculaTensaoACSenoidal(float *vetorMedidas, int tamVetorMedidas, float tensaoDC) { + float amplitude = calculaAmplitude(vetorMedidas, tamVetorMedidas); + float tensaoEficazAC = amplitude/sqrt((float) 2); + float tensaoTotal = sqrt(tensaoEficazAC*tensaoEficazAC + tensaoDC*tensaoDC); + //printf("Amplitude:%.2f Tensao Eficaz AC: %.2f Tensao DC: %.2f \n\r", amplitude, tensaoEficazAC, tensaoDC); + return tensaoTotal; } +float calculaTensaoACPeriodica(float *vetorMedidas, int tamVetorMedidas) { + // detectar picos, tempo de execucao, preciso de periodo e velocidade + // v = lambda * f + // mesmo assim preciso de ideia de tempo + float n = 0; + for(int i = 0; i < tamVetorMedidas; i++) + n += vetorMedidas[i]*vetorMedidas[i] * 0.0001; + return sqrt(n / 0.1); + +} + + 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; - + wait(1); 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; + sinal0[contador] = ain0 * ESCALA_DE_TENSAO; // lê sinais analógicos de dois canais + sinal1[contador] = ain1 * ESCALA_DE_TENSAO; aux2 = 0; n1 += sinal1[contador]; contador++; } } - sinalDC = n1/tamanho * ESCALA_DE_TENSAO; flipper.detach(); /* para o ticker */ myled = 1; - + printf ("############# MULTIMETRO UPP ##############\n\r"); + - printf ("A tensao DC e: %f ", sinalDC); - - - printf ("A tensao AC eh: %f.2", calculaTensaoACSenoidal(sinal0, tamanho)); + float tensaoDC = calculaTensaoDC(sinal1, tamanho); + //float tensaoAC = calculaTensaoACSenoidal(sinal1, tamanho, tensaoDC); + float tensaoAC = calculaTensaoACPeriodica(sinal1, tamanho); + printf("\n\n\n\n"); + printf ("A tensao DC e: %.2f \n\r", tensaoDC); + printf ("A tensao AC e: %.2f \n\n\n\r", tensaoAC);