// Функция езды до перекрестка void goToCrossroad(int speed) { // Задаём пропорциональный коэффициент П-регулятора int Kp = 10; // Считываем показания датчиков линии int leftLine = readLineL(); int rightLine = readLineR(); // Следуем по линии, пока не встретим перекрёсток while (leftLine > LINE_BLACK && rightLine > LINE_BLACK) { // Считываем показания датчиков линии leftLine = readLineL(); rightLine = readLineR(); // Рассчитываем ошибку int err = leftLine - rightLine; // Формируем управляющий сигнал int out = Kp * err; // Ограничиваем максимальное и минимальное значения управляющего сингала out = constrain(out, -100, 100); // Регулируем скорость моторов в соответствии с управляющим сигналом motorsDrive(speed + out, speed - out); } // Даем роботу немного времени заехать за линию motorsDrive(speed, speed); delay(500); // Останавливаем моторы motorsDrive(0, 0); }