TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: fydo en 27 de Junio de 2016, 11:39:31

Título: S.O.S. Novato con arduino UNO. ¿Como guardar datos de una entrada analogica?
Publicado por: fydo en 27 de Junio de 2016, 11:39:31
Buenas!! Soy nuevo en el foro. También lo soy en el mundo de arduino. Aunque decir que trabajo con Robots industriales desde hace varios años (Yaskawa,Fanuc...) Pero el mundo arduino lo tenia desconocido, el cual voy conociendo poco a poco. Cosa que me está fascinando. 
Empecé con los kit de primeros pasos de arduino y ahora ya voy haciéndome mis pequeños proyectos personales (Cosa de poco). De eso os quería hablar. A ver si me podéis ayudar con este ultimo proyecto que no me termina de encajar. Supongo que es lo mas simple y quizá (Seguro!!) exista una manera mas rápida y sencilla de la que estoy realizando.

Me estoy haciendo un Alcoholímetro con un sensor MQ3 para que este detecte o no el nivel de alcohol en aire. Le he metido una lcd para que refleje el momento de soplar y luego según la condición ponga en pantalla un texto u otro.
El problema lo tengo en la función "sopla". Creo una variable float y luego esa le digo que sea la de lectura analógica. Pues esa lectura la tengo en una condición "While (millis)" Durante 5 segundos aparece en pantalla sopla y al mismo tiempo le hago la lectura a la variable analógica para luego valorar la condición. Algo así:

void Sopla()
{
        float guardar;
        float valor_alcohol;
        float valor=Serial.read();
       
      lcd.clear();//Limpiamos pantalla lcd
      lcd.setCursor(6, 0); //Moverlo a la primera columna de nuevo
      lcd.print("SOPLA!! ");
      
      unsigned long startTime = millis();
       
        while(millis() - startTime < 4000)//ejecutar funcion durante 5 sg     {
         valor_alcohol=analogRead(A0);
         delay(10);
         float porcentaje=(valor_alcohol/1000);
         float guardar=porcentaje;
         Serial.println(guardar);            // Envia al Serial el porcentaje
          Serial.println(' ');   
        
        guardar=Serial.read();
                              
     }
}

El caso es que cuando salgo de esa función entro en otra que compara las condiciones, de si el valor de alcohol es mayor de o menor de ejecuta esto o lo otro. ( if(valor_alcohol > valor_limite) ) Pues este valor siempre me sale bajo, pues como le digo que que la variable valor_alcohol es lo que le mande el sensor... Pues al dejar de soplar y empezar a leer la condición, este valor empieza a bajar en ese pequeño instante y ya no me da el valor real.
Necesito guardar el valor de la variable Valor_alcohol justo antes de salir en alguna otra variable que sea fija para que no baje al no detectar el soplido. No sé si me he explicado bien.. :oops:
Espero que me podáis ayudar y ya tener este problema para futuros proyectos.

PD: Supongo que la solución a este problema sería dejar de beber  :D 
Título: Re:S.O.S. Novato con arduino UNO. ¿Como guardar datos de una entrada analogica?
Publicado por: PalitroqueZ en 27 de Junio de 2016, 12:10:14
Hola fydo

y si declaras Valor_alcohol fuera de la función? es decir como una variable global?
Título: Re:S.O.S. Novato con arduino UNO. ¿Como guardar datos de una entrada analogica?
Publicado por: fydo en 27 de Junio de 2016, 13:37:08
Hola fydo

y si declaras Valor_alcohol fuera de la función? es decir como una variable global?
Hola! Muchas gracias por contestar. En realidad si que lo tengo fuera de la función. Lo puse ahí para que vierais que la tenia declarada como float

Título: Re:S.O.S. Novato con arduino UNO. ¿Como guardar datos de una entrada analogica?
Publicado por: fydo en 28 de Junio de 2016, 05:02:05
En realidad el Sketch se quedaría algo así. He modificado algo, cuando llegue a casa probaré  a ver que tal. LAs funciones que me interesan son las de "Sopla" y "Comprobar"
(ya se que es una locura, de ahí mis dudas...)

https://codebender.cc/sketch:336749