direction change of motors

Hi guys,

i'm trying to make a toy car that is controlled by a joystick. for testing purposes, i've currently hooked up 2 3v dc motors to my l298n. i've managed to make it go forwards and backwards. However when i move the joystick left and right (on the x-axis) it does not turn as it should.

int blue = A0;
int yellow = A1;
int motor1_ENA = 7;
int motor1_IN1 = 5;
int motor1_IN2 = 6;

int motor2_ENB = 12;
int motor2_IN3 = 10;
int motor2_IN4 = 11;


//x-axis

void x_axis_speed ()
{
  if( analogRead(A0) >= 110 && analogRead(A0) < 318) // 59-284
  {
    digitalWrite(motor1_ENA , HIGH);
    analogWrite ( motor1_IN1, 200);  
    analogWrite ( motor1_IN2, 0);
    
    digitalWrite(motor2_ENB , HIGH);
    analogWrite ( motor2_IN3, 0);  
    analogWrite ( motor2_IN4, 200);
  }
  
    if( analogRead(A0) >= 318 && analogRead(A0) < 502) // 285-501
    {
      digitalWrite(motor1_ENA , HIGH);
      analogWrite ( motor1_IN1, 70);  
      analogWrite ( motor1_IN2, 0);
      
      digitalWrite(motor2_ENB , HIGH);
      analogWrite ( motor2_IN3, 0);  
      analogWrite ( motor2_IN4, 70);
    }
    
      if( analogRead(A0) >=502  && analogRead(A0) < 522) // 502-521
      {
        digitalWrite(motor1_ENA , LOW);
        digitalWrite(motor2_ENB , LOW);
      }
      
        if( analogRead(A0) >= 522 && analogRead(A0) < 736) // 522-735
        {
          digitalWrite(motor1_ENA , HIGH);
          analogWrite ( motor1_IN1, 0);  
          analogWrite ( motor1_IN2, 70);
          
          digitalWrite(motor2_ENB , HIGH);
          analogWrite ( motor2_IN3, 70);  
          analogWrite ( motor2_IN4, 0);
        }
        
          if( analogRead(A0) >= 736 && analogRead(A0) <= 960) // 736-960
          {
              digitalWrite(motor1_ENA , HIGH);
              analogWrite ( motor1_IN1, 0);  
              analogWrite ( motor1_IN2, 200);
              
              digitalWrite(motor2_ENB , HIGH);
              analogWrite ( motor2_IN3, 200);  
              analogWrite ( motor2_IN4, 0);
          }
}

//y-axis
void y_axis_speed ()
{
  if( analogRead(A1) >= 59 && analogRead(A1) < 285) // 59-284
  {
    digitalWrite(motor1_ENA , HIGH);
    analogWrite ( motor1_IN1, 200);  
    analogWrite ( motor1_IN2, 0);
    
    digitalWrite(motor2_ENB , HIGH);
    analogWrite ( motor2_IN3, 200);  
    analogWrite ( motor2_IN4, 0);
  }
  
    if( analogRead(A1) >= 285 && analogRead(A1) < 502) // 285-501
    {
      digitalWrite(motor1_ENA , HIGH);
      analogWrite ( motor1_IN1, 70);  
      analogWrite ( motor1_IN2, 0);
      
      digitalWrite(motor2_ENB , HIGH);
      analogWrite ( motor2_IN3, 70);  
      analogWrite ( motor2_IN4, 0);
    }
    
      if( analogRead(A1) >=502  && analogRead(A1) < 522) // 502-521
      {
        digitalWrite(motor1_ENA , LOW);
        digitalWrite(motor2_ENB , LOW);
      }
      
        if( analogRead(A1) >= 522 && analogRead(A1) < 736) // 522-735
        {
          digitalWrite(motor1_ENA , HIGH);
          analogWrite ( motor1_IN1, 0);  
          analogWrite ( motor1_IN2, 70);
          
          digitalWrite(motor2_ENB , HIGH);
          analogWrite ( motor2_IN3, 0);  
          analogWrite ( motor2_IN4, 70);
        }
        
          if( analogRead(A1) >= 736 && analogRead(A1) <= 960) // 736-960
          {
              digitalWrite(motor1_ENA , HIGH);
              analogWrite ( motor1_IN1, 0);  
              analogWrite ( motor1_IN2, 200);
              
              digitalWrite(motor2_ENB , HIGH);
              analogWrite ( motor2_IN3, 0);  
              analogWrite ( motor2_IN4, 200);
          }
}
void setup()
{
  Serial.begin(9600);
  pinMode(motor1_ENA, OUTPUT);
  pinMode(motor1_IN1, OUTPUT);
  pinMode(motor1_IN2, OUTPUT);
  
  pinMode(motor2_ENB, OUTPUT);
  pinMode(motor2_IN3, OUTPUT);
  pinMode(motor2_IN4, OUTPUT);
}

void loop()
{
  x_axis_speed();
  y_axis_speed();
    
  Serial.print(analogRead(A0));
  Serial.print("\t");
  Serial.print(analogRead(A1));
  Serial.print("\t");
  Serial.print("\n");
  delay(1000);
}

what i'm trying to achieve is:
joystick = output(motor)
forwards = forwards
backwards = backwards
left = motor A reverse, motor B forwards
right = motor B reverse, motor A forwards

if it's possible, i would like to turn the car gradually, for example, i turn joystick left, motor A runs at 50% pwm and motor B runs at 100% but i don't know how to program it so..

Any reply and feedback will be greatly appreciated! :slight_smile:

try changeng your anolog input pins, I was haveing issues with reading data from a 2 axis joystick through A0 &A1 useing the arduino motor shield. then I saw that A0 &A1 are used for current sensing. after I changed to A4 & A5 i started getting the readings I was supose to. Im just haveing trouble getting my motors to reverse, Im still learning.

hope that helps