Загрузка данных


// Определение пинов для двигателей (стандарт для платы LART R-5)
const int motorL_PWM = 5;  // Левый мотор (ШИМ)
const int motorL_DIR = 4;  // Левый мотор (направление)
const int motorR_PWM = 6;  // Правый мотор (ШИМ)
const int motorR_DIR = 7;  // Правый мотор (направление)

// Определение пинов для датчиков линии
const int sensorL = A0;    // Левый датчик
const int sensorR = A1;    // Правый датчик

// Настройки скорости
const int speed = 150;     // Базовая скорость (0-255)

void setup() {
  pinMode(motorL_PWM, OUTPUT);
  pinMode(motorL_DIR, OUTPUT);
  pinMode(motorR_PWM, OUTPUT);
  pinMode(motorR_DIR, OUTPUT);
  
  pinMode(sensorL, INPUT);
  pinMode(sensorR, INPUT);
}

void loop() {
  // Читаем показания датчиков (0 - белое, 1 - черное)
  // В зависимости от типа датчиков может потребоваться инверсия (!digitalRead)
  bool left = digitalRead(sensorL);
  bool right = digitalRead(sensorR);

  if (left && right) {
    // ПЕРЕКРЕСТОК: оба датчика видят черное
    stopRobot();
    while(true); // Полная остановка до перезагрузки
  } 
  else if (!left && !right) {
    // Робот на линии или между линиями — едем вперед
    moveForward();
  } 
  else if (left && !right) {
    // Левый датчик на черном — поворачиваем налево
    turnLeft();
  } 
  else if (!left && right) {
    // Правый датчик на черном — поворачиваем направо
    turnRight();
  }
}

void moveForward() {
  digitalWrite(motorL_DIR, HIGH);
  analogWrite(motorL_PWM, speed);
  digitalWrite(motorR_DIR, HIGH);
  analogWrite(motorR_PWM, speed);
}

void turnLeft() {
  analogWrite(motorL_PWM, 0);      // Останавливаем левое колесо
  analogWrite(motorR_PWM, speed);  // Правое толкает вперед
}

void turnRight() {
  analogWrite(motorL_PWM, speed);  
  analogWrite(motorR_PWM, 0);
}

void stopRobot() {
  analogWrite(motorL_PWM, 0);
  analogWrite(motorR_PWM, 0);
}