Робот должен ехать туда обратно и при появлении препятствия перед дальномеро останавливаться.
//Создадим переменные для хранения номеров используемых пинов/портов 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;
}
Скетч компилируется, загружается но робот не подвижен абсолютно. Может в коде ошибка?
It may or may not be, that is the question.
Ватс?
Он говорит - “Да, может в коде ошибка”.
и не поедет, пока значение этим переменным не присвоите.
а где это надо сделать?
Да, не, просто пятница.
@AAA, а чем Вас не устроила прошлая тема? Или это заявление типа “забаньте меня, пожалуйста”?
да там же
int In2=xxx, In4=yyy;
надеюсь следующим вопросом не будет, что такое xxx и yyy ?
xxx yyy это номер порта на микроконтроллера или сенсор шилде.
отлично машинка поехала, но когда я поставил руку перед дальномеро она не остановилась
судя по коду, удивительно что она поехала))
что вы в 33 строке кода делаете?
Опять, не слава Богу!
А ответ на мой вопрос будет? Чем та тема-то не устроила?
вообще изначально это был код по которому робот должен крутить головой и двигаться в сторону где расстояние до препятствия меньше. Я хочу что бы робот просто ехал туда обратно (что он сейчас делает) и когда я поставлю руку или какое либо препятствие перед дальномером, что бы робот остановился просто секунд например на 15, затем продолжил ехать также.
я поменял песочницу на программирование поскольку в тот раз не смогли помочь. Думая что это имеет смыл.