// L298N steering
// https://wokwi.com/projects/472342292263993345
// https://forum.arduino.cc/t/car-does-not-go-backwards/1455849
const byte leftFront = 6;
const byte leftRear = 9;
const byte leftEnable = 8;
const byte rightFront = 10;
const byte rightRear = 11;
const byte rightEnable = 12;
void setup() {
Serial.begin(115200);
pinMode(leftFront, OUTPUT);
pinMode(leftRear, OUTPUT);
pinMode(leftEnable, OUTPUT);
pinMode(rightFront, OUTPUT);
pinMode(rightRear, OUTPUT);
pinMode(rightEnable, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(leftEnable, HIGH);
digitalWrite(rightEnable, HIGH);
}
void loop() {
forward(); stop();
reverse(); stop();
rotateRight(); stop();
rotateLeft(); stop();
skidRightForward(); stop();
skidLeftForward(); stop();
skidRightReverse(); stop();
skidLeftReverse(); stop();
}
void forward() {
Serial.println("FORWARD");
moveMotors(HIGH, LOW, HIGH, LOW);
}
void reverse() {
Serial.println("REVERSE");
moveMotors(LOW, HIGH, LOW, HIGH);
}
void rotateRight() {
Serial.println("ROTATE RIGHT");
moveMotors(LOW, HIGH, HIGH, LOW);
}
void rotateLeft() {
Serial.println("ROTATE LEFT");
moveMotors(HIGH, LOW, LOW, HIGH);
}
void skidRightForward() {
Serial.println("SKID RIGHT FORWARD");
moveMotors(HIGH, LOW, LOW, LOW);
}
void skidRightReverse() {
Serial.println("SKID RIGHT REVERSE");
moveMotors(LOW, LOW, LOW, HIGH);
}
void skidLeftForward() {
Serial.println("SKID LEFT FORWARD");
moveMotors(LOW, LOW, HIGH, LOW);
}
void skidLeftReverse() {
Serial.println("SKID LEFT REVERSE");
moveMotors(LOW, HIGH, LOW, LOW);
}
void stop() {
Serial.println("STOP");
moveMotors(LOW, LOW, LOW, LOW);
}
void moveMotors(bool leftFrontState, bool leftRearState,
bool rightFrontState, bool rightRearState) {
digitalWrite(leftFront, leftFrontState);
digitalWrite(leftRear, leftRearState);
digitalWrite(rightFront, rightFrontState);
digitalWrite(rightRear, rightRearState);
delay(777);
}