Помогите пожалуйста исправить (написать) программу на ардуино

Nikita-student.
Nikita-student. аватар
Offline
Зарегистрирован: 08.02.2018

Здраствуйте, уважаемые форумчане. Взялся за школьный проэкт, сделал робота-доскомойшика. Задумка такая, что он, прикрепленный к школьной доске магнитами, должен 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();
        }
    }        
}

 

Nikita-student.
Nikita-student. аватар
Offline
Зарегистрирован: 08.02.2018

Помогите пожалуйста, в долгу не останусь.

sadman41
Offline
Зарегистрирован: 19.10.2016

Помочь чем, если у вас уже есть "прога" - собрать робота, помыть доску вместо него, сходить вместо вас в школу?

b707
Offline
Зарегистрирован: 26.05.2017

Никита, а можно вопрос?

Вот вы пишете, что "опыта нет" и  "на другом форуме уже написали" вам программу, но она вас не устраивает.  И при этом, похоже, у вас даже мысли не возникает что-то самому почитать, изучить... чтобы хотя бы доработать чужую программу самостоятельно.

Я не пойму, ваш вклад-то во все это какой? Ходите побираетесь на форумах? В чем смысл подобного творчества? Чему учатся школьники на таких "проектах" - что ничему учиться не надо, все можно списать или выпросить в инете?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:

Помочь чем, если у вас уже есть "прога" - собрать робота, помыть доску вместо него, сходить вместо вас в школу?

И за пивом сбегать.

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

И за пивом сбегать.

Евгений! ну какое пиво в школе у доски? :)

kalapanga
Offline
Зарегистрирован: 23.10.2016

Код забавный, в функциях right, back, left, forw циклический вызов друг друга... Это что же роботик делать должен - на месте закрутиться пока стек не кончится?

b707
Offline
Зарегистрирован: 26.05.2017

kalapanga пишет:

Код забавный, в функциях right, back, left, forw циклический вызов друг друга... Э

ну, знаешь, в роботе-пылесосе есть специальные алгоритмы обхода территории - по спирали, змейкой и тд . Видно и тут так же :) только выход из спирали забыли сделать....

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

И за пивом сбегать.

Боюсь, что не донесу....

Nikita-student.
Nikita-student. аватар
Offline
Зарегистрирован: 08.02.2018

На предыдущем форуме, мне подсказали, список команд, чтобы робот менял направление в том случае, если датчик видит препятствие. Написав программу (движения) то есть движение вперед и движение назад, я , ненайдя материала а програмировании датчиков препятствия, пошел на форум Амперка, где мне подсказали, что нужно сделать в виде условия, но как я понял, датчики arduino видит, но он на них не реагирует. Спросив у моего "хорошего" друга, который сказал, что всю программу нужно переписывать и в ней множество ошибок. Поэтому я и обратился к вам с просьбой помочь или исправить или переписать ее.

Nikita-student.
Nikita-student. аватар
Offline
Зарегистрирован: 08.02.2018

В программе есть ошибка, Arduino не понимает, что делать если она видит препятствие.

b707
Offline
Зарегистрирован: 26.05.2017

Nikita-student. пишет:

 Спросив у моего "хорошего" друга, который сказал, что всю программу нужно переписывать и в ней множество ошибок. Поэтому я и обратился к вам с просьбой помочь или исправить или переписать ее.

а что это друг "хороший" в кавычках - отказался программу переписывать? вот ведь редиска! :)

Друг прав - в программе куча ошибок и ее нужно переписывать. Уточню - ВАМ переписывать. А не на форум с этим идти.

Если при переписывании возникнут КОНКРЕТНЫЕ вопросы - приходите.

arduino328
Offline
Зарегистрирован: 01.09.2016

Nikita-student. пишет:

Arduino не понимает, что делать если она видит препятствие.

Ругать, угрожать, бить пробовал? :)

b707
Offline
Зарегистрирован: 26.05.2017

arduino328 пишет:

Ругать, угрожать, бить пробовал? :)

"Бить - не нужно, а не вникнут - разъяснять" (с)

sadman41
Offline
Зарегистрирован: 19.10.2016

Nikita-student. пишет:

В программе есть ошибка, Arduino не понимает, что делать если она видит препятствие.

Она и не обязана. И нечего на нее всю работу валить, вес ее думателя - 10 грамм с обвязкой. А вес вашего мозга - килограмм с лишним. Это все равно, что мышь заставлять учить физику наравне с человеком.

Вот у вас есть в голове видение того, как ваш доскомой должен передвигаться от начала до конца рабочего цикла?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Nikita-student. пишет:
Взялся за школьный проэкт, сделал робота-доскомойшика. Задумка такая, что он, прикрепленный к школьной доске магнитами, должен 2 вращающимеся круглыми щетками проехать по всей доске и помыть ее. По бокам робота датчики препятствия. Опыта работы с ардуино и вообще программированием у меня нет, поэтому прошу помощи. Я уже обращался за к другому форуму, там сделали прогу, но она работает некоректно.
У вас нет опыта не только писания кода, но и проектирования программы, а так же опыта работы над проектами и наконец написания банального ТЗ(техническое задания). А то что вы привели можно сказать одним предложением: Он застрял.https://www.youtube.com/watch?v=7138zVWEb88

ПС: Робот при включении должен пройти несколько состояний (1)- движение домой (в один из углов)- (2) - движение по гиризонтали права-лево до упора (3) спуск вниз на несколько строк -(4)- обратный ход 2 - (3) .. и так до (5)- стоп сработка нижнего датчика.  Код давать не буду так как у вас глаза будут как у САВЫ @_@

5N62V
Offline
Зарегистрирован: 25.02.2016

Nikita-student. пишет:

Спросив у моего "хорошего" друга, который сказал, что всю программу нужно переписывать и в ней множество ошибок. 

Никита, для этого есть секции: бокс, самбо, дзюдо. Когда ты станешь на уровне, любой твой друг быстренько решит твои проблемы с кодом. Подумай, как это здорово! Ты занимаешься спортом, а параллельно решаются твои вопросы! ;)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

5N62V пишет:
Никита, для этого есть секции: бокс, самбо, дзюдо. Когда ты станешь на уровне, любой твой друг быстренько решит твои проблемы с кодом. Подумай, как это здорово! Ты занимаешься спортом, а параллельно решаются твои вопросы! ;)
А вот если не занимаешься спортом, то все время решаешь вопросы "друга", который занимается спортом!!!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Nikita-student. пишет:

В программе есть ошибка

И не одна

Nikita-student. пишет:

Arduino не понимает, что делать если она видит препятствие.

Учить надо. Вы тоже не сразу всё понимать стали.