Que tal
estoy en un proyecto escolar y tengo el siguiente código pero al detectar un sensor se activa el servo correcto y enseguida el segundo, en ocasiones lo hace correctamente y otras se activan uno tras otro solo detectando uno de ellos cual sea.
requiero que solo se active el servo requerido según sea el caso y el otro permanezca desactivado o se active cada servo con su propio sensor. (como que se confunden )
de antemano agradezco su ayuda
se muy poco aun de esto.
gracias por sus aportaciones.
aquí el código que tengo hasta ahora.
#include <Ultrasonic.h> //libreria para ultrasonico
#include <Servo.h> //libreria servo
int trigPin1=11; //pin trig del primer sensor
int echoPin1=10; //trig echo primer sensor
int trigPin2=6; //pin trig del segundo sensor
int echoPin2=5; //trig echo segundo sensor
Servo puerta_croquetas; //nombro servos
Servo puerta_agua;
void setup()
{
Serial.begin (9600); //inicia monitor serial
pinMode(trigPin1, OUTPUT); //declara entradas y salidas de sensores
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
puerta_croquetas.attach(4);
puerta_agua.attach(7);
}
void loop()
//PUERTA CROQUETAS codigo para el primer servo
{
long duration1, distance1; // ajusta primer sensor
digitalWrite(trigPin1, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10); // Added this line
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = (duration1/2) / 29.1;
if (distance1 >= 35 || distance1 <= 1){ //calcula distancia de detección primer sensor
puerta_croquetas.write(180); //envia servo a 180 si se cumple el paramentro de deteccion
Serial.println("Out of range"); //imprime si esta fuera de rango
}
else {
puerta_croquetas.write(90); //envia servo a 90 si no detecta el sensor
Serial.print ( "Sensor1 "); //imprime distancia del sensor en cm
Serial.print ( distance1);
Serial.println("cm");
delay (2000); //espera dos segundos entre cada evento de deteccion
}
//PUERTA AGUA //codigo para el segundo servo
// Esperar 1 segundo entre mediciones
delay(1000); // espera 1 seguno antes de iniciar
long duration2, distance2; //ajusta segundo sensor
digitalWrite(trigPin2, LOW); //desactiva pin2
delayMicroseconds(2); // espera dos micrsegundos
digitalWrite(trigPin2, HIGH); //activa el pin 2
delayMicroseconds(10); // espera 10 microsegundos
digitalWrite(trigPin2, LOW); //desactiva pin2
duration2 = pulseIn(echoPin2, HIGH); //calcula la duración de la señal
distance2= (duration2/2) / 29.1; //calcula la distanci
if (distance2 >= 35 || distance2 <= 1){ conciona la distancia de deteccion entre 1 y 35 cm
puerta_agua.write(180); //envia servo a 180 grados
Serial.println("Out of range"); //imprime si esta fuera de rango
}
else {
puerta_agua.write(90); //envia servo a 90 grados
delay(2000); //espera 2 segundos
Serial.print("Sensor2 "); /imprime sensor 2
Serial.print(distance2); //imprime la distancia del sensor 2
Serial.println("cm"); //imprime cm
}
Moderador: Código editado con etiquetas