Cómo configurar un servo para girar solo una vez bajo una condición
Quiero hacer una puerta usando un servo de 360 grados y un sensor ultrasónico, aquí uso condicionales if-else. Cuando las condiciones ultrasónicas son >= 10 cm, el servo debe girar una vez hacia la derecha durante 5 segundos, y viceversa. Pero cuando alcanza la condición >= 10 cm, donde el servo continúa girando sin detenerse, ¿cómo hacer que se detenga en 1 rotación? y también necesito los datos de distancia del sensor ultrasónico para mostrar.
Soy principiante en esto, estaré muy agradecido por la ayuda.
Este es mi código:
“`cpp
#include <wire.h>
#include <servo.h> // Biblioteca de Servo
#define echoPin 3 // Pin de triguero, pin de eco
#define triggerPin 4
int tiempo;
int distancia;
int distancia_final;
Servo servo;
void setup()
{
Serial.begin(9600);
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop()
{
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
tiempo = pulseIn(echoPin, HIGH);
distancia = tiempo * 0.034 / 2;
Serial.print(distancia);
Serial.print(" CM");
delay(100);
servo.attach(9);
if(distancia <= 10)
{
servo.write(2000);
delay(5000);
}
else if(distancia >= 30)
{
servo.write(1000);
delay(5000);
}
else
{
servo.write(1500);
delay(1000);
}
servo.detach();
}
“`</servo.h></wire.h>
davy.ai
Solución
Para hacer que el servo se detenga en una rotación cuando se alcance la condición
>= 10cm
, podemos agregar un buclewhile
que compruebe si la posición actual del servo es mayor o igual a la posición inicial más 360 grados. Una vez que el servo ha girado 360 grados, saldrá del buclewhile
y se desconectará del pin.Aquí está el código modificado:
Para mostrar los datos de distancia del sensor ultrasónico, puedes usar la función
Serial.print()
, como se muestra en el código anterior. Los datos de distancia se imprimirán en el monitor serial, al que se puede acceder haciendo clic en el botón Serial Monitor en el IDE de Arduino (o presionandoCtrl + Shift + M
).</servo.h></wire.h>