Разработка алгоритма и список локальных переменных

Итак, задача поставлена, переходим к алгоритму и локальным переменным.

Сначала поговорим о входных параметрах и локальных переменных.

• Входные параметры _left_power, _right_power – как уже говорилось выше, это два целых числа со знаком, которые поступают в наш драйвер извне и задают ему направление и мощность моторов. Отметим, что модуль этих чисел может быть больше 250, так как функция, которая вызывает драйвер, может и не “знать” о наших ограничениях по мощности.

• Локальные переменные. Это четыре числа, определяющие направление вращения (HIGH или LOW) и модули мощности (целые числа от 0 до 250) для левого и правого моторов.
_left_direction
_right_direction
_left_power_modul
_right_power_modul
Имена адресов портов управления моторами
Port_POWER_LEFT_MOTOR
Port_POWER_RIGHT_MOTOR
Port_DIRECTION_LEFT_MOTOR
Port_DIRECTION_RIGHT_MOTOR

Вообще-то можно было обойтись и без имён портов-контактов, а просто использовать их номера, задействованные в плате MotorShield. Задать в соответствующем операторе номера платы Arduino UNO, которые используются у нас в системе и дело с концом.

Но если мы хотим программировать на хорошем профессиональном уровне, лучше давать имена контактам ввода-вывода и определять их в начале исходного текста функции. В будущем, когда мы начнём писать более сложные программы, Вы это поймёте сами. А пока поверьте на слово. Да и контактам приятно – всё-таки имя лучше номера.

Локальные переменные это такие переменные, которые существуют только внутри нашей функции. Никакая другая функция использовать их не может.

И ещё – все локальные переменные нашего драйвера имеют тип ЦЕЛОЕ СО ЗНАКОМ. В исходном тексте такой тип обозначается int (от английского – Integer). Надо отметить, что задавать тип локальной переменной нужно один раз внутри функции, иначе это будет синтаксическая ошибка. Кстати вопрос на пройденное – как Вы узнаете, что допустили синтаксическую ошибку?

Ну вот, теперь АЛГОРИТМ. Посмотрите на него и попробуйте представить какими операторами и встроенными функциями можно реализовать этот алгоритм. Вспомните, что Вы узнали из “Ардуино блокнота программиста” или из описаний языка С/C++ в интернете.
Попробуйте определить, какие блоки алгоритма выполняют ту или иную часть постановки задачи. И не забывайте, что в одном блоке алгоритма может содержаться много операторов исходного текста.

В этом алгоритме есть четыре блока принятия решения.
Причём два из них могут быть выполнены с помощью оператора if (условие) {действие;}.
А два с помощью оператора if (условие) {действие_1;} else {действие_2;}

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

И ещё вопрос для самостоятельной проработки. В этом алгоритме есть контроль на превышение числа 250 (в алгоритме оно названо MAX), но нет контроля на подачу в моторы числа меньшего, чем ноль.

Вопрос – почему? Как обеспечивается защита платы MotorShield от подачи отрицательных чисел в моторы?

Алгоритм драйвера управления моторами

Зеленой рамкой выделены блоки алгоритма.