Разберём задачку из 1 урока
Заданием было выполнить движение сервопривода, с плавным перемещением между 3 точками 0,90 и 180 градусов, в которых сервопривод должен был оставаться 1 секунду.
Очевидно, что решением проблемы должны стать задержки, в тех случаях, когда сервопривод достигает упомянутых трёх положений. Для решения этой задачки на ум сразу же приходят 5 способов.
1 способ
Самый очевидный путь состоит в том, что бы разделить код на промежутки:
0...90
90...180
180...90
90...0
между этими промежутками поставить задержку 985мс, ведь внутри цикла уже заложена задержка в 15 мс.
Путь простейший, а потому не самый удобный. писать придется много, и как известно, чем больше код, тем больше в нём будет ошибок. к тому же дорабатывать его станет труднее.
Хуже всего в этом методе в том, что при добавлении еще нескольких промежутков мы получим огромное количество циклов, а значит и еще большее количество мест для совершения ошибок.
2 способ
Мы ведь помним, что задержка нужна в 3х местах, а это значит, что мы сравниваем значения угла с интересующими нас. Именно для этого и существует конструкция if добавить проверки if ()
Тогда проще всего сформулировать условия следующим образом
if(pos == 0){}
else if(pos == 90){}
else(pos == 180){}
При такой проверке становится удобно немного изменить цикл FOR ограничивая его конечное значение на 1 меньше.
Становится лучше, но всё еще требуется повторять одни и те же действия и проверки, что приводит к избыточному дублированию кода
3 способ
Сложные условия внутри if()записанные через логический оператор ИЛИ
if(pos == 0 || pos ==90){}
else{}
if(pos == 180 || pos == 90){}
else{}
Не плохой способ, однако каждый раз будет выполняться проверка и выполняться будет альтернативное действие, а значит на 3 истинных срабатывания условного оператора будет 177 ложных. На такие проверки всё еще тратится лишнее время
4 способ
Более правильный, ведь в любом случае выполняется проверка внутри if(). Тогда проще проверять, что угол неравен 0, 90, 180.
if(pos != 0 || pos != 90){}
if(pos != 180 || pos != 90){}
Это обратная ситуация в сравнении с 3 способом.
Экономится время на выполнении одного из условий и большую часть времени выполняется истинное действие внутри условного оператора.
5 способ
Еще один способ близкий к варианту №1.
Разместим задержку в 1000 мс перед циклами for(), а внутри циклов будем проверять только неравенство значению 90
if(pos != 90){}
Но тут придётся немного переписать циклы for()
Выводы
Как видим для решения любой задачи существует не один способ, а как правило не менее трех. в данной ситуации мне на ум пришли эти 5 способов, 2 из которых были предложены участниками сервомарафона в инстаграме.