Весьма может быть ![]()
…Просто такие моменты как бы автоматом проверяют на практике…взрослые люди.
автору, если не ошибаюсь, лет тринадцать… он как-то что-то говорил за свой возраст
Паанятно.
Оказвается когда перед датчиками нет препятствия (зеленый светодиод на них не горит) все четыре колеса крутятся назад. Если подложить руку под левый датчик (загорается зеленая) все четыре колеса крутятся вперед. Если включить машинку и подложить руку только под правый датчик (загорается зел.) ничего не меняется, также колеса все крутятся назад. А если включив машинку подложить руку сначала под левый датчик а поторм правый то сначала все четыре колеса начинают крутится вперед, а затем (когда руку подкладываешь одновременно под правый датчик) левые колеса начинают крутится назад, а правые также крутятся вперед.
Ну вот, уже лучше ![]()
Правильно тестировать - лист бумаги - половина белая, половина чёрная.
…есть подстроечники на датчиках?
Отличный анализ. Теперь остается соотнести это со скетчем и просто поменять местами код, например, для движения вперед на код для “назад”… и так же для других датчиков, чтобы машинка реагировала правильно.
Авторы с ума сойдут, когда увидят.
Надо положить под оба датчика две руки и убедиться, что машинка крутит колёса вперёд.
ну да, пожалуй будет проще поменять пины датчиков ![]()
В этом случае одна сторона крутится вперед, другая назад
У каждой стороны свой датчик. Есть рука - смена движения стороны. Убрал руку - смена движения стороны. И так на двух сторонах должно быть. Определи какая сторона не реагирует на свой датчик.
Куда ты опять пропал?
Контакты по другому ставил. Пришел посредством комбинаций к тому, что по белому начинает сразу ехать, а когда немного наезжает на черное останавливается полностью.
По идее когда он наезжает на черное должен не полностью останавливаться. Одна сторона должна работать.
unsigned long _time;
//====================================
int left_sensor_line = 9;
int right_sensor_line = 8;
//====================================
void setup()
{
// Переменные – номера контактов (пинов) Arduino.
// Для левых и правых моторов машинки.
setup_motor_system(2, 3, 4, 5);
_stop(); //Двигатели остановлены.
// Сенсорные пины переводим в состояние ввода данных.
pinMode(left_sensor_line, INPUT);
pinMode(right_sensor_line, INPUT);
_time = millis();
// Устанавливаем скорость порта связи с ПК.
Serial.begin(9600);
}
// Основная программа.
void loop()
{
while (true)
{
bool ls = digitalRead(left_sensor_line);
bool rs = digitalRead(right_sensor_line);
// Serial.println(ls);
// Serial.println(rs);
// Serial.println("======================================");
// delay(500);
//Готов к приему.
if ((!ls) && (!rs))
{
forward();
}
else
{
if (ls)
{
left();
}
else
{
right();
}
}
delayMicroseconds(500);
_stop();
delayMicroseconds(100);
}
}
int motor_L1, motor_L2;
int motor_R1, motor_R2;
//===============================================
// Функция инициализации управления моторами.
void setup_motor_system(int L1, int L2, int R1, int R2)
{
// Заносятся в переменные номера контактов (пинов) Arduino.
motor_L1 = L1; motor_L2 = L2;
// Для левых и правых моторов робота.
motor_R1 = R1; motor_R2 = R2;
// Переводятся указанные порты в состояние вывода данных.
pinMode(motor_L1, OUTPUT);
pinMode(motor_L2, OUTPUT);
pinMode(motor_R1, OUTPUT);
pinMode(motor_R2, OUTPUT);
}
//===============================================
// движение вперед.
void forward()
{
// Если двигатель будет работать не в ту сторону,
// поменять на нем контакты местами.
digitalWrite(motor_L1, HIGH);
digitalWrite(motor_L2, LOW);
digitalWrite(motor_R1, HIGH);
digitalWrite(motor_R2, LOW);
}
//===============================================
// Поворот налево с блокировкой левых колес.
void forward_left()
{
// блокировка вращения левых колес.
digitalWrite(motor_L1, LOW);
digitalWrite(motor_L2, LOW);
// правые колеса вращаются.
digitalWrite(motor_R1, HIGH);
digitalWrite(motor_R2, LOW);
}
//===============================================
// Поворот направо с блокировкой правых колес.
void forward_right()
{
// левые колеса вращаются.
digitalWrite(motor_L1, HIGH);
digitalWrite(motor_L2, LOW);
// блокировка вращения правых колес.
digitalWrite(motor_R1, LOW);
digitalWrite(motor_R2, LOW);
}
// Поворот налево на месте.
void left()
{
// левые колеса вращаются назад.
digitalWrite(motor_L1, LOW);
digitalWrite(motor_L2, HIGH);
// правые колеса вращаются вперед.
digitalWrite(motor_R1, HIGH);
digitalWrite(motor_R2, LOW);
}
//===============================================
// Поворот направо на месте.
void right()
{
// левые колеса вращаются вперед.
digitalWrite(motor_L1, HIGH);
digitalWrite(motor_L2, LOW);
// правые колеса вращаются назад.
digitalWrite(motor_R1, LOW);
digitalWrite(motor_R2, HIGH);
}
// Включаем движение назад.
void backward()
{
// Смена направления вращения двигателей.
digitalWrite(motor_L2, HIGH);
digitalWrite(motor_L1, LOW);
digitalWrite(motor_R2, HIGH);
digitalWrite(motor_R1, LOW);
}
//===============================================
// Включаем движение назад.
void backward_left()
{
// Смена направления вращения двигателей.
digitalWrite(motor_L2, LOW);
digitalWrite(motor_L1, HIGH);
digitalWrite(motor_R2, HIGH);
digitalWrite(motor_R1, LOW);
}
//===============================================
// Включаем движение назад.
void backward_right()
{
// Смена направления вращения двигателей.
digitalWrite(motor_L2, HIGH);
digitalWrite(motor_L1, LOW);
digitalWrite(motor_R2, LOW);
digitalWrite(motor_R1, HIGH);
}
//===============================================
void _stop()
{
// Блокировка всех колес.
digitalWrite(motor_L2, LOW);
digitalWrite(motor_L1, LOW);
digitalWrite(motor_R2, LOW);
digitalWrite(motor_R1, LOW);
}
Ну что там?
Как только наезжает на черное полностью останавливается. А так в начале едет прямо на белом.
Может проблема в регулировке датчиков?
Ну так она есть или нет?
А как это определить? руку подкладываешь зеленый загорается. А так красный горит.