Вопрос по программе(Оператор If)
- Войдите на сайт для отправки комментариев
Сб, 07/12/2013 - 13:40
#include <Servo.h> #include <Ultrasonic.h> #include <LiquidCrystal.h> LiquidCrystal lcd(10, 9, 3, 2, 1, 0); const int motor1APin = 7; // H-bridge leg 1 const int motor2APin = 6; // H-bridge leg 2 const int motor3APin = 5; // H-bridge leg 1 const int motor4APin = 4; // H-bridge leg 2 const int enablePin = 8; // H-bridge enable pin const int Trig = 12; //Ultrasonic const int Echo = 13; Servo myservo; int knopka1 = A2; int val=0; void setup() { pinMode(knopka1, INPUT); pinMode( enablePin, OUTPUT); pinMode( motor1APin, OUTPUT); pinMode( motor2APin, OUTPUT); pinMode( motor3APin, OUTPUT); pinMode( motor4APin, OUTPUT); pinMode(Trig, OUTPUT); pinMode(Echo, INPUT); digitalWrite(enablePin, HIGH); myservo.attach(11); lcd.begin(16, 2); lcd.print("Robot v.2.0"); } unsigned int time_us=0; unsigned int distance_sm=0; unsigned int circle=0; unsigned int dist_f=0; unsigned int dist_l=0; unsigned int dist_r=0; unsigned int dist_45=0; unsigned int dist_135=0; unsigned int t=15; void loop() { lcd.setCursor(0, 1); lcd.print("Programma 1"); if (circle==0) { myservo.write(0); dist_r=sonar(); motion('w',0,45,t); dist_45=sonar(); motion('w',45,90,t); dist_f=sonar(); motion('w',90,135,t); dist_135=sonar(); motion('w',135,180,t); dist_l=sonar(); } circle++; if(dist_f>=25) { a: motion('f',180,135,t); dist_135=sonar(); front_motion(t); motion('f',135,90,t); dist_f=sonar(); front_motion(t); motion('f',90,45,t); dist_45=sonar(); front_motion(t); motion('f',45,0,t); dist_r=sonar(); front_motion(t); motion('f',0,45,t); dist_45=sonar(); front_motion(t); motion('f',45,90,t); dist_f=sonar(); front_motion(t); motion('f',90,135,t); dist_135=sonar(); front_motion(t); motion('f',135,180,t); dist_l=sonar(); front_motion(t); if (dist_f>=25) goto a; } else { if(dist_f<5) { motion_back(t); dist_f=sonar(); } if(dist_l>=dist_r || dist_135>dist_r) { motion('l',180,90,t); dist_f=sonar(); } if(dist_l<dist_r) { motion('r',180,90,t); dist_f=sonar(); } } } int sonar() { digitalWrite(Trig, HIGH); delayMicroseconds(10); digitalWrite(Trig, LOW); time_us=pulseIn(Echo, HIGH); distance_sm=time_us/58; return distance_sm; } void forward () { digitalWrite(motor1APin, HIGH); digitalWrite(motor2APin, LOW); digitalWrite(motor3APin, HIGH); digitalWrite(motor4APin, LOW); } void back () { digitalWrite(motor1APin, LOW); digitalWrite(motor2APin, HIGH); digitalWrite(motor3APin, LOW); digitalWrite(motor4APin, HIGH); } void right () { digitalWrite(motor1APin, LOW); digitalWrite(motor2APin, HIGH); digitalWrite(motor3APin, HIGH); digitalWrite(motor4APin, LOW); } void left () { digitalWrite(motor1APin, HIGH); digitalWrite(motor2APin, LOW); digitalWrite(motor3APin, LOW); digitalWrite(motor4APin, HIGH); } void wait() { digitalWrite(motor1APin, LOW); digitalWrite(motor2APin, LOW); digitalWrite(motor3APin, LOW); digitalWrite(motor4APin, LOW); } void motion (char dimention, int prev_angle, int next_angle, int time) { int a; if(next_angle>=prev_angle) a=15; else a=-15; if (dimention=='f') { int i=prev_angle; while( i!=next_angle) { i+=a; myservo.write(i); forward(); delay(time); } } if (dimention=='l') { int i=prev_angle; while( i!=next_angle) { i+=a; myservo.write(i); left(); delay(time); } } if (dimention=='r') { int i=prev_angle; while( i!=next_angle ) { i+=a; myservo.write(i); right(); delay(time); } } if (dimention=='b') { int i=prev_angle; while( i!=next_angle ) { i+=a; myservo.write(i); back(); delay(time); } } if (dimention=='w') { int i=prev_angle; while( i!=next_angle ) { i+=a; myservo.write(i); wait(); delay(time); } } } void front_motion( int time ) { if(dist_45<=9) { left(); delay(3*time); } if(dist_135<=9) { right(); delay(3*time); } } void motion_back( int time ) { motion('b',180,90,2*time); if(dist_l>=dist_r) { do { left(); delay(time); dist_f=sonar(); }while(dist_f<=20); } if(dist_l<dist_r) { do { right(); delay(time); dist_f=sonar(); }while(dist_f<=20); } }
Вот имеется программа. Написана для робота, все отлично работает и функционирует. Мне надо все что находитcя в цикле VOID LOOP() выполнялось при нажатии кнопки. Я заключаю все это в оператор IF и ничего не работает. Программа перестает понимать что такое sonar, front motion и все такие же функции. Помогите разобраться. Заранее спасибо!
1. http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
2.
Спасибо за быстрый ответ!
Я попробовал вашу структуру программы, все равно вылетают те же самые ошибки. Есть еще какие нибудь предложения?
Вот какие ошибки выскакивают.
гдето } не поставили - вот все и съехало. Используйте редактор который подсвечивает скобки например Notepad++
Посмотрел - куча пробелов в именах функций.... вот вроде исправил
Ну я же не корректировал вашу программу, я просто идею озвучил.
Ну я же не корректировал вашу программу, я просто идею озвучил.
а вы коварный... немогли переработать его программу? как же так? что за люди нынче пошли.. ты им вопрос, а они тебе только намеки и идеи в ответ, заместо того что бы написать для тебя уже рабочий код..
сволочи какие, а не люди.. гы гы
я бы просто тумблер на питание халабуды поставил - зачем такие косяки с ифами из-за одной кнопки?
я бы просто тумблер на питание халабуды поставил - зачем такие косяки с ифами из-за одной кнопки?
и полчаса ждать пока оно загрузится? это не наш вариант :)
и полчаса ждать пока оно загрузится? это не наш вариант :)
ускорь свою дуино - сотри загрузчик!
ускорь свою дуино - сотри загрузчик!
в моей версии это технически не возможно.. оно там живет на уровне изготовления чипа :)
в моей версии это технически не возможно.. оно там живет на уровне изготовления чипа :)
это в какой это из атмел нельзя отключить загрузочную область?
это в какой это из атмел нельзя отключить загрузочную область?
из которой делают DUE
Нет, я не хотел чтобы вы мне код редактировали, хотел просто помощи, хотяя.... если вы не против то тогда можно))
Проверил все скобки - все правильно. Я не спец в программировании, но мне кажется что проблемма не в правильности написании программы а просто в неполадках с самими функциями и операторами. Пните в ту сторону, где можно почитать про другие алгоритмы опроса кнопок, может это можно как-нибудь сделать в void setup() а все основные алгоритмы будут в loop(). Вообщем гуру ардуины, помощь все еще требуется)
Нет, я не хотел чтобы вы мне код редактировали, хотел просто помощи, хотяя.... если вы не против то тогда можно))
Проверил все скобки - все правильно. Я не спец в программировании, но мне кажется что проблемма не в правильности написании программы а просто в неполадках с самими функциями и операторами. Пните в ту сторону, где можно почитать про другие алгоритмы опроса кнопок, может это можно как-нибудь сделать в void setup() а все основные алгоритмы будут в loop(). Вообщем гуру ардуины, помощь все еще требуется)
void setup() - выполняется один раз и переходит в цикл void loop()
алгоритм опроса кнопок - digitalRead()
вывод - для постоянного опроса кнопок нужно пользовать void loop()
*исходя из выше сказанного думаем над алгоритмом работы девайса - просто словами опишите, что должно происходить, не ломая логику причинноследсвенных связей.
Проверил все скобки - все правильно. Я не спец в программировании, но мне кажется что проблемма не в правильности написании программы а просто в неполадках с самими функциями и операторами.
Во во, я согласен про неполадки с оператором.. только это неполадки с оператором который в кресле сидит :)
со скобками все правильно а глупый интерпретатор все равно на них ругается? вот же ж котина.
Во во, я согласен про неполадки с оператором.. только это неполадки с оператором который в кресле сидит :)
со скобками все правильно а глупый интерпретатор все равно на них ругается? вот же ж котина.
я щитаю, что энто происки путинской гэбни - долгоиграющий проект, вышедший на финишную прямую, по облваниванию населения.
*почему вся водка названиями на *ff?
*почему вся водка названиями на *ff?
гыыы напомнил один анекдот, переводить лень. в принципе и так понятно
И без вас разабрался господа умники. Всем спасибо за помощ!
И без вас разабрался господа умники. Всем спасибо за помощ!
печалька - без нас разобрались, и чего нам теперь делать?