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!