Программирование на Arduino. Урок 2. Основные алгоритмы.
Урок 2. Циклы и условные операторы
Алгоритмы это основа любой программы, ведь нам нужно «объяснить» контроллеру, чего мы от него ожидаем, именно для этого и пишется программа. Программа, написанная посредством определенного языка программирования - это перевод в письменный код ожиданий оператора. Т.к. любая программа выполняется последовательно строка за строкой, за исключением прерываний (но о них чуть позже), то мы должны понимать, что происходит на каждом шаге выполнения программы, чтобы получить желаемый результат.
В «природе» существует два основных вида алгоритмов: условные и циклические.
Начнем с простых и интуитивно понятных – Условные алгоритмы. Как можно догадаться из их названия, мы имеем дело с условиями. На алгоритмическом языке они выглядят так: «…Если (условие) верно, то…» или «…Если (условие) верно, то…, а если не верно, то…».


Здесь основное различие состоит в том, что при неполном ветвлении мы выполняем действие, которое предписывает нам условие, если оно принимает значение «true», если же оно «false», т.е. ложно, пропускаем фрагмент программы с условием и идем дальше.
На языке программирования это ветвление выглядит так:
void setup() //запишите здесь те команды, которые будут выполняться один раз
{
int result = 0; //объявляем переменную, в которой у нас будет храниться результат вычислений
int a = 5; //Объявляем переменную с именем "а" и записываем в нее значение "5"
int b = 7; //Объявляем переменную с именем "b" и записываем в нее значение "7"
if (a > b) { //"Если значение переменной "а" больше, чем значение переменной "b", то выполнится оператор (result=a-b)
result = a - b;
} //если условие не верно (как в нашем случае), то программа закончит свою работу
void loop() { //Запишите здесь те команды, которые будут повторяться
// в бесконечном цикле нет команд
}
Программа «Неполное ветвление»
Если же имеем дело с полным ветвлением, то в обоих случаях и когда условие принимает значение «true», и когда условие принимает значение «false», у нас заданы определенные действия, которые мы будем выполнять.
На языке программирования это ветвление выглядит так:
void setup() //запишите здесь те команды, которые будут выполняться один раз
{
int result = 0; //объявляем переменную, в которой у нас будет храниться результат вычислений
int a = 5; //Объявляем переменную с именем "а" и записываем в нее значение "5"
int b = 7; //Объявляем переменную с именем "b" и записываем в нее значение "7"
if (a > b) { //"Если значение переменной "а" больше, чем значение переменной "b", то выполнится оператор (result=a-b)
result = a - b;
} else {
result = b - a; //если условие не верно (как в нашем случае), то выполнится оператор, обозначенный как else (иначе)
void loop() { //Запишите здесь те команды, которые будут повторяться
// в бесконечном цикле нет команд
}
Программа «Полное ветвление»
А теперь приступим к циклическим алгоритмам. Их у нас существует три разновидности: цикл с «предусловием», цикл с «постусловием» и цикл с «параметром».
![]() | Этот цикл выполняется до тех пор, пока условие остается «true», если же условие становится «false», цикл заканчивается и переходит к дальнейшему выполнению программы. При этом, если условие заведомо было ложным, этот цикл не выполнится ни разу (это удобно при проверке, например, знаменателя дроби, ведь если он 0, то проводить деление мы не будем). |
void setup() //запишите здесь те команды, которые будут выполняться один раз
{
}
void loop() { //Запишите здесь те команды, которые будут повторяться
int a = 20; //Объявляем переменную с именем "а" и записываем в нее значение "20"
int b = 1; //Объявляем переменную с именем "b" и записываем в нее значение "1"
while (a > b) { //"Если значение переменной "а" больше, чем значение переменной "b", то выполнится оператор (a=a-5), в переменную "а" записывается новое значение и цикл возвращается к проверке условия
a =a - 5;
}
}
![]() |
void setup() //запишите здесь те команды, которые будут выполняться один раз
{
}
void loop() { //Запишите здесь те команды, которые будут повторяться
int a = 20; //Объявляем переменную с именем "а" и записываем в нее значение "20"
int b = 1; //Объявляем переменную с именем "b" и записываем в нее значение "1"
do {
a = a - 5; //в переменную "а" записывается новое значение и цикл возвращается к проверке условия
}
while (a > b); //"Если значение переменной "а" больше, чем значение переменной "b", то цикл завершит свою работу
}
![]() | А теперь мой любимый цикл, а любимый потому, что мы заранее знаем, сколько раз он выполнится. Да, вы правильно поняли, речь идет о цикле с «параметром». Такой цикл мы используем, когда нам необходимо повторить определенное действие в программе несколько раз. С помощью него мы можем избежать повторения одинаковых записей в коде программы. |
void setup () {
pinMode (3, OUTPUT); //будем использовать 3 пин на плате, поэтому конфигурируем его "на выход"
}
void loop () {
for (int i = 1; i < 10; i++) { //Объявляем цикл с параметром
//int i - переменная - счетчик, которой мы присваием начальное значение
//i < 10 - условие выполнения цикла, цикл будет выполнятся пока значение переменной - счетчика не будет противоречит условию выполнения цикла
//i++ - шаг переменной - счетчика (тоже самое, что i = i + 1)
digitalWrite (3, HIGH); //передаем на 3 пин логическую 1 (5 V)
delay (1000);
digitalWrite (3, LOW); //передаем на 3 пин логический 0 (0 V)
}
}
Сегодня мы разобрались в основных алгоритмах, используемых при написании программ. Это лишь краткий экскурс по тому, что нам с вами предстоит изучить и уметь использовать в своих программах. Каждый из этих циклов мы будем разбирать по отдельности в следующих статьях и применять на практике для сборки электрических схем и их программирования с помощью контроллера Arduino.
Все вопросы, которые мы не осветили в этой статье, оставляйте в комментариях, будем рады на них ответить.