В чем ошибка
- Войдите на сайт для отправки комментариев
Сб, 28/07/2012 - 11:22
Здравствуйте! Помогите пожалуйста разобраться. Совместил 2 программы, но не работает.
Суть в том, что машинка едет вперед и датчик ультрозвуковой считывает значения до препятствия, как значение меньше указанного, разворачивается, т.е. из движков на секунду меняет свое направление.
Ошибка
my_robot:74: error: a function-definition is not allowed here before '{' token
ругается на эту строчку
back1(); //первый движок назад
Вся программа вот, потом хочу конечно задействовать сервомашинку, чтобы вращать датчик и можно было определять сбоку препятствия
struct MOTOR // структура для хранения номеров pin-ов, к которым подключены моторчики { int in1; // INPUT1 int in2; // INPUT2 int enable; // ENABLE1 }; const int Trig = 2; const int Echo = 4; // определяем порты, к которым подключены моторчики MOTOR MOTOR1 = { 13, 12, 11 }; MOTOR MOTOR2 = { 7, 8, 9 }; void setup() { pinMode(Trig, OUTPUT); pinMode(Echo, INPUT); pinMode(MOTOR1.in1, OUTPUT); // настраиваем выводы pinMode(MOTOR1.in2, OUTPUT); // на ВЫВОД pinMode(MOTOR2.in1, OUTPUT); pinMode(MOTOR2.in2, OUTPUT); Serial.begin(9600); } unsigned int time_us=0; unsigned int distance_sm=0; void loop() { digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера delayMicroseconds(10); // Удерживаем 10 микросекунд digitalWrite(Trig, LOW); // Затем убираем time_us=pulseIn(Echo, HIGH); // Замеряем длину импульса distance_sm=time_us/58; // Пересчитываем в сантиметры Serial.println(distance_sm); // Выводим на порт if (distance_sm<15) // Если расстояние менее 15 сантиметром { back1(); //первый движок назад forward2(); //второй движок вперед delay(1000); //в течении 1 секунды } else { forward1(); // вращаем оба моторчика вперёд forward2(); } void forward1() // первый вперёд { digitalWrite(MOTOR1.in1, HIGH); digitalWrite(MOTOR1.in2, LOW); analogWrite(MOTOR1.enable, 254); } void forward2() // второй вперёд { digitalWrite(MOTOR2.in1, HIGH); digitalWrite(MOTOR2.in2, LOW); analogWrite(MOTOR2.enable, 254); } void back1() // первый назад { digitalWrite(MOTOR1.in1, LOW); digitalWrite(MOTOR1.in2, HIGH); analogWrite(MOTOR1.enable, 254); } void back2() // второй назад { digitalWrite(MOTOR2.in1, LOW); digitalWrite(MOTOR2.in2, HIGH); analogWrite(MOTOR2.enable, 254); } }
И вот еще тоже не совсем понимаю, у меня датчик считает что растояние в какой-то момент будет меньше 15, а в остальных все нормально, нужно сделать задержку или как чтоб он развернулся? Или все нормально? Просто я хочу как только одно из значений будет меньше 15, все значит разворот.
Будте добры прочитайте прекрепленную тему Вставка программного кода в тему/комментарий
В стартовом посте я поправил, но в дальнейшем лучше вставлять код так.
И, на будущие, постарайтесь давать более говорящие имена темам. Очень трудно ориентироваться среди тем с общими названиями типа "помогите нубу", "вопросы новичка", "в чем ошибка", "проблеммы" и т.п.
my_robot:74: error: a function-definition is not allowed here before '{' token
ругается на эту строчку
back1(); //первый движок назад
forward1(); // вращаем оба моторчика вперёд
Это происходит потому что вы пренебрегаете использованием отступов при оформлении кода.
Если бы вы "отбили" отступами все вложенные блоки кода, то сразу "на глаз" увидели что у вас определения всех фунции backN, forwardN попали в тело функции loop()
Вот отформатированная и компилирующаяся версия вашего скетча
"Отформатировать" его заняло примерно 10-сек. Зато и другим сразу его легче читать.
Маленькая "хитрость" (вдруг не знаете) котороя поможет в работе с уже написанным кодом в IDE. Что-бы не "набивать пробелы перед каждой строчкой, можно выделить несколько строчек и нажать TAB сразу весь выделенный блок сместиться на несколько позиций вправо, а Shift-TAB - влево."
Спасибо за развернутый ответ)
Все замечания и советы учту по оформленю и программе
Для справки - если в Arduino IDE нажать Ctrl + T, то код форматируется автоматически.
Еще вопрос такой, может знает кто, как только не подключал сервомашинку 9г, она дергается и не хочет нормально вращаться. И через стабилизатор делал, не выходит, подавал и 4,5 и 7,2 вольта от батареек, ну всеравно стабилизатор стоит
Все хорошо и работает) спасибо еще раз) про сервы я много читал и подключение и устройство. А серва самая простая 9g как я и написал синенькая такая.