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@3:14310c47674c, 2015-03-12 (annotated)
- 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?
User | Revision | Line number | New 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 |