Помогите пожалуйста исправить (написать) программу на ардуино
- Войдите на сайт для отправки комментариев
Чт, 08/02/2018 - 16:55
Здраствуйте, уважаемые форумчане. Взялся за школьный проэкт, сделал робота-доскомойшика. Задумка такая, что он, прикрепленный к школьной доске магнитами, должен 2 вращающимеся круглыми щетками проехать по всей доске и помыть ее. По бокам робота датчики препятствия. Опыта работы с ардуино и вообще программированием у меня нет, поэтому прошу помощи. Я уже обращался за к другому форуму, там сделали прогу, но она работает некоректно. Приложил фото робота и 1ую прогу
P.S двигатели и сенсоры подключены так, как описанно в программе
Список оборудования: Arduino UNO R3, драйвер двигателя l298n, датчик препятствия FC-51
Заранее спасибо
#define PINA 4 #define PINB 5 #define PINC 6 #define PIND 7 #define SENSORA 8 #define SENSORB 9 #define SENSORC 10 #define SENSORD 11 #define STEPS 100 void right() { digitalWrite(PINA, LOW); digitalWrite(PINB, HIGH); digitalWrite(PINC, LOW); digitalWrite(PIND, HIGH); back(); } void left() { digitalWrite(PINA, HIGH); digitalWrite(PINB, LOW); digitalWrite(PINC, HIGH); digitalWrite(PIND, LOW); forw(); } void forw() { digitalWrite(PINA, LOW); digitalWrite(PINB, LOW); digitalWrite(PINC, LOW); digitalWrite(PIND, HIGH); delay(STEPS); digitalWrite(PINA, HIGH); digitalWrite(PINB, LOW); digitalWrite(PINC, LOW); digitalWrite(PIND, LOW); delay(STEPS); right(); } void back() { digitalWrite(PINA, LOW); digitalWrite(PINB, LOW); digitalWrite(PINC, HIGH); digitalWrite(PIND, LOW); delay(STEPS); digitalWrite(PINA, LOW); digitalWrite(PINB, HIGH); digitalWrite(PINC, LOW); digitalWrite(PIND, LOW); delay(STEPS); left(); } void setup() { pinMode(PINA, OUTPUT); digitalWrite(PINA, LOW); pinMode(PINB, OUTPUT); digitalWrite(PINA, LOW); pinMode(PINC, OUTPUT); digitalWrite(PINC, LOW); pinMode(PIND, OUTPUT); digitalWrite(PIND, LOW); pinMode(SENSORA, INPUT); digitalWrite(SENSORA, HIGH); pinMode(SENSORB, INPUT); digitalWrite(SENSORB, HIGH); pinMode(SENSORC, INPUT); digitalWrite(SENSORC, HIGH); pinMode(SENSORD, INPUT); digitalWrite(SENSORD, HIGH); } void loop() { // right(); // left(); // forw(); // back(); if(digitalRead(SENSORA) == HIGH) { forw(); } else { if(digitalRead(SENSORC) == LOW) { if(digitalRead(SENSORD) == LOW) { if(digitalRead(SENSORB) == HIGH) { left(); } } else { back(); } } else { right(); } } }
Помогите пожалуйста, в долгу не останусь.
Помочь чем, если у вас уже есть "прога" - собрать робота, помыть доску вместо него, сходить вместо вас в школу?
Никита, а можно вопрос?
Вот вы пишете, что "опыта нет" и "на другом форуме уже написали" вам программу, но она вас не устраивает. И при этом, похоже, у вас даже мысли не возникает что-то самому почитать, изучить... чтобы хотя бы доработать чужую программу самостоятельно.
Я не пойму, ваш вклад-то во все это какой? Ходите побираетесь на форумах? В чем смысл подобного творчества? Чему учатся школьники на таких "проектах" - что ничему учиться не надо, все можно списать или выпросить в инете?
Помочь чем, если у вас уже есть "прога" - собрать робота, помыть доску вместо него, сходить вместо вас в школу?
И за пивом сбегать.
И за пивом сбегать.
Евгений! ну какое пиво в школе у доски? :)
Код забавный, в функциях right, back, left, forw циклический вызов друг друга... Это что же роботик делать должен - на месте закрутиться пока стек не кончится?
Код забавный, в функциях right, back, left, forw циклический вызов друг друга... Э
ну, знаешь, в роботе-пылесосе есть специальные алгоритмы обхода территории - по спирали, змейкой и тд . Видно и тут так же :) только выход из спирали забыли сделать....
И за пивом сбегать.
Боюсь, что не донесу....
На предыдущем форуме, мне подсказали, список команд, чтобы робот менял направление в том случае, если датчик видит препятствие. Написав программу (движения) то есть движение вперед и движение назад, я , ненайдя материала а програмировании датчиков препятствия, пошел на форум Амперка, где мне подсказали, что нужно сделать в виде условия, но как я понял, датчики arduino видит, но он на них не реагирует. Спросив у моего "хорошего" друга, который сказал, что всю программу нужно переписывать и в ней множество ошибок. Поэтому я и обратился к вам с просьбой помочь или исправить или переписать ее.
В программе есть ошибка, Arduino не понимает, что делать если она видит препятствие.
Спросив у моего "хорошего" друга, который сказал, что всю программу нужно переписывать и в ней множество ошибок. Поэтому я и обратился к вам с просьбой помочь или исправить или переписать ее.
а что это друг "хороший" в кавычках - отказался программу переписывать? вот ведь редиска! :)
Друг прав - в программе куча ошибок и ее нужно переписывать. Уточню - ВАМ переписывать. А не на форум с этим идти.
Если при переписывании возникнут КОНКРЕТНЫЕ вопросы - приходите.
Arduino не понимает, что делать если она видит препятствие.
Ругать, угрожать, бить пробовал? :)
Ругать, угрожать, бить пробовал? :)
"Бить - не нужно, а не вникнут - разъяснять" (с)
В программе есть ошибка, Arduino не понимает, что делать если она видит препятствие.
Она и не обязана. И нечего на нее всю работу валить, вес ее думателя - 10 грамм с обвязкой. А вес вашего мозга - килограмм с лишним. Это все равно, что мышь заставлять учить физику наравне с человеком.
Вот у вас есть в голове видение того, как ваш доскомой должен передвигаться от начала до конца рабочего цикла?
ПС: Робот при включении должен пройти несколько состояний (1)- движение домой (в один из углов)- (2) - движение по гиризонтали права-лево до упора (3) спуск вниз на несколько строк -(4)- обратный ход 2 - (3) .. и так до (5)- стоп сработка нижнего датчика. Код давать не буду так как у вас глаза будут как у САВЫ @_@
Спросив у моего "хорошего" друга, который сказал, что всю программу нужно переписывать и в ней множество ошибок.
Никита, для этого есть секции: бокс, самбо, дзюдо. Когда ты станешь на уровне, любой твой друг быстренько решит твои проблемы с кодом. Подумай, как это здорово! Ты занимаешься спортом, а параллельно решаются твои вопросы! ;)
В программе есть ошибка
И не одна
Arduino не понимает, что делать если она видит препятствие.
Учить надо. Вы тоже не сразу всё понимать стали.