Funcional

Dependencies:   FastAnalogIn HSI2RGBW_PWM NVIC_set_all_priorities mbed-dsp mbed TextLCD

Fork of Seniales-Tacometro by Grissell Esquivel

Revision:
6:c77012d6086b
Parent:
5:cb7f0c71b5fd
Child:
7:6b8a1382b2ee
diff -r cb7f0c71b5fd -r c77012d6086b main.cpp
--- a/main.cpp	Tue Dec 01 07:21:34 2015 +0000
+++ b/main.cpp	Wed Dec 02 20:04:03 2015 +0000
@@ -4,11 +4,18 @@
 #include "arm_math.h" //Librería que contiene funciones de tranformada de fourier
 #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() {
+extern "C" void NMI_Handler()
+{
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -41,7 +48,7 @@
 {
     // Lectura del ADC y almacenamiento del dato
     samples[sampleCounter] = (1023 * segnal) - 511.0f; //Se ajusta el valor de un rango de 0-1 a 0-511
-    // La función que calcula la transformada requiere de un valor imaginario, en este caso se le asigna 0 
+    // La función que calcula la transformada requiere de un valor imaginario, en este caso se le asigna 0
     // ya que los valores muestreados son solamente reales.
     samples[sampleCounter+1] = 0.0;
     // Se ajusta la posición en el arreglo para almacenar el siguiente valor real
@@ -74,7 +81,7 @@
 {
     //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
 
@@ -82,42 +89,85 @@
     samplingBegin();
 
     // Init arm_ccft_32 el registro cambiara dependiendo de la variable FFT_SIZE
-    switch (FFT_SIZE)
-    {
-    case 512:
-        S = & arm_cfft_sR_f32_len512;
-        break;
-    case 1024:
-        S = & arm_cfft_sR_f32_len1024;
-        break;
-    case 2048:
-        S = & arm_cfft_sR_f32_len2048;
-        break;
-    case 4096:
-        S = & arm_cfft_sR_f32_len4096;
-        break;
+    switch (FFT_SIZE) {
+        case 512:
+            S = & arm_cfft_sR_f32_len512;
+            break;
+        case 1024:
+            S = & arm_cfft_sR_f32_len1024;
+            break;
+        case 2048:
+            S = & arm_cfft_sR_f32_len2048;
+            break;
+        case 4096:
+            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
+                //    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
-                if (magnitudes[i]>max[1]){
-                        max[0]=i*freq;
-                        max[1]=magnitudes[i]; //Habilitar solo para debuggeo
+                if (magnitudes[i]>max[1]) {
+                    max[0]=i*freq;
+                    max[1]=magnitudes[i]; //Habilitar solo para debuggeo
                 }
             }
-            pc.printf("\n\r%f", max[0]);
-            //Se reinician las variables máximas
+            
+            if (25<max[0] && max[0]<260) {
+                x="04,000 RPM";
+            } else if (260<max[0] && max[0]<325) {
+                x="05,000 RPM";
+            } else if (600<max[0] && max[0]<780) {
+                x="05,000 RPM";
+            } else if (1301<max[0] && max[0]<1500) {
+                x="05,000 RPM";
+            } else if (326<max[0] && max[0]<392) {
+                x="06,000 RPM";
+            } else if (780<max[0] && max[0]<900) {
+                x="06,000 RPM";
+            } else if (2000<max[0] && max[0]<2800) {
+                x="06,000 RPM";
+            } else if (393<max[0] && max[0]<450) {
+                x="07,000 RPM";
+            } else if (900<max[0] && max[0]<1010) {
+                x="07,000 RPM";
+            } else if (451<max[0] && max[0]<519) {
+                x="08,000 RPM";
+            } else if (1010<max[0] && max[0]<1149) {
+                x="08,000 RPM";
+            } else if (520<max[0] && max[0]<584) {
+                x="09,000 RPM";
+            } else if (1150<max[0] && max[0]<1168) {
+                x="09,000 RPM";
+            } else if (584<max[0] && max[0]<700) {
+                x="10,000 RPM";
+            } else if (1168<max[0] && max[0]<1300) {
+                x="10,000 RPM";
+            } else if (max[0]==0) {
+                x="00,000 RPM";
+            }
+            lcd_count++;
+            if(lcd_count == 5){
+                lcd.cls();
+                int test=  (int) (max[0] + 0.5); 
+                lcd.locate(0,0);
+                lcd.printf("%s",x);
+                lcd.locate(0,1);
+                lcd.printf("%s","FFT: ");
+                lcd.printf("%i",test);
+                lcd_count = 0;
+            }
+            
             max[0]=0;
             max[1]=0;
-            
+
             // Se vuelve a incertar la interrupción de muestreo
             samplingBegin();
         }