motor paso a paso no gira izquierda ni derecha

Hola tengo probles con este codigo .Controlo un robot a traves de monitor serial con rasberry y arduino uno, avanza y retrocede pero no responden los giros izquierda o derecha. Soy novato en esto disculpen y gracias por cualquier salvavidas.

#include <Servo.h>

#define enPin 8

#define lDir 5
#define lStep 2

#define rDir 6
#define rStep 3

int stepDelay = 700;
bool containerOpen = false;

Servo lid;

void step(bool dir, int dirPin, int stepPin){
  digitalWrite(dirPin, dir);
  
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(stepDelay);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(stepDelay);

}

void front(int distance){
  int steps = 300*distance/23;
  
  for (int i = 0; i<steps; i++){
    step(true, lDir, lStep);
    step(true, rDir, rStep);
  }
}

void back(int distance){
  int steps = 300*distance/23;
  
  for (int i = 0; i<steps; i++){
    step(false, lDir, lStep);
    step(false, rDir, rStep);
  }
}

void left(int angle){
  int steps = 300*angle/23;
  
  for (int i = 0; i<steps; i++){
    step(true, lDir, lStep);
    step(true, rDir, rStep);
  }
}

void right(int angle){
  int steps = 300*angle/23;
  
  for (int i = 0; i<steps; i++){
    step(true, lDir, lStep);
    step(true, rDir, rStep);
  }
}

void openContainer(){
  lid.write(100);
}

void closeContainer(){
  lid.write(10);
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  lid.attach(9);
  
  pinMode(enPin, OUTPUT);
  
  pinMode(lStep, OUTPUT);
  pinMode(lDir, OUTPUT);
  pinMode(rStep, OUTPUT);
  pinMode(rDir, OUTPUT);

  digitalWrite(enPin, LOW); //pulled LOW to enable drivers
}

void loop() {
  // put your main code here, to run repeatedly:
  if (Serial.available() > 0){
    char data = Serial.read();
    if (data == '1') front(40);
    else if (data == '2') left(5);
    else if (data == '3') right(5);
    else if (data == '4') back(40);
    else if (data == '5') openContainer();
    else if (data == '6') closeContainer();
  }
}

Tus rutinas para avanzar retroceder no difieren mucho de left y right de modo que la única diferencia visible esta en el valor que envias.

Girar a izquierda o a derecha no se puede hacer con un solo motor a menos que el servo controle el giro y el motor solo se mueva hacia adelante como estas haciendo. No veo control de servo coincidente con el movimiento izquierda o derecha.
Los giros se hacen con dos motores, uno se mantiene en la posición y el otro gira.

primero muchas gracias por responder tan pronto. si entiendo bien tenndria que cambiar true y false segun corresponda. Me quedaria algo asi

}

void left(int angle){
  int steps = 300*angle/23;
  
  for (int i = 0; i<steps; i++){
    step(true, lDir, lStep);
    step(false, rDir, rStep);
  }
}

void right(int angle){
  int steps = 300*angle/23;
  
  for (int i = 0; i<steps; i++){
    step(false, lDir, lStep);
    step(true, rDir, rStep);
  }
}

Prueba a ver de ese modo.

Perfecto ahora gira como un bailarin :). otra consulta se supone que deberia haber una funcion para detener el robot a traves de un sensor ultrasonido. no lo veo en el script. donde deberia colocarlo para que ante una distancia determinada se detenga y/o gire . gracias

Usa la librería NewPing.h y solo ponlo al comenzar el loop.
Lee la distancia y si es menor a determinado valor lo detienes

este simple código resuelve tu problema

#include <NewPing.h>

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
}

void loop() {
  int distancia;

  delay(50);                      // Lee cada 50 mseg
  distancia = sonar.ping() /US_ROUNDTRIP_CM;
  if (distancia < 50 ) {
      Serial.print(distancia); 
      Serial.println("cm");
      // detener ruedas.
  }

 // resto del código
}

Muchas gracias

Hola olvide decir que utilizo un shield cnc con el arduino uno el trig del sensor lo conecto a X+ y echo a Y+ del shield como los defino en el script. espero ser claro en la consulta gracias