Задача: нужно что бы машинка ехала туда обратно и при появлении препятствия останавливалась на 15 секунд

Задача: нужно что бы машинка ехала туда обратно и при появлении препятствия останавливалась на 15 секунд.

Машинка такая

#include <Servo.h>
#include "motor.h"
#include "sonar.h"

//Настройка
// Создаем сервомотор поворота головы.
Servo neck;
// Константы - постоянные значения для уточнения углов.

const int front_ang = 98;
const int time_90 = 390;
const int time_180 = 750;
const int time_10cm = 220;
 

void setup() {
  // Присвоим переменным номера пинов Arduino.
// Инициализируем дальномер Trig = 13, Echo = 12.
  Sonar_init(13, 12);
  // Инициализируем сервомотор, управление 9 портом.
  neck.attach(14);
setup_motor_system(2, 3, 4, 5);
  _stop(); //Двигатели остановлены.
 
}
//Тело программы
void loop() {
  int Dist_front;
   neck.write(front_ang);
  // Ждем, так как поворот занимает небольшое время.
  delay(150);
  // Записываем расстояние до препятствия впереди.
  Dist_front =  Sonar(400);
  if (Dist_front > 10);
   delay(15000);
  //Остановить все двигатели.
  digitalWrite(In2, LOW); //Правые двигатели на роботе.
  digitalWrite(In4, LOW);

  delay(1000); // Ждем 1 сек.

  //Включить-выключить поочередно левые и правые двигатели
  digitalWrite(In2, HIGH); //Включили один правый двигатель на роботе.
  digitalWrite(In4, HIGH); //Включили другой правый двигатель на роботе.
  delay(2000); // Ждем 1 сек.
  digitalWrite(In2, LOW); //Выключили
  digitalWrite(In4, LOW); //Выключили
  delay(1000); // Ждем 1 сек.
  digitalWrite(In2, HIGH); //Включили один правый двигатель на роботе.
  delay(500); // Ждем 1 сек.
  digitalWrite(In2, LOW); //Правые двигатели на роботе.
  digitalWrite(In4, LOW);
  delay(1000); // Ждем 1 сек.
  digitalWrite(In2, HIGH); //Включили один правый двигатель на роботе.
  digitalWrite(In4, HIGH); //Включили другой правый двигатель на роботе.
  delay(2000); // Ждем 1 сек.
  digitalWrite(In2, LOW); //Правые двигатели на роботе.
  digitalWrite(In4, LOW);
  delay(1000); // Ждем 1 сек.
  digitalWrite(In2, HIGH); //Включили один правый двигатель на роботе.
  delay(500);
 
}

Всё?, начитался книжек?

постепенно осваиваю

Что в коде не так?

Мне надо, что бы машинка просто ехала туда обратно, это в принципе я сделал. Теперь подключил дальномер и хочу, что бы когда перед ним будет препятствие машинка, например остановаилась на 15 секунд.

многое
Например, почитайте в книжке, как правильно пользоваться условным оператором if. Вот здесь - неправильно:

и чисто из интереса - что у вас происходит в строчках с 43 по 61? - я вижу что вы почередно включаете и выключаете двигатели, причем только правые… Учите робота ходить налево?

1 лайк

робот едет прямо затем останавливается и включается двигатели на одно стороне т.е. разворот происходит.

 if (Dist_front > 10) delay(15000);

так правильно?

С точки зрения синтаксиса языка - правильно. Но машинка будет делать совсем не то, что вы хотели.
У вас получается сначала задержка на 15 сек(машинка при этом продолжает ехать), а уже потом остановка двигателей.

Кроме того, советую все-таки почитать книжку по языку. Если вы не используете фигурные скобки после if - у вас условие влияет только на первую после условия строчку.

if (Dist_front > 10) {
    delay(15000);
  }

так исправил

if (Dist_front < 10){
    //Остановить все двигатели.
  digitalWrite(In2, LOW); //Правые двигатели на роботе.
  digitalWrite(In4, LOW);
delay(15000);
}
1 лайк

старайтесь не забивать ветку пустыми сообщениями

хорошо

1 лайк
//Создадим переменные для хранения номеров используемых пинов/портов Arduino.
#include <Servo.h>
#include "motor.h"
#include "sonar.h"

//Настройка
// Создаем сервомотор поворота головы.
Servo neck;
// Константы - постоянные значения для уточнения углов.

const int front_ang = 98;
const int time_90 = 390;
const int time_180 = 750;
const int time_10cm = 220;
 

void setup() {
  // Присвоим переменным номера пинов Arduino.
// Инициализируем дальномер Trig = 13, Echo = 12.
  Sonar_init(13, 12);
  // Инициализируем сервомотор, управление 9 портом.
  neck.attach(14);
setup_motor_system(2, 3, 4, 5);
  _stop(); //Двигатели остановлены.
 
}
//Тело программы
void loop() {
  int Dist_front;
   neck.write(front_ang);
  // Ждем, так как поворот занимает небольшое время.
  delay(150);
  // Записываем расстояние до препятствия впереди.
  Dist_front =  Sonar(400);
  if (Dist_front > 10) {
    
  
  //Остановить все двигатели.
  digitalWrite(In2, LOW); //Правые двигатели на роботе.
  digitalWrite(In4, LOW);
  delay(15000);
  }
  delay(1000); // Ждем 1 сек.

  //Включить-выключить поочередно левые и правые двигатели
  digitalWrite(In2, HIGH); //Включили один правый двигатель на роботе.
  digitalWrite(In4, HIGH); //Включили другой правый двигатель на роботе.
  delay(2000); // Ждем 1 сек.
  digitalWrite(In2, LOW); //Выключили
  digitalWrite(In4, LOW); //Выключили
  delay(1000); // Ждем 1 сек.
  digitalWrite(In2, HIGH); //Включили один правый двигатель на роботе.
  delay(500); // Ждем 1 сек.
  digitalWrite(In2, LOW); //Правые двигатели на роботе.
  digitalWrite(In4, LOW);
  delay(1000); // Ждем 1 сек.
  digitalWrite(In2, HIGH); //Включили один правый двигатель на роботе.
  digitalWrite(In4, HIGH); //Включили другой правый двигатель на роботе.
  delay(2000); // Ждем 1 сек.
  digitalWrite(In2, LOW); //Правые двигатели на роботе.
  digitalWrite(In4, LOW);
  delay(1000); // Ждем 1 сек.
  digitalWrite(In2, HIGH); //Включили один правый двигатель на роботе.
  delay(500);
 
}

код сейчас такой.
выдается ошибка : Compilation error: motor.h: No such file or directory

мне просто надо, что бы робот ехал туда обратно и когда я поставлю препятствие он остановился на 15 секунд