// Определение пинов для двигателей (стандарт для платы 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);
}