Forum Replies Created
- AuthorPosts
- ironworker221Participant
Im using a L298N with an aurduino uno, trying to run two dc motors with a joystick, can anyone tell me what is wrong with the code i am using.Would like to run one motor on the x axis and one motor on the y axis.
// Motor A
int enA = 9;
int in1 = 8;
int in2 = 7;// Motor B
int enB = 3;
int in3 = 5;
int in4 = 4;// Joystick Input
int joyVert = A0; // Vertical
int joyHorz = A1; // Horizontal// Motor Speed Values – Start at zero
int MotorSpeed1 = 0;
int MotorSpeed2 = 0;// Joystick Values – Start at 512 (middle position)
int joyposVert = 512;
int joyposHorz = 512;void setup()
{
// Set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);// Start with motors disabled and direction forward
// Motor A
digitalWrite(enA, LOW);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);// Motor B
digitalWrite(enB, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);}
void loop() {
// Read the Joystick X and Y positions
joyposVert = analogRead(joyVert);
joyposHorz = analogRead(joyHorz);// Determine if this is a forward or backward motion
// Do this by reading the Verticle Value
// Apply results to MotorSpeed and to Directionif (joyposVert < 460)
// This is Backward
// Set Motor A backward
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);// Set Motor B backward
if (joyposHorz < 460)
{digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);//Determine Motor Speeds
// As we are going backwards we need to reverse readings
joyposVert = joyposVert – 460; // This produces a negative number
joyposVert = joyposVert * -1; // Make the number positivejoyposHorz = joyposHorz – 460; // This produces a negative number
joyposHorz = joyposHorz * -1; // Make the number positiveMotorSpeed1 = map(joyposVert, 0, 460, 0, 255);
MotorSpeed2 = map(joyposHorz, 0, 460, 0, 255);}
else if (joyposVert > 564)
{
// This is Forward// Set Motor A forward
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);// Set Motor B forward
}
else if (joyposHorz > 564)
{digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);//Determine Motor Speeds
MotorSpeed1 = map(joyposVert, 564, 1023, 0, 255);
MotorSpeed2 = map(joyposHorz, 564, 1023, 0, 255);}
else
{
// This is StoppedMotorSpeed1 = 0;
MotorSpeed2 = 0;}
if (MotorSpeed1 < 8)MotorSpeed1 = 0;
if (MotorSpeed2 < 8)MotorSpeed2 = 0;// Set the motor speeds
analogWrite(enA, MotorSpeed1);
analogWrite(enB, MotorSpeed2);}
- AuthorPosts