Go Down

Topic: Problema con codigo Motores y sensores (Read 1 time) previous topic - next topic

soritass

Jun 02, 2012, 03:31 am Last Edit: Jun 02, 2012, 05:53 am by soritass Reason: 1
Me ayudan a resolver porque no sirve mi codigo me parece que todo esta bn pero al conectar los sensores alos pines correctos solo se prende un motor porfavor alguien que me ayude



int sensor1 = 3;
int sensor2 = 4;
int motor1 = 6;
int motor2 = 5;
int val = 0;
int val2 = 0;
void setup()
{
pinMode(motor1,OUTPUT);
pinMode(motor2,OUTPUT);
pinMode(sensor1, INPUT);
pinMode(sensor2, INPUT);
}
void loop()
{
val=digitalRead(sensor1);
val2=digitalRead(sensor2);
if(val > 0 && val2 > 0)
{
 digitalWrite(motor1, LOW);
 digitalWrite(motor2, LOW);
}

else if(val < 0 && val2 > 0)
{
 digitalWrite(motor1, HIGH);
 digitalWrite(motor2, LOW);
}

else if(val < 0 && val2 < 0)
{
 digitalWrite(motor1, HIGH);
 digitalWrite(motor2, HIGH);
}

else if(val > 0 && val2 < 0);
{
 digitalWrite(motor1, LOW);
 digitalWrite(motor2, HIGH);
}
}

miniduino

Has probado en poner serial.print para las variables val y val2 podría ser que el valor fuera constante y siempre entrara en el mismo caso.

Las conexiones son correctas? El motor es acorde al arduino? Si meto un motor demasiado grande mi arduino tampoco lo mueve..

Porque usáis un int para definir un pin en lugar de un define?

Si cambias los motores de sitio entonces se mueve el otro motor? Es decir, funcionan los motores correctamente ?

A priori el programa me parece correcto... Creo que el problema esta en el conexionado

soritass

#2
Jun 02, 2012, 04:10 am Last Edit: Jun 02, 2012, 05:54 am by soritass Reason: 1
los motores son a 5v y la conexion la e echo bn pero el problama no es la conexion ya que si  utlizo otra fuente que nosea el arduino para los sensores y los motores lo corre bn y no se como usar serial.print soy practicamente nuevo con esto de el arduino Otra cosa es que estoy usando sensores Qrd1114 nose si esto afecte ya que la señal entra en el arduino


jorgepl

#3
Jun 02, 2012, 08:26 am Last Edit: Jun 02, 2012, 08:31 am by jorgepl Reason: 1
Suponiendo que todo el conexionado está bien, que los sensores funcionan correctamente y que está todo el hardware bien diseñado (cosa que no sabemos porque no has puesto ningún esquemático ni nada...pero nos fiamos), vamos a ver el software.

Suponiendo que los sensores Qrd1114 que utilizas devuelven una señal digital adecuada, es decir, un pulso de duración x. Esto el Arduino lo leerá en digitalRead() como HIGH o LOW.

http://arduino.cc/en/Reference/Constants

Como puedes ver en el link, LOW es cero y HIGH es un valor no cero (creo que realmente es 1). El problema es que en tu código utilizas comparativas de mayor y menor que cuando deberías utilizar ==LOW y ==HIGH

Code: [Select]

if(val == HIGH && val2 == LOW)
{
  digitalWrite(motor1, LOW);
  digitalWrite(motor2, LOW);
}

else if(val == LOW && val2 == HIGH)
{
  digitalWrite(motor1, HIGH);
  digitalWrite(motor2, LOW);
}
...


PD: La próxima vez utiliza el botón # para poner código (en la barra de iconos encima de los smileys), harás más legible tu post.

miniduino

Que gran "cagada" la mía es cierto digitalread devuelve high o low !!! Para valores hay que usar analogread en los pines analógicos. Es por eso que falla el código.

jorgepl

Los sensores que utiliza no son analógicos, devuelven un pulso al detectar el paso de un objeto a una distancia de hasta 1 cm., por lo tanto debe utilizar digitalRead(), pero con HIGH y LOW

Go Up