Afinador Guitarra Incompleto

Dependencies:   NVIC_set_all_priorities FastAnalogIn TextLCD mbed-dsp mbed

Committer:
ratak477
Date:
Wed Dec 02 15:36:45 2015 +0000
Revision:
1:b5bd45c95e36
Parent:
0:2b9337ff25fe
Guitar Tuner for FRDM-KL25Z. LCD display enabled 16x2. Fast Analog Microphone. FFT.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ratak477 0:2b9337ff25fe 1 #include "mbed.h"
ratak477 0:2b9337ff25fe 2 #include "TextLCD.h"
ratak477 0:2b9337ff25fe 3 #include "FastAnalogIn.h"
ratak477 1:b5bd45c95e36 4 #include "arm_math.h" //Librería que contiene funciones de tranformada de fourier
ratak477 1:b5bd45c95e36 5 #include "arm_const_struct.h"
ratak477 1:b5bd45c95e36 6 #include "NVIC_set_all_priorities.h" //Librería para modificar todas las solicitudes de interrupciones al mismo tiempo
ratak477 1:b5bd45c95e36 7 #include <ctype.h>
ratak477 0:2b9337ff25fe 8 TextLCD lcd(PTE20,PTE21,PTE22,PTE23,PTE29,PTE30);
ratak477 0:2b9337ff25fe 9 Serial pc(USBTX,USBRX);
ratak477 0:2b9337ff25fe 10 FastAnalogIn Mic(PTB0);
ratak477 0:2b9337ff25fe 11
ratak477 0:2b9337ff25fe 12
ratak477 1:b5bd45c95e36 13 int SAMPLE_RATE_HZ = 4000; // Frecuencian de muestreo en HZ del sistema
ratak477 1:b5bd45c95e36 14 const int FFT_SIZE = 1024; // Número de valores para la transformada rápida
ratak477 1:b5bd45c95e36 15 float freq = 4000.0/1024.0; // Frecuencia de activación de la interrupción de muestreo
ratak477 1:b5bd45c95e36 16 float max[2]; // Arreglo que almacena la frecuencia y magnitud mayores del espectro de Fourier
ratak477 1:b5bd45c95e36 17 // Configuraciones necesarias para el correcto funcionaiento del programa
ratak477 1:b5bd45c95e36 18
ratak477 1:b5bd45c95e36 19 const static arm_cfft_instance_f32 *S;
ratak477 1:b5bd45c95e36 20 Ticker samplingTimer; //objeto creado para habilitar las interrupciones con lso métodos de ticker
ratak477 1:b5bd45c95e36 21 float samples[FFT_SIZE*2]; //Arreglo en el que se almacenan las muestras del tomadas ADC
ratak477 1:b5bd45c95e36 22 float magnitudes[FFT_SIZE]; //Arreglo donde se almacenan las magnitudes de la FFT
ratak477 1:b5bd45c95e36 23 int sampleCounter = 0; //Contador del número de muestras tomadas
ratak477 1:b5bd45c95e36 24
ratak477 1:b5bd45c95e36 25 // FUNCIONES DE MUESTREO
ratak477 1:b5bd45c95e36 26 //Esta función permite realizar el muestreo de datos, se realiza como interrupción para asegurar el tiempo de muestreo deseado
ratak477 1:b5bd45c95e36 27
ratak477 1:b5bd45c95e36 28 void samplingCallback()
ratak477 1:b5bd45c95e36 29 {
ratak477 1:b5bd45c95e36 30 // Lectura del ADC y almacenamiento del dato
ratak477 1:b5bd45c95e36 31 samples[sampleCounter] = (1023 * Mic) - 511.0f; //Se ajusta el valor de un rango de 0-1 a 0-511
ratak477 1:b5bd45c95e36 32 // La función que calcula la transformada requiere de un valor imaginario, en este caso se le asigna 0
ratak477 1:b5bd45c95e36 33 // ya que los valores muestreados son solamente reales.
ratak477 1:b5bd45c95e36 34 samples[sampleCounter+1] = 0.0;
ratak477 1:b5bd45c95e36 35 // Se ajusta la posición en el arreglo para almacenar el siguiente valor real
ratak477 1:b5bd45c95e36 36 sampleCounter += 2;
ratak477 1:b5bd45c95e36 37 // En caso de que el valor de sample counter sobrepase el tamaño del arreglo de almacenamiento se retira la interrupción
ratak477 1:b5bd45c95e36 38 // de muestreo del programa
ratak477 1:b5bd45c95e36 39 if (sampleCounter >= FFT_SIZE*2) {
ratak477 1:b5bd45c95e36 40 samplingTimer.detach();
ratak477 1:b5bd45c95e36 41 }
ratak477 1:b5bd45c95e36 42 }
ratak477 1:b5bd45c95e36 43
ratak477 1:b5bd45c95e36 44 //Esta función permite reiniciar el contador de muestras e insertar nuevamente la interrupción de muestreo
ratak477 1:b5bd45c95e36 45 void samplingBegin()
ratak477 1:b5bd45c95e36 46 {
ratak477 1:b5bd45c95e36 47 sampleCounter = 0; //Se reinicia el contador de muestras
ratak477 1:b5bd45c95e36 48 samplingTimer.attach_us(&samplingCallback, 1000000/SAMPLE_RATE_HZ); //Se incertala interrupción de muestreo la cual es llamada con la frecuencia de Sample_rate_hz
ratak477 1:b5bd45c95e36 49 }
ratak477 1:b5bd45c95e36 50 //Función booleana que funciona como bandera para indicar que el meustreo de datos ha sido finalizado
ratak477 1:b5bd45c95e36 51 bool samplingIsDone()
ratak477 1:b5bd45c95e36 52 {
ratak477 1:b5bd45c95e36 53 return sampleCounter >= FFT_SIZE*2;
ratak477 1:b5bd45c95e36 54 }
ratak477 0:2b9337ff25fe 55 int main ()
ratak477 0:2b9337ff25fe 56 {
ratak477 1:b5bd45c95e36 57 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 58
ratak477 1:b5bd45c95e36 59 //Configuración de las solicitudes de interrupción
ratak477 1:b5bd45c95e36 60 NVIC_set_all_irq_priorities(1);
ratak477 1:b5bd45c95e36 61
ratak477 1:b5bd45c95e36 62 //Configuración de la velocidad de la comunicación serial
ratak477 1:b5bd45c95e36 63 pc.baud (38400); //Velocidad de la comunicación USB
ratak477 1:b5bd45c95e36 64 // Se incerta la interrupción de muestreo del ADC
ratak477 1:b5bd45c95e36 65 samplingBegin();
ratak477 1:b5bd45c95e36 66
ratak477 1:b5bd45c95e36 67 // Init arm_ccft_32 el registro cambiara dependiendo de la variable FFT_SIZE
ratak477 1:b5bd45c95e36 68 switch (FFT_SIZE)
ratak477 0:2b9337ff25fe 69 {
ratak477 1:b5bd45c95e36 70 case 512:
ratak477 1:b5bd45c95e36 71 S = & arm_cfft_sR_f32_len512;
ratak477 1:b5bd45c95e36 72 break;
ratak477 1:b5bd45c95e36 73 case 1024:
ratak477 1:b5bd45c95e36 74 S = & arm_cfft_sR_f32_len1024;
ratak477 1:b5bd45c95e36 75 break;
ratak477 1:b5bd45c95e36 76 case 2048:
ratak477 1:b5bd45c95e36 77 S = & arm_cfft_sR_f32_len2048;
ratak477 1:b5bd45c95e36 78 break;
ratak477 1:b5bd45c95e36 79 case 4096:
ratak477 1:b5bd45c95e36 80 S = & arm_cfft_sR_f32_len4096;
ratak477 1:b5bd45c95e36 81 break;
ratak477 0:2b9337ff25fe 82 }
ratak477 1:b5bd45c95e36 83
ratak477 1:b5bd45c95e36 84 while(1) {
ratak477 1:b5bd45c95e36 85
ratak477 1:b5bd45c95e36 86 // Se calcula la FFT si se ha terminado el muestreo
ratak477 1:b5bd45c95e36 87 if (samplingIsDone()) {
ratak477 1:b5bd45c95e36 88
ratak477 1:b5bd45c95e36 89 arm_cfft_f32(S, samples, 0, 1);
ratak477 1:b5bd45c95e36 90 arm_cmplx_mag_f32(samples, magnitudes, FFT_SIZE);
ratak477 1:b5bd45c95e36 91 for (int i = 1; i < FFT_SIZE/2+1; ++i) {
ratak477 1:b5bd45c95e36 92
ratak477 1:b5bd45c95e36 93 if (magnitudes[i]>max[1]){
ratak477 1:b5bd45c95e36 94 max[0]=i*freq;
ratak477 1:b5bd45c95e36 95 max[1]=magnitudes[i]; //Habilitar solo para debuggeo
ratak477 1:b5bd45c95e36 96 }
ratak477 1:b5bd45c95e36 97 }
ratak477 1:b5bd45c95e36 98
ratak477 0:2b9337ff25fe 99 float oct[7] = {16.35,18.35,20.60,21.82,24.5,27.5,30.86};
ratak477 0:2b9337ff25fe 100 float n;
ratak477 0:2b9337ff25fe 101 float nueva_oct[7];
ratak477 0:2b9337ff25fe 102 float nueva_octf;
ratak477 0:2b9337ff25fe 103 for (int i = 0; i <= 6; i = i+1){
ratak477 1:b5bd45c95e36 104 if ( max[0] >= 14.35 && max[0]<= 34.22)
ratak477 0:2b9337ff25fe 105 {
ratak477 0:2b9337ff25fe 106 n = 0;
ratak477 0:2b9337ff25fe 107 }
ratak477 1:b5bd45c95e36 108 if (max[0]> 34.22 && max[0]<= 63.56)
ratak477 0:2b9337ff25fe 109 {
ratak477 0:2b9337ff25fe 110 n = 1;
ratak477 0:2b9337ff25fe 111 }
ratak477 1:b5bd45c95e36 112 if (max[0] > 63.56 && max[0] <= 127.14)
ratak477 0:2b9337ff25fe 113 {
ratak477 0:2b9337ff25fe 114 n = 2;
ratak477 0:2b9337ff25fe 115 }
ratak477 1:b5bd45c95e36 116 if (max[0] > 127.14 && max[0] <= 254.28)
ratak477 0:2b9337ff25fe 117 {
ratak477 0:2b9337ff25fe 118 n = 3;
ratak477 0:2b9337ff25fe 119 }
ratak477 1:b5bd45c95e36 120 if (max[0] > 254.28 && max[0]<= 508.26)
ratak477 0:2b9337ff25fe 121 {
ratak477 0:2b9337ff25fe 122 n = 4;
ratak477 0:2b9337ff25fe 123 }
ratak477 1:b5bd45c95e36 124 if (max[0] > 508.26 && max[0] <= 1017.13)
ratak477 0:2b9337ff25fe 125 {
ratak477 0:2b9337ff25fe 126 n = 5;
ratak477 0:2b9337ff25fe 127 }
ratak477 1:b5bd45c95e36 128 if (max[0] > 1017.13 && max[0] <= 2034.26)
ratak477 0:2b9337ff25fe 129 {
ratak477 0:2b9337ff25fe 130 n = 6;
ratak477 0:2b9337ff25fe 131 }
ratak477 1:b5bd45c95e36 132 if (max[0] > 2034.26 && max[0] <= 4068.54)
ratak477 0:2b9337ff25fe 133 {
ratak477 0:2b9337ff25fe 134 n = 7;
ratak477 0:2b9337ff25fe 135 }
ratak477 0:2b9337ff25fe 136
ratak477 0:2b9337ff25fe 137 float power1 = pow((float)2,(float)n);
ratak477 0:2b9337ff25fe 138 nueva_oct[i] = oct[i]*power1;
ratak477 0:2b9337ff25fe 139 }
ratak477 0:2b9337ff25fe 140
ratak477 0:2b9337ff25fe 141 nueva_octf = nueva_oct[6] + 1.84*pow(2,n);
ratak477 0:2b9337ff25fe 142
ratak477 1:b5bd45c95e36 143 if (max[0] >= (nueva_oct[0] - (nueva_oct[1] - nueva_oct[0])/2) && max[0] < (nueva_oct[0] + (nueva_oct[1] - nueva_oct[0])/2))
ratak477 0:2b9337ff25fe 144 {
ratak477 1:b5bd45c95e36 145 if (max[0] < (nueva_oct[0] - (nueva_oct[1] - nueva_oct[0])/8))
ratak477 0:2b9337ff25fe 146 {
ratak477 1:b5bd45c95e36 147 lcd.cls(); // Clear the screen
ratak477 0:2b9337ff25fe 148 lcd.printf("C %1.0f Aprieta",n);
ratak477 1:b5bd45c95e36 149 wait(0.1);
ratak477 1:b5bd45c95e36 150
ratak477 0:2b9337ff25fe 151 }
ratak477 1:b5bd45c95e36 152 if (max[0] > (nueva_oct[0] + (nueva_oct[1] - nueva_oct[0])/4))
ratak477 0:2b9337ff25fe 153 {
ratak477 1:b5bd45c95e36 154 lcd.cls(); // Clear the screen
ratak477 0:2b9337ff25fe 155 lcd.printf("C %1.0f Afloja",n);
ratak477 1:b5bd45c95e36 156 wait(0.1);
ratak477 1:b5bd45c95e36 157
ratak477 0:2b9337ff25fe 158 }
ratak477 1:b5bd45c95e36 159 if (max[0] <= (nueva_oct[0] + (nueva_oct[1] - nueva_oct[0])/4) && max[0] >= (nueva_oct[0] - (nueva_oct[1] - nueva_oct[0])/8))
ratak477 0:2b9337ff25fe 160 {
ratak477 1:b5bd45c95e36 161 lcd.cls(); // Clear the screen
ratak477 0:2b9337ff25fe 162 lcd.printf("C %1.0f",n);
ratak477 1:b5bd45c95e36 163 wait(0.1);
ratak477 1:b5bd45c95e36 164
ratak477 0:2b9337ff25fe 165 }
ratak477 0:2b9337ff25fe 166 }
ratak477 0:2b9337ff25fe 167
ratak477 1:b5bd45c95e36 168 if (max[0] >= (nueva_oct[1] - (nueva_oct[1] - nueva_oct[0])/2) && max[0] < (nueva_oct[1] + (nueva_oct[2] - nueva_oct[1])/2))
ratak477 0:2b9337ff25fe 169 {
ratak477 1:b5bd45c95e36 170 if (max[0] < (nueva_oct[1] - (nueva_oct[1] - nueva_oct[0])/4))
ratak477 0:2b9337ff25fe 171 {
ratak477 1:b5bd45c95e36 172 lcd.cls(); // Clear the screen
ratak477 0:2b9337ff25fe 173 lcd.printf("D %1.0f Aprieta",n);
ratak477 1:b5bd45c95e36 174 wait(0.1);
ratak477 1:b5bd45c95e36 175
ratak477 0:2b9337ff25fe 176 }
ratak477 1:b5bd45c95e36 177 if (max[0] > (nueva_oct[1] + (nueva_oct[2] - nueva_oct[1])/4))
ratak477 0:2b9337ff25fe 178 {
ratak477 1:b5bd45c95e36 179 lcd.cls(); // Clear the screen
ratak477 0:2b9337ff25fe 180 lcd.printf("D %1.0f Afloja",n);
ratak477 1:b5bd45c95e36 181 wait(0.1);
ratak477 1:b5bd45c95e36 182
ratak477 0:2b9337ff25fe 183 }
ratak477 1:b5bd45c95e36 184 if (max[0] <= (nueva_oct[1] + (nueva_oct[2] - nueva_oct[1])/4) && max[0] >= (nueva_oct[1] - (nueva_oct[1] - nueva_oct[0])/4))
ratak477 0:2b9337ff25fe 185 {
ratak477 1:b5bd45c95e36 186 lcd.cls(); // Clear the screen
ratak477 0:2b9337ff25fe 187 lcd.printf("D %1.0f",n);
ratak477 1:b5bd45c95e36 188 wait(0.1);
ratak477 1:b5bd45c95e36 189
ratak477 0:2b9337ff25fe 190 }
ratak477 0:2b9337ff25fe 191 }
ratak477 0:2b9337ff25fe 192
ratak477 0:2b9337ff25fe 193
ratak477 0:2b9337ff25fe 194
ratak477 1:b5bd45c95e36 195 if (max[0]>= (nueva_oct[2] - (nueva_oct[2] - nueva_oct[1])/2) && max[0]< (nueva_oct[2] + (nueva_oct[3] - nueva_oct[2])/2))
ratak477 1:b5bd45c95e36 196 {
ratak477 1:b5bd45c95e36 197 if (max[0]< (nueva_oct[2] - (nueva_oct[2] - nueva_oct[1])/4))
ratak477 1:b5bd45c95e36 198 {
ratak477 1:b5bd45c95e36 199 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 200 lcd.printf("E %1.0f Aprieta",n);
ratak477 1:b5bd45c95e36 201 wait(0.1);
ratak477 1:b5bd45c95e36 202 }
ratak477 1:b5bd45c95e36 203 if (max[0]> (nueva_oct[2] + (nueva_oct[3] - nueva_oct[2])/4))
ratak477 1:b5bd45c95e36 204 {
ratak477 1:b5bd45c95e36 205 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 206 lcd.printf("E %1.0f Afloja",n);
ratak477 1:b5bd45c95e36 207 wait(0.1);
ratak477 1:b5bd45c95e36 208 }
ratak477 1:b5bd45c95e36 209 if (max[0]<= (nueva_oct[2] + (nueva_oct[3] - nueva_oct[2])/4) && max[0]>= (nueva_oct[2] - (nueva_oct[2] - nueva_oct[1])/4))
ratak477 1:b5bd45c95e36 210 {
ratak477 1:b5bd45c95e36 211 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 212 lcd.printf("E %1.0f",n);
ratak477 1:b5bd45c95e36 213 wait(0.1);
ratak477 1:b5bd45c95e36 214 }
ratak477 1:b5bd45c95e36 215 }
ratak477 1:b5bd45c95e36 216
ratak477 1:b5bd45c95e36 217 if (max[0]>= (nueva_oct[3] - (nueva_oct[3] - nueva_oct[2])/2) && max[0]< (nueva_oct[3] + (nueva_oct[4] - nueva_oct[3])/2))
ratak477 1:b5bd45c95e36 218 {
ratak477 1:b5bd45c95e36 219 if (max[0]< (nueva_oct[3] - (nueva_oct[3] - nueva_oct[2])/4))
ratak477 1:b5bd45c95e36 220 {
ratak477 1:b5bd45c95e36 221 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 222 lcd.printf("F %1.0f Aprieta",n);
ratak477 1:b5bd45c95e36 223 wait(0.1);
ratak477 1:b5bd45c95e36 224 }
ratak477 1:b5bd45c95e36 225 if (max[0]> (nueva_oct[3] + (nueva_oct[4] - nueva_oct[3])/4))
ratak477 1:b5bd45c95e36 226 {
ratak477 1:b5bd45c95e36 227 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 228 lcd.printf("F %1.0f Afloja",n);
ratak477 1:b5bd45c95e36 229 wait(0.1);
ratak477 1:b5bd45c95e36 230 }
ratak477 1:b5bd45c95e36 231 if (max[0]<= (nueva_oct[3] + (nueva_oct[4] - nueva_oct[3])/4) && max[0]>= (nueva_oct[3] - (nueva_oct[3] - nueva_oct[2])/4))
ratak477 1:b5bd45c95e36 232 {
ratak477 1:b5bd45c95e36 233 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 234 lcd.printf("F %1.0f",n);
ratak477 1:b5bd45c95e36 235 wait(0.1);
ratak477 1:b5bd45c95e36 236 }
ratak477 1:b5bd45c95e36 237 }
ratak477 0:2b9337ff25fe 238
ratak477 1:b5bd45c95e36 239 if (max[0]>= (nueva_oct[4] - (nueva_oct[4] - nueva_oct[3])/2) && max[0]< (nueva_oct[4] + (nueva_oct[5] - nueva_oct[4])/2))
ratak477 1:b5bd45c95e36 240 {
ratak477 1:b5bd45c95e36 241 if (max[0]< (nueva_oct[4] - (nueva_oct[4] - nueva_oct[3])/4))
ratak477 1:b5bd45c95e36 242 {
ratak477 1:b5bd45c95e36 243 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 244 lcd.printf("G %1.0f Aprieta",n);
ratak477 1:b5bd45c95e36 245 wait(0.1);
ratak477 1:b5bd45c95e36 246 }
ratak477 1:b5bd45c95e36 247 if (max[0]> (nueva_oct[4] + (nueva_oct[5] - nueva_oct[4])/4))
ratak477 1:b5bd45c95e36 248 {
ratak477 1:b5bd45c95e36 249 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 250 lcd.printf("G %1.0f Afloja",n);
ratak477 1:b5bd45c95e36 251 wait(0.1);
ratak477 1:b5bd45c95e36 252 }
ratak477 1:b5bd45c95e36 253 if (max[0]<= (nueva_oct[4] + (nueva_oct[5] - nueva_oct[4])/4) && max[0]>= (nueva_oct[4] - (nueva_oct[4] - nueva_oct[3])/4))
ratak477 1:b5bd45c95e36 254 {
ratak477 1:b5bd45c95e36 255 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 256 lcd.printf("G %1.0f",n);
ratak477 1:b5bd45c95e36 257 wait(0.1);
ratak477 1:b5bd45c95e36 258 }
ratak477 1:b5bd45c95e36 259 }
ratak477 1:b5bd45c95e36 260
ratak477 1:b5bd45c95e36 261 if (max[0]>= (nueva_oct[5] - (nueva_oct[5] - nueva_oct[4])/2) && max[0]< (nueva_oct[5] + (nueva_oct[6] - nueva_oct[5])/2))
ratak477 0:2b9337ff25fe 262 {
ratak477 1:b5bd45c95e36 263 if (max[0]< (nueva_oct[5] - (nueva_oct[5] - nueva_oct[4])/4))
ratak477 1:b5bd45c95e36 264 {
ratak477 1:b5bd45c95e36 265 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 266 lcd.printf("A %1.0f Aprieta",n);
ratak477 1:b5bd45c95e36 267 wait(0.1);
ratak477 1:b5bd45c95e36 268 }
ratak477 1:b5bd45c95e36 269 if (max[0]> (nueva_oct[5] + (nueva_oct[6] - nueva_oct[5])/4))
ratak477 1:b5bd45c95e36 270 {
ratak477 1:b5bd45c95e36 271 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 272 lcd.printf("A %1.0f Afloja",n);
ratak477 1:b5bd45c95e36 273 wait(0.1);
ratak477 1:b5bd45c95e36 274 }
ratak477 1:b5bd45c95e36 275 if (max[0]<= (nueva_oct[5] + (nueva_oct[6] - nueva_oct[5])/4) && max[0]>= (nueva_oct[5] - (nueva_oct[5] - nueva_oct[4])/4))
ratak477 1:b5bd45c95e36 276 {
ratak477 1:b5bd45c95e36 277 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 278 lcd.printf("A %1.0f",n);
ratak477 1:b5bd45c95e36 279 wait(0.1);
ratak477 1:b5bd45c95e36 280 }
ratak477 0:2b9337ff25fe 281 }
ratak477 1:b5bd45c95e36 282
ratak477 1:b5bd45c95e36 283
ratak477 1:b5bd45c95e36 284 if (max[0]>= (nueva_oct[6] - (nueva_oct[6] - nueva_oct[5])/2) && max[0]< (nueva_oct[6] + (nueva_octf - nueva_oct[6])/2))
ratak477 1:b5bd45c95e36 285 {
ratak477 1:b5bd45c95e36 286 if (max[0]< (nueva_oct[6] - (nueva_oct[6] - nueva_oct[5])/4))
ratak477 1:b5bd45c95e36 287 {
ratak477 1:b5bd45c95e36 288 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 289 lcd.printf("B %1.0f Aprieta",n);
ratak477 1:b5bd45c95e36 290 wait(0.1);
ratak477 1:b5bd45c95e36 291 }
ratak477 1:b5bd45c95e36 292 if (max[0]> (nueva_oct[6] + (nueva_octf - nueva_oct[6])/4))
ratak477 1:b5bd45c95e36 293 {
ratak477 1:b5bd45c95e36 294 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 295 lcd.printf("B %1.0f Afloja",n);
ratak477 1:b5bd45c95e36 296 wait(0.1);
ratak477 1:b5bd45c95e36 297 }
ratak477 1:b5bd45c95e36 298 if (max[0]<= (nueva_oct[6] + (nueva_octf - nueva_oct[6])/4) && max[0]>= (nueva_oct[6] - (nueva_oct[6] - nueva_oct[5])/4))
ratak477 1:b5bd45c95e36 299 {
ratak477 1:b5bd45c95e36 300 lcd.cls(); // Clear the screen
ratak477 1:b5bd45c95e36 301 lcd.printf("B %1.0f",n);
ratak477 1:b5bd45c95e36 302 wait(0.1);
ratak477 1:b5bd45c95e36 303 }
ratak477 1:b5bd45c95e36 304 }
ratak477 1:b5bd45c95e36 305
ratak477 1:b5bd45c95e36 306 lcd.locate(0,1);
ratak477 1:b5bd45c95e36 307 lcd.printf("%f",max[0]);
ratak477 1:b5bd45c95e36 308 lcd.locate(0,0);
ratak477 1:b5bd45c95e36 309
ratak477 1:b5bd45c95e36 310
ratak477 1:b5bd45c95e36 311
ratak477 1:b5bd45c95e36 312 //Se reinician las variables máximas
ratak477 1:b5bd45c95e36 313 max[0]=0;
ratak477 1:b5bd45c95e36 314 max[1]=0;
ratak477 1:b5bd45c95e36 315
ratak477 1:b5bd45c95e36 316 // Se vuelve a incertar la interrupción de muestreo
ratak477 1:b5bd45c95e36 317 samplingBegin();
ratak477 1:b5bd45c95e36 318 }
ratak477 1:b5bd45c95e36 319 }
ratak477 1:b5bd45c95e36 320 }
ratak477 1:b5bd45c95e36 321