Поскольку автор больше программист, точнее full stack developer, чем электронщик, то этот пост в тему.

Hello World

Hello World

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

Правило номер один: сначала — алгоритм, только потом — код

Очень полезно делать программу, состоящую из небольших «кирпичиков». Не углубляясь в дебри и применительно к скетчам Arduino, это будет называться функциями. Не скупитесь на длинные названия функций, делайте их красноречивыми. В качестве примера смотрите на мои скетчи. В мире электроники аналогом функций будут микросхемы (сравнение поверхностное и упрощенное, но подойдет). Точно так же как из микросхем выстраиваются более сложные изделия, так же из программных функций наращивают более сложные программные системы.

Функция должна делать только одно дело. Например, в моем скетче функция motorRunForward() служит только для движения вперед и ничего больше. Функция measureDistance() только измеряет расстояние.

Делать функции очень просто. Как только ваш код перестает умещаться на экране — из него пора лепить небольшую функцию. Если один и то же код повторяется более одного раза — «упрятать» его в функцию просто необходимо.

Из таких небольших кусочков — функций можно лепить сложные паззлы больших программ.

Итого.

Правило номер два: разбивайте все свои программы на функции

И тут же.

Правило номер три: не ленитесь писать подробные комментарии

Иначе уверяю, вы через месяц и не вспомните, к чему этот код и зачем.

Я втайне надеюсь, что в учебных заведениях программистам, не соблюдающим эти краеугольные правила, ломают руки и с позором изгоняют из профессии.

Далее я расскажу о простых трюках в программировании, которые помогут избежать больших проблем.

#define vs const

#define удобная директива, но у нее есть один явный недостаток — она может быть случайно переопределена в другом месте программы. Однако достоинство #define в том, что она не занимает память. В то время как const занимает, правда совсем немного.

В интернете сломано немало копий по поводу того, как правильнее определять константы : через #define или const.

И гуру программирования на C пришли к выводу, что в общем случае нужно использовать выражение const для определения констант вместо #define.

Так тому и быть.

Примечание. В большинстве скетчей для Arduino авторы не пользуются этим правилом. Либо они знают какой-то секрет, либо им плевать.

 

if ( 0 == value )

В моих скетчах вы часто будете видеть подобные конструкции

if ( 0 == Value ) {
   …
}

Что здесь необычного?

Перепишем это условие так, как его пишут обычные люди

if ( Value == 0 )

так тоже правильно. Но есть один ньюанс. В спешке забудем или сделаем опечатку — пропустим один знак «=»

if ( Value = 0 )

И вот у нас уже вместо сравнения — присвоение значения, которое :

  • всегда TRUE и
  • меняет значение переменной Value.

Целых две скрытых ошибки!

А вот в случае такой записи

if ( 0 = Value )

компилятор заранее обратит ваше внимание на ошибку.

Толковые программисты на всех языках всегда пользуются этим приемом. Это не относится к таким операциям сравнения как >, <,>=,<=,!=, их пишем как обычно.

Пока всё. Если есть чем поделиться, велкам в каменты.