Ayuda con programacion de sensor y servo

Hola a todos, estoy armando un proyecto con arduino y tengo un sensor E18-D80NK que monte sobre un servo. programe el sensor para detectar obstaculos al frente y el codigo funciona pero cuando le agregue el codigo del servo que hace un paneo de 0 a 180 y de 180 a 0 con un siclo for se me complico, ya que al compilar no me muestra ningun error pero el servo llega a o y vuelve a 180 y se queda ahi y no se mueve mas y no me doy cuenta cual es el error. Como soy nuevo en el mundo de Arduino y es mi primer proyecto es que recurro a ustedes y desde ya muchas gracias. Les comparto el codigo para ver que me dicen. Saludos

#include <Servo.h>

int pos = 0;
int escucha=1;
Servo servo1;

void servosensor();
void sensor();
void setup() {

Serial.begin(9600); //Start serial communication boud rate at 9600
pinMode(5,INPUT); //Pin 5 as signal input
servo1.attach(11);
}
void loop() {
servosensor();
sensor();
}

void servosensor(){

for (pos = 0; pos <= 180; pos += 1) { // inicia el servo en 0 y suma de a uno hasta 180

servo1.write(pos); // escribe donde se encuentra el servo en pos
delay(10); // espera 15ms en el lugar
}
//delay (10);

for (pos = 180; pos >= 0; pos -= 1) { // desiende de 180 a 0
servo1.write(pos);
delay(20);
}

}

void sensor() {
while(escucha==1) {
delay(500);
if(digitalRead(5)==LOW) {
// detecta la colicion
Serial.println(" Collision Detected.");
}
else {
// si no detecta imprime...

Serial.println("No Collision Detected.");
}
}
}

Complicas la lectura a quienes te quieren ayudar si no pones el código entre los tags, si además tienes faltas ortográficas (las tienes hasta en los comentarios de tu código) y encima usas expresiones de tu país: (paneo) la cual he tenido que ir a buscar a la RAE.

¿Imaginas que todos hablásemos aquí con los términos y expresiones de cada zona? Además según la RAE se usa sólo para cámaras.

Respecto al error es por hacer copy & paste. Has unido dos cosas y ya.

Resumen a simple vista: una variable inicializada en 1 que no cambia su valor está en la condición del While que a su vez está dentro de la estructura loop.

El código hace lo que tú le has dicho, mueve el servo y después entra en un bucle infinito (sin salida) donde leerá el valor pero con un pedazo delay() de medio segundo.

Con lo cual aparte te invito a revisar la función millis() o micros() entre otras cosas.

Además no tiene sentido que el servo se mueva todo el rato, deberá moverse cuando la función sensor() retorne un boolean con el valor del infrarrojo.

EDITO: (ahora que tengo tiempo)

  • Quita el While que es el causante del problema al no darle una salida (bucle infinito).
  • Elimina la variable escucha que no la estás usando.
  • Cambia el void sensor() por boolean sensor() y hazle un return al valor del infarrojo.
  • Poner if en el loop -> if(sensor()) servosensor();
  • Si se trata de hacer un vehículo que detecte colisiones al girar el servo llamas nuevamente a sensor() y mueve la dirección en base a los ángulos que estén libre (Seleccionar uno / el primero encontrado)
  • Recomendación: usar timers con millis(), no delays