Программирование микроконтроллера умного дома
Методы программирования и типовые части программного кода с пояснениями принципов их работы и настройки
Программа в Arduino IDE состоит из двух больших блоков. Один из них "void setup" выполняется однократно в начале работы программы после загрузки микроконтроллера, а второй - "void loop" запускается после выполнения первого и повторяется циклически до момента выключения контроллера.
Листинг 1

void setup() {
  // Здесь вводится ОДНОКРАТНО выполняемая часть программы
}

void loop() {
  // Здесь вводится ЦИКЛИЧЕСКИ выполняемая часть программы
}
Принцип программирования Arduino для умного дома состоит в том, что сначала в блоке void setup сконфигурировать цифровые входы / выходы и выполнить общие настройки, затем поэтапно наращивать программный код блока void loop с его отладкой.

Конфигурирование производится в соответствии с заполненной ранее таблицей, где для соответствующих устройств определены цифровые порты. Особенностью Arduino является то, что цифровые порты могут быть как входными, так и выходными в зависимости от настроек. Настройка производится командой pinMode(n, X), где n - номер цифрового порта, а X - его назначение (INPUT - входной, OUTPUT - выходной).

Также в блоке void setup выполняется подключение передачи данных по последовательному (USB) порту. Для этого применяют команду Serial.begin. Настройки входов и выходов для таблиц 1, 2 и 3 для рассмотренного здесь материала, приведён в листинге 2. Здесь же можно увидеть что комментарии к строкам выполняются после символа "//" . Эти комментарии поясняют каждую из строк.
Листинг 2

void setup() {
  pinMode(0, INTPUT); // настройка вывода D0 входным
  pinMode(1, INTPUT); // настройка вывода D1 входным
  pinMode(2, INTPUT); // настройка вывода D2 входным
  pinMode(3, INTPUT); // настройка вывода D3 входным

  pinMode(5, OUTPUT); // настройка вывода D5 выходным
  pinMode(6, OUTPUT); // настройка вывода D6 выходным

  Serial.begin(9600); // включение передачи данных по USB-порту на скорости 9600 бит в секунду
}
Стоит обратить внимание, что после ключевой фразы "void setup()" стоит открывающаяся фигурная скобка "{", а в конце блока - закрывающаяся "}" и в каждая строка заканчивается символом ";". Обращайте на это внимание! Т.к. нарушение этих правил ведет к ошибкам в программе.

Теперь разберем типовые программные коды, которые применяются при написании программ.

Для начала, рассмотрим аналоговый вход, то есть вход на который подаются сигналы с датчиков. Эти входы на плате Arduino обозначены буквами "A" с номерами от 0 до 5. Например, А1, А2 и т.д. эти входы не нуждаются в настройке в блоке void setup. Пример программы опроса аналогового входа да показан в листинге 3.
Листинг 3

int sens1 = 0; // объявление целочисленной переменной sens1 (от слова sensor - датчик) и присвоение ей нулевого значения

void setup() {
  Serial.begin(9600); // включение передачи данных по USB-порту на скорости 9600 бит в секунду
}

void loop() {
  sens1 = analogRead(A0); // чтение значения с аналогового входа А0 и помещение этого значения в переменную sens1
  Serial.println(sens1); // передача значения переменной sens1 по USB-порту
  delay(200); // задержка (пауза) на 200 миллисекунд
}
В листинге 3 присутствует переменная которая может принимать целые значения она в программе arduino IDE обозначается "int" (от английского integer - целое число). В неё помещается значение кода напряжения, пришедшего на аналоговый вход А0. Зачем эту переменную можно использовать в любой точке программы введя её название. Например, для передачи значения по USB-порту. Задержка по времени нужна для удобства восприятия, т.к. мельтещащие цифры на экране плохо воспринимаются человеком.
Made on
Tilda