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