Pages: [1]   Go Down
Author Topic: problemas con comparacion de datos analogicos  (Read 796 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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;
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Edison Member
*
Karma: 17
Posts: 1407
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

0
Offline Offline
Full Member
***
Karma: 1
Posts: 247
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: June 12, 2011, 04:11:02 am by Inizul » Logged


0
Offline Offline
Jr. Member
**
Karma: 5
Posts: 72
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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í.
« Last Edit: June 10, 2011, 08:33:08 am by xlopez » Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Trabajando en ...

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

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

Pages: [1]   Go Up
Jump to: