Снова приветствую всех заинтересованных! Сегодня речь пойдёт о наиболее популярных ошибках и «недоделках» при работе с Arduino. Я считаю, что лучше узнать про них сразу и принять всё к сведению; чем ошибиться позже, но уже в ответственный момент.
Ошибку, недоделку, промах может совершить каждый, я же постараюсь рассказать вам, на что надо обращать внимание «при написании» и как анализировать и исправлять уже совершённые ошибки.
Итак, начнём!
Ошибки бывают совершенными из-за невнимательности или из-за незнания.
Сначала рассмотрим типичные ошибки «из-за незнания». Да, вы правы, их много, но в основном они бывают или в синтаксисе кода или же в его структуре.
Ошибки в синтаксисе чаще всего практически не страшны, так как компилятор всегда найдёт её и выделит; вам останется её исправить. Так что на данной стадии познания ЯП мы не будем сильно на них заостряться. Мы заостримся на «структурных» ошибка.
Они обычно возникают, если вы пишете код, не продумав его алгоритмы до конца, не уяснив для себя другие варианты одного случая.
Приведу несколько примеров… Первый:
//-обозначение-переменных-// int m1f = 5; int m2f = 4; int m2b = 3; int m1b = 2; int kn1 = 6;//влево.. int kn2 = 7;//вперед! int kn3 = 8;//вправо.. int st = 9; // stop all!!! //--настройка-переменных--// void setup () { pinMode (m1f , OUTPUT); pinMode (m2f , OUTPUT); pinMode (m2b , OUTPUT); pinMode (m1b, OUTPUT); pinMode (kn1 , INPUT); pinMode (kn2 , INPUT); pinMode (kn3 , INPUT); pinMode (st , INPUT); } //--выполение-программы--// void loop() { if (digitalRead (kn2) == LOW) { digitalWrite (m2b, 0); digitalWrite (m2f, 1); digitalWrite (m1f, 1); digitalWrite (m1b, 0); } if (digitalRead (kn3) == LOW) { digitalWrite (m2f, 1); digitalWrite (m1b, 1); digitalWrite (m1f, 0); digitalWrite (m2b, 0); } if (digitalRead (kn1) == LOW) { digitalWrite (m1f, 1); digitalWrite (m2b, 1); digitalWrite (m2f, 0); digitalWrite (m1b, 0); } if (digitalRead (st) == LOW) { digitalWrite (m1f, 0); digitalWrite (m2b, 0); digitalWrite (m2f, 0); digitalWrite (m1b, 0); } }
Возможно сперва вам «это» покажется странным/страшным, но на самом деле это самое примитивное и элементарное, что может быть.
Приведённый код — это код для платформы с двумя моторами и четыремя управляющими кнопками. Всё просто, однако код этот чересчур громоздкий и тяжелый для простого осмысления. Что нам надо сделать? Правильно! Ввести в работу подпрограммы.
Смотрим на оптимизированный вариант:
//-обозначение-переменных-// int m1f = 5; int m2f = 4; int m2b = 3; int m1b = 2; int kn1 = 6;//влево.. int kn2 = 7;//вперед! int kn3 = 8;//вправо.. int st = 9; // stop all!!! //--настройка-переменных--// void setup () { pinMode (m1f , OUTPUT); pinMode (m2f , OUTPUT); pinMode (m2b , OUTPUT); pinMode (m1b, OUTPUT); pinMode (kn1 , INPUT); pinMode (kn2 , INPUT); pinMode (kn3 , INPUT); pinMode (st , INPUT); } //--выполение-программы--// void loop() { if (digitalRead (kn2) == LOW) { forward(); } if (digitalRead (kn3) == LOW) { left(); } if (digitalRead (kn1) == LOW) { right(); } if (digitalRead (st) == LOW) { stop(); } } //--"разъяснение"-подпрограмм--// void forward() { digitalWrite (m2b, 0); digitalWrite (m2f, 1); digitalWrite (m1f, 1); digitalWrite (m1b, 0); } void left() { digitalWrite (m2f, 1); digitalWrite (m1b, 1); digitalWrite (m1f, 0); digitalWrite (m2b, 0); } void right() { digitalWrite (m1f, 1); digitalWrite (m2b, 1); digitalWrite (m2f, 0); digitalWrite (m1b, 0); } void stop() { digitalWrite (m1f, 0); digitalWrite (m2b, 0); digitalWrite (m2f, 0); digitalWrite (m1b, 0); }
В итоге нажатие на кнопку вызывает одну из наших подпрограмм, а не список трудновоспринимаемых строк.
Итак, мы добавили четыре разнообразных
подпрограммы, тем самым облегчив «осмысления» программы: в любой момент теперь можно без труда найти нужное место кода и дополнить/обновить его. Это всегда
нам поможет и облегчит нашу задачу. Да, в приведённом коде это незаметно, но в более серьёзных задачах, до которых вы, надеюсь, дойдёте, это очень-очень пригодится.
Ну вот, а теперь рассмотрим поподробнее «синтаксический» нюанс подпрограмм: если мы вводим подпрограмму, то мы (!!!) обязательно должны указать её во-первых в настройках, а во-вторых — «расписать её после программы»; чтобы компилятор воспринимал нашу подпрограмму!
Ну-с,вот мы и подошли к концу второй статьи!
Уверен, вы уяснили для себя хоть какую-нибудь информацию и будете успешно применять её!
Спасибо за внимание и удачи Вам!