problema con sensor ultrasonico y servo

Lo que estoy intentando hacer es que un sensor ultrasónico vaya girando de 0 a 180º y si en un punto la distancia es menor de por ej 15 cm, se enciendan los motores en una dirección determinada.
el codigo es el siguiente:

#include <AFMotor.h>
#include <Servo.h>
#include <NewPing.h>

AF_DCMotor motor1(1, MOTOR12_64KHZ); 
AF_DCMotor motor3(4, MOTOR12_64KHZ);
#define TRIGGER_PIN  7
#define ECHO_PIN     6
#define MAX_DISTANCE 400
#define SERVO1_PWM 10
#define MOTOR1_A 2
#define MOTOR1_B 3
#define MOTOR2_A 1
#define MOTOR2_B 4
#define FORWARD 1
#define BACKWARD 2
#define BRAKE 3
#define RELEASE 4
Servo servo_1;
int i;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup()
{
        servo_1.attach(SERVO1_PWM);
        servo_1.write(0);
        delay(1000);
        servo_1.detach();
        Serial.begin(9600);
        motor1.setSpeed(200); // set the speed to 200/255
        motor3.setSpeed(200);
}



void loop()
{

 
        
        for(i=0;i<178;i+=2)
        {
              
               servo_1.attach(SERVO1_PWM);
               servo_1.write(i);
               delay(50);
               servo_1.detach();
               unsigned int uS = sonar.ping();
               int cm = uS / US_ROUNDTRIP_CM;
                
               if (cm <=20 && cm >=1) {
                motor1.run(FORWARD); 
                motor3.run(FORWARD);
                delay(1000);
                
               }
                
                
                Serial.print("Ping: ");
                Serial.print(cm);
                Serial.println("cm");
                
                }
  
  


        
        servo_1.attach(SERVO1_PWM);
        servo_1.write(0);
        delay(1000);
        servo_1.detach();

  
       
       }

el problema es que cuando encuentra un objeto a menos de 15cm, el sensor para pero no se encienden los motores.
que estoy haciendo mal?

Tu código reacciona a 20 cmts no a 15 como explicas pero eso es menor.

Probaste los motores por separado?
Escribe un código simple sin Ultrasónico que encienda apague cada motor y luego volvemos a ver que ocurre.

surbyte: Tu código reacciona a 20 cmts no a 15 como explicas pero eso es menor.

Probaste los motores por separado? Escribe un código simple sin Ultrasónico que encienda apague cada motor y luego volvemos a ver que ocurre.

los motores funcionan estan probados con otro código lo de la detección a 20cm funciona perfecto, el problema es que no encienden los motores

no se lo que falla ,pero porque conectas (.attach ) y desconectas (.detach) el servo a su pin cada vez que lo mueves? lo normal es hacerlo solo en el setup() y el servo ya queda conectado al pin,es decir esto solo debe aparecer una vez en el setup() y en ningun sitio mas:

servo_1.attach(SERVO1_PWM);

y esto borrarlo tambien :

servo_1.detach();

a no ser que tengas algun motivo para hacerlo.

jose: no se lo que falla ,pero porque conectas (.attach ) y desconectas (.detach) el servo a su pin cada vez que lo mueves? lo normal es hacerlo solo en el setup() y el servo ya queda conectado al pin,es decir esto solo debe aparecer una vez en el setup() y en ningun sitio mas:

servo_1.attach(SERVO1_PWM);

y esto borrarlo tambien :

servo_1.detach();

a no ser que tengas algun motivo para hacerlo.

gracias por el consejo ya esta borrado, si no tenia sentido a ver si alguien sabe por que no arrancan los motores

Lo que puede ocurrir es que la rutina Ultrasonido, use el timer que esta tambien en uso por los motores. Prueba sancando la rutina ultrasonico y ponle valores fijos que cambien en cada ciclo.

surbyte:
Lo que puede ocurrir es que la rutina Ultrasonido, use el timer que esta tambien en uso por los motores.
Prueba sancando la rutina ultrasonico y ponle valores fijos que cambien en cada ciclo.

perdon lor la ignorancia, pero…
como se hace eso?

Miras las librerías y buscas si comparten timers en común, si lo hacen tendras que usar otra cosa. Pero primero determina lo que te indiqué. Retira la librería ultrasónica y prueba si funciona todo bien.

pero no estoy utilizando la librería ultrasónica

La librería NewPing sirve para controlar el sensor ultrasónico, retírala (con todo lo relacionado) y prueba. Un saludo.

Como ya te dije y ratificó Xtrem3 esta librería comentala con

//#include <NewPing.h>

y lo mismo haces con todo lo que la referencie

surbyte:
Como ya te dije y ratificó Xtrem3 esta librería comentala con

//#include <NewPing.h>

y lo mismo haces con todo lo que la referencie

ya lo hice y los motores funcionan pero pierdo demás
como se puede hacer para que funcione todo?

ya lo solucione

utilizando las librerías ultrasonic y quitando new ping

muchísimas gracias!!