Робот должен ехать туда обратно и при появлении препятствия перед дальномеро останавливаться

Робот должен ехать туда обратно и при появлении препятствия перед дальномеро останавливаться.


Вот такой робот.

//Создадим переменные для хранения номеров используемых пинов/портов Arduino.
#include <Servo.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;
 int In2, In4;

void setup() {
  // Присвоим переменным номера пинов Arduino.
// Инициализируем дальномер Trig = 13, Echo = 12.
  Sonar_init(13, 12);
  // Инициализируем сервомотор, управление 9 портом.
  neck.attach(14);

 
}
//Тело программы
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);
 
}
//Номера пинов сонара.
int Trig;
int Echo;
//=Режим пинов/портов ===============================
Sonar_init(int Tr, int Ec)
{
   Trig=Tr;
   Echo=Ec;
   //Задаем режимы работы пинов.
   pinMode(Trig, OUTPUT);
   pinMode(Echo, INPUT);
}
//= Измерение расстояния ============================
 int Sonar(unsigned long Limit)
{
  int Long_cm;
  // Переводим лимит из сантиметров в относительные величины (микросек.)
  unsigned long Lim=Limit*58;
  //Генерируем импульс
  digitalWrite(Trig, LOW);
  delayMicroseconds(2);
  digitalWrite(Trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig, LOW);
  //Ждем отражения импульса.
  // Пересчитываем время в расстояние (по скорости звуку).
  Long_cm = int(pulseIn(Echo, HIGH, Lim)/58);
  //Если не дождались отражения,
  // Присваиваем значение максимально измеремому.
  if(Long_cm==0) return int(Limit);
  return Long_cm;
}

3 лайка

Скетч компилируется, загружается но робот не подвижен абсолютно. Может в коде ошибка?

It may or may not be, that is the question.

1 лайк

Ватс?

Он говорит - “Да, может в коде ошибка”.

1 лайк

и не поедет, пока значение этим переменным не присвоите.

а где это надо сделать?

Да, не, просто пятница.

1 лайк

@AAA, а чем Вас не устроила прошлая тема? Или это заявление типа “забаньте меня, пожалуйста”?

да там же

int In2=xxx, In4=yyy;

надеюсь следующим вопросом не будет, что такое xxx и yyy ?

xxx yyy это номер порта на микроконтроллера или сенсор шилде.

1 лайк

отлично машинка поехала, но когда я поставил руку перед дальномеро она не остановилась

судя по коду, удивительно что она поехала))

что вы в 33 строке кода делаете?

1 лайк

Опять, не слава Богу! :frowning:

А ответ на мой вопрос будет? Чем та тема-то не устроила?

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

я поменял песочницу на программирование поскольку в тот раз не смогли помочь. Думая что это имеет смыл.