Uso del módulo Joystick para comandar Módulo l298n

Buenas Tardes

Estoy teniendo un problema con el siguiente código el cuál hice para un robot en el que utilizo principalmente servos y motores.

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

Servo ServoCintura;
Servo ServoBrazoDer;
int pot1 = 2;
int pot2 = 3;
int val1;
int val2;

const int ServoHombroPin = 2;
const int ServoCodoPin = 3;
const int TriggerPin = 5;
const int EchoPin = 6;
//Maxima distancia = 200
NewPing sonar(TriggerPin, EchoPin, 200);
Servo ServoHombro;
Servo ServoCodo;



int ENA = 9;
int IN1 = 8;
int IN2 = 7;
int IN3 = 13;
int IN4 = 12;
int ENB = 11;

int xPin = A0;
int yPin = A1;
int xPosition = 511;
int yPosition = 511;

unsigned long tiempo = 0;
unsigned long t_actualizado = 0;
unsigned long t_delay = 100;

void setup() {
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENB, OUTPUT);
 
  pinMode(xPin, INPUT);
  pinMode(yPin, INPUT);



  ServoCintura.attach(0);
  ServoBrazoDer.attach(1);

  ServoHombro.attach(ServoHombroPin);
  ServoCodo.attach(ServoCodoPin);
}



void loop() {
  
  loopMotores();
  loopBrazos();
  
  }



void loopMotores() {
  xPosition = analogRead(xPin);
  yPosition = analogRead(yPin);
    
  //IR HACIA ADELANTE
  if((xPosition > 256 && xPosition < 768) && (yPosition < 482)){
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    analogWrite(ENA, 255);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    analogWrite(ENB, 255);
    delay(100);
      }else{
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
      }
    
  //IR HACIA ATRAS
  if((xPosition < 768 && xPosition > 256) && (yPosition > 582)){
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    analogWrite(ENA, 255);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    analogWrite(ENB, 255);
    delay(100);
      }else{
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
      }

  //IR HACIA LA IZQUIERDA
  if((xPosition > 556) && (yPosition > 256 && yPosition < 768)){
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    analogWrite(ENA, 255);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    analogWrite(ENB, 255);
    delay(100);
      }else{
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
      }

    //IR HACIA LA DERECHA
  if((xPosition < 456) && (yPosition > 256 && yPosition < 768)){
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    analogWrite(ENA, 255);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    analogWrite(ENB, 255);
    delay(100);
      }else{
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
      }
      
    delay(10);
   
  }



void loopBrazos() {
  val1 = analogRead(pot1);
  val2 = analogRead(pot2);
  val1 = map(val1, 0 ,1023, 0, 180);
  val2 = map(val2, 0 ,1023, 0, 180);
  ServoCintura.write(val1);
  ServoBrazoDer.write(val2);

  int cm = sonar.ping_cm();
  Serial.println(cm);
  if(cm < 40 && cm > 10){
    if(cm < 30){
    ServoHombro.write(80);
    delay(100);
    ServoCodo.write(90);
      }else{
      ServoHombro.write(180);
      delay(100);
      ServoCodo.write(0);}
            }else{
              ServoCodo.write(0);
              delay(100);
              ServoHombro.write(180);
              }
    delay(100);
  }

Mi problema se encuentra en que los motores efectúan sus giros de forma interrumpida. Es decir, giran durante un muy breve lapso de tiempo, se detienen, y luego vuelven a girar, y así sucesivamente.

Este código lo arme de otros 2 códigos que hice. Ambos códigos funcionan a la perfección por separado, sin embargo cuando los junte en un solo código (código de arriba), comenzó el inconveniente.

Por este motivo yo deduzco que mi error está en el código.

Soy nuevo en esto, por lo que estoy abierto a cualquier aclaración.

Estoy utilizando 1 Arduino UNO alimentado con 2 celdas de 3,7V, 4 servos, el módulo joystick para comandar el módulo l298 alimentado con 6 celdas 3,7V, y dos motores DC conectados al mismo.

Espero que alguien pueda ayudarme a solucionar mi problema pronto ya que es un proyecto que necesito terminar con urgencia.

GRACIAS!!!

Espero que alguien pueda ayudarme a solucionar mi problema pronto ya que es un proyecto que necesito terminar con urgencia.

Bienvenido al foro Arduino.
Lo primero que te diré es que te calmes, tu urgencia no es la nuestra.

Si has copiado dos códigos y ahora al unirlos no funcionan entonces tu no has aprendido lo suficiente para entender lo que ocurre.
La mejor manera de hacerlo es agregar carteles por el monitor serie que te indiquen que esta haciendo el programa cuando tu crees que debería estar haciendo otra cosa.
Asi que agrega

Serial.begin(velocidad); // elige los baudios

y luego indica con esto en cada parte del programa para saber si va para un lado o para otro

Serial.println("Lo que quieras");

De este simple modo tu podras seguir el funcionamiento del programa.