#include <Arduino.h>

const byte AIN1 = 12; // Лівий мотор: вперед
const byte AIN2 = 11; // Лівий мотор: назад
const byte PWMA = 10; // Швидкість лівого мотора
const byte BIN1 = 5; // Правий мотор: вперед
const byte BIN2 = 4; // Правий мотор: назад
const byte PWMB = 3; // Швидкість правого мотора
const int MAX_SPEED = 230;
const int SPEED = 180;
const unsigned long RUN_MS = 2000;
const unsigned long STOP_MS = 1000;

void setMotor(byte in1, byte in2, byte pwm, int speed) {
  speed = constrain(speed, -MAX_SPEED, MAX_SPEED);

  if (speed > 0) {
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
  } else if (speed < 0) {
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
  } else {
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
  }

  analogWrite(pwm, abs(speed)); // Знак — напрямок, число — швидкість
}

void drive(int left, int right) {
  setMotor(AIN1, AIN2, PWMA, left);
  setMotor(BIN1, BIN2, PWMB, right);
}

void setup() {
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);
  pinMode(PWMA, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);
  pinMode(PWMB, OUTPUT);
  Serial.begin(115200);
}

void loop() {
  Serial.println("Forward");
  drive(SPEED, SPEED);
  delay(RUN_MS);
  Serial.println("Stop");
  drive(0, 0);
  delay(STOP_MS);
  Serial.println("Backward");
  drive(-SPEED, -SPEED); // Мінус — обертання назад
  delay(RUN_MS);
  Serial.println("Stop");
  drive(0, 0);
  delay(STOP_MS);
}
