Задача: нужно что бы машинка ехала туда обратно и при появлении препятствия останавливалась на 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? - я вижу что вы почередно включаете и выключаете двигатели, причем только правые… Учите робота ходить налево?
робот едет прямо затем останавливается и включается двигатели на одно стороне т.е. разворот происходит.
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);
}
старайтесь не забивать ветку пустыми сообщениями
хорошо
//Создадим переменные для хранения номеров используемых пинов/портов 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 секунд