Funcional

Dependencies:   FastAnalogIn HSI2RGBW_PWM NVIC_set_all_priorities mbed-dsp mbed TextLCD

Fork of Seniales-Tacometro by Grissell Esquivel

Revision:
7:6b8a1382b2ee
Parent:
6:c77012d6086b
Child:
8:4c2a5a2b2a80
--- a/main.cpp	Wed Dec 02 20:04:03 2015 +0000
+++ b/main.cpp	Tue Apr 26 15:04:08 2016 +0000
@@ -5,44 +5,44 @@
 #include "arm_const_structs.h"
 #include "FastAnalogIn.h" //Librería modificada basada en la función de AnalogIn que reduce el tiempo de procesamiento de las señales ADC
 #include "TextLCD.h"
-
-
+ 
+ 
 TextLCD lcd(PTA4, PTC8, PTA13, PTD5, PTD0, PTD2); // rs, e, d0, d1, d2, d3
-
+ 
 char* x;
 int lcd_count = 0;
 Serial pc(USBTX, USBRX); //Se declaran los pines que se utilizarán para la comunicación serial mediante USB para debuggeo (PTA1 - RX, PTA2 - TX)
 FastAnalogIn   segnal(PTC2); //Se declara el pin que recibirá la señal análoga del sensor
-
+ 
 extern "C" void NMI_Handler()
 {
 }
-
+ 
 ////////////////////////////////////////////////////////////////////////////////
 // CONFIGURACION
 //Estos valores puedne modificarse para modificar los parametros de la transformada
 ////////////////////////////////////////////////////////////////////////////////
-
+ 
 int SAMPLE_RATE_HZ = 40000;       // Frecuencian de muestreo en HZ del sistema
 const int FFT_SIZE = 1024;           // Número de valores para la transformada rápida
 float freq = 40000.0/1024.0;           // Frecuencia de activación de la interrupción de muestreo
 float max[2];                        // Arreglo que almacena la frecuencia y magnitud mayores del espectro de Fourier
-
+ 
 ////////////////////////////////////////////////////////////////////////////////
 // ESTADO INTERNO
 // Configuraciones necesarias para el correcto funcionaiento del programa
 ////////////////////////////////////////////////////////////////////////////////
-
+ 
 const static arm_cfft_instance_f32 *S;
 Ticker samplingTimer;                       //objeto creado para habilitar las interrupciones con lso métodos de ticker
 float samples[FFT_SIZE*2];                  //Arreglo en el que se almacenan las muestras del tomadas ADC
 float magnitudes[FFT_SIZE];                 //Arreglo donde se almacenan las magnitudes de la FFT
 int sampleCounter = 0;                      //Contador del número de muestras tomadas
-
+ 
 ////////////////////////////////////////////////////////////////////////////////
 // FUNCIONES DE MUESTREO
 ////////////////////////////////////////////////////////////////////////////////
-
+ 
 //Esta función permite realizar el muestreo de datos, se realiza como interrupción para asegurar el tiempo de muestreo deseado
 void samplingCallback()
 {
@@ -59,35 +59,35 @@
         samplingTimer.detach();
     }
 }
-
+ 
 //Esta función permite reiniciar el contador de muestras e insertar nuevamente la interrupción de muestreo
 void samplingBegin()
 {
     sampleCounter = 0; //Se reinicia el contador de muestras
     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
 }
-
+ 
 //Función booleana que funciona como bandera para indicar que el meustreo de datos ha sido finalizado
 bool samplingIsDone()
 {
     return sampleCounter >= FFT_SIZE*2;
 }
-
+ 
 ////////////////////////////////////////////////////////////////////////////////
 // MAIN DEL PROGRAMA
 ////////////////////////////////////////////////////////////////////////////////
-
+ 
 int main()
 {
     //Configuración de las solicitudes de interrupción
     NVIC_set_all_irq_priorities(1);
-
+ 
     //Configuración de la velocidad de la comunicación serial
     pc.baud (115200); //Velocidad de la comunicación USB
-
+ 
     // Se incerta la interrupción de muestreo del ADC
     samplingBegin();
-
+ 
     // Init arm_ccft_32 el registro cambiara dependiendo de la variable FFT_SIZE
     switch (FFT_SIZE) {
         case 512:
@@ -103,14 +103,14 @@
             S = & arm_cfft_sR_f32_len4096;
             break;
     }
-
+ 
     while(1) {
         // Se calcula la FFT si se ha terminado el muestreo
         if (samplingIsDone()) {
-
+ 
             arm_cfft_f32(S, samples, 0, 1);
             arm_cmplx_mag_f32(samples, magnitudes, FFT_SIZE);
-
+ 
             for (int i = 0; i < FFT_SIZE/2+1; ++i) {
                 //    pc.printf("%f, %f\r\n", i*freq, magnitudes[i]);  //Esta línea se activa solo si se desea conocer la magnitudes generada por la FFT
                 //Sección de código que permite obtener el valor de frecuencia y magnitud mayor de los calculados
@@ -119,6 +119,8 @@
                     max[1]=magnitudes[i]; //Habilitar solo para debuggeo
                 }
             }
+            int test=  (int) (max[0] + 0.5); 
+            printf("%i\r\n", test);
             
             if (25<max[0] && max[0]<260) {
                 x="04,000 RPM";
@@ -159,15 +161,18 @@
                 int test=  (int) (max[0] + 0.5); 
                 lcd.locate(0,0);
                 lcd.printf("%s",x);
+                //pc.printf("%s",x);
                 lcd.locate(0,1);
                 lcd.printf("%s","FFT: ");
+                //pc.printf("%s","FFT: ");
                 lcd.printf("%i",test);
+                //pc.printf("%i",test);
                 lcd_count = 0;
             }
             
             max[0]=0;
             max[1]=0;
-
+ 
             // Se vuelve a incertar la interrupción de muestreo
             samplingBegin();
         }