Go Down

Topic: problemas con comparacion de datos analogicos (Read 1 time) previous topic - next topic

nacho_1982

Hola!!! Soy nuevo en esto de arduino. Estoy intentado comparar dos valores analogicos y que dependiendo del valor el led se apague, no consigo que el led se apague(pin13). Tengo un sensor de presion y otro de altura, funcionan de 0 a 5volt y proporcionan una corriente de 0 a 40mA.
los valores de las medidas que he sacado son:
1,5 metros - 3,46 volt.  presion:2,6 volt
2 metros - 3,2volt.  presion:2.18 volt
3 metros - 2.88 volt.  presion:1.8 volt
4 metros - 2.4 volt.  presion:1.7 volt
5 metros - 1.9 volt.  presion:1.7 volt
6 metros - 1.6 volt.  presion:1.7 volt

He conectado directamente una R de 10k en el  estremo + y otra en el estremo GND. el terminal negativo de los sensores va al gnd del arduino con la R de 10k

Este es el programa que tengo hecho, no esta acabado porque estoy haciendo pruebas.


int analogPin = A14;     // high sensor
int analogPin1 = A6;   // presure sensor
int val = 0;
int val1 = 0;// declaración de la variable en la que se almacenará el valor leído por el conversor.
int analogforward = 13;      // analog imput
void setup()
{

pinMode (analogPin, INPUT);
pinMode (analogPin1, INPUT);
pinMode (analogforward, OUTPUT);

}
void loop()
{
ini2:  digitalWrite (analogforward, HIGH);
ini:val = analogRead(analogPin);    // lee el valor de tensión del pin
  val1 = analogRead(analogPin1);
in:val = analogRead(analogPin);   //for  proves for this line
     val1 = analogRead(analogPin1);
     if ( val < 779){
        if( val1 > 300){   
     digitalWrite (analogforward, LOW);
     goto in;
       
        }}
    //hasta aqui (finish)
 
    goto ini2;
}

nacho_1982

se supone que los valores de presion no deben superar dicho valores, si los supera se apaga el led.

Sergegsx

se me ocurre que lo primero podrias imprimir los valores que esta leyendo del puerto analogico. si los muestras por serial podras ver si las lecturas son correctas y utilizarlo de debug.

luego, no se si cuando defines un pin puedes hacerlo con la A delante. es decir A14, yo siempre he puesto 14 y ya esta. pero no me hagas mucho caso en esto, como digo si añades un serial.print podras ver si esta leyendo como toca los sensores, a partir de ahi vamos a por el segundo paso q es ver si el led falla y porque.

el tema de los gotos no es muy recomendable y hace el codigo un poco confuso.


Inizul

#3
Jun 10, 2011, 02:40 pm Last Edit: Jun 12, 2011, 11:11 am by Inizul Reason: 1
Hola nacho
Varias cosas:
1 - Al inicio del loop siempre enciendes el LED, ("ini2:  digitalWrite (analogforward, HIGH);") luego aunque lo apagues si llega al valor nunca lo verás apagado, en todo caso brillará menos. Tal vez sea ese el error.
(Yo apagaría el Led si se cumple las condiciónes y si no se cumple lo encendería.)
2.- No tiene mucho sentido el GOTO ini2: ya que coincide con el pricipio y final del loop.
3.- ¿Por qué realizas 2 lecturas de analogPin y analogPin1?

Saludos

xlopez

#4
Jun 10, 2011, 03:31 pm Last Edit: Jun 10, 2011, 03:33 pm by xlopez Reason: 1
Madre mía, que código mas rebuscado.

A ver, lo que parece que quieres hacer es:

El led encendido por defecto.
Si el valor de la presión es mas de 300 y la altura menos de 779 apagar el led.

Eso se hace mas fácil así:

int analogPin = A14;     // high sensor
int analogPin1 = A6;   // presure sensor
int val = 0;
int val1 = 0;// declaración de la variable en la que se almacenará el valor leído por el conversor.
int analogforward = 13;      // analog imput
void setup()
{

pinMode (analogPin, INPUT);
pinMode (analogPin1, INPUT);
pinMode (analogforward, OUTPUT);

}
void loop()
{
 val = analogRead(analogPin);  
 val1 = analogRead(analogPin1);
 if (( val < 779) && (val1 > 300))
 {  
      digitalWrite (analogforward, LOW);
 } else
 {
      digitalWrite (analogforward, HIGH);
 } //fin del if
} //fin del loop


Hay que huir siempre de los GOTOs, complican el código y lo hacen ilegible.

Y si le das un nombre legible a las variables mejor: valPresion en vez de val1, valAltura en vez de val y así.

flico

Lo mejor si vas a usar sensores por bucle de corriente es que lo conectes a arduino con un operacional. Esta shield te vendra muy bien.
http://www.olimex.cl/product_info.php?cPath=76_78&products_id=792

Saludos.
Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Go Up