Прежде чем продолжить, рекомендуется вернуться к уроку
Среда разработки Arduino. и еще раз
его внимательно изучить.
Итак, рассматривать работу контроллера Arduino мы будем в среде
Tinkercad Circuits, где будет эмулироваться работа контролера
Ардуино, т.е. для освоения курса вам нужен будет только компьютер. Но, если у
вас есть контроллер Ардуино и желание сразу работать с "железом", то работа
с настоящим контроллером приветствуется.
Работать мы будем с контроллером Arduino UNO R3:
Этот контроллер собран на пятивольтовом микроконтроллере Atmel ATmega328P
(подробнее о контроллере: Arduino UNO R3
Порты ввода/вывода (pin)
Выводы платформы Arduino - пины (pin), это конкретные выводы микроконтроллера,
к которым можно обратиться и которые могут работать как входы или как выходы.
Порт - это совокупность нескольких пинов, обычно 8 пин. Если каждый отельный пин -
это бит информации, то порт - это 8 бит, или 1 байт. Это очень удобно, так как
позволяет передавать на выход порта сразу целый байт информации.
На плате Arduino UNO R3 пины имеют названия: A0-A5 и D0-D13. Принято считать,
что пины A0-A5 являются аналоговыми, но на самом деле это такие же цифровые пины,
но с одной особенностью - они могут читать аналоговые сигналы.
Аналоговый сигнал - сигнал, который может принимать любое значение в некотором
диапазоне напряжений. Для Arduino UNO - это напряжение от 0 до 5 В.
С аналоговым режимом работы мы разберемся позже, сейчас рассмотрим работу
цифрового режима. В цифровом режиме сигнал может принимать всего два значения:
HIGH (высокой уровень, или уровень логической единицы, который соответствует
напряжению от 2 до 5 вольт) и LOW (низкий уровень, или уровень логического 0,
что соответствует напряжение от 0 до 0,8 вольт). Если совсем просто, то
логическая единица (1) - напряжение есть, логический ноль (0) - напряжения нет.
Цифровой сигнал - сигнал, который может принимать всего два возможных
значения: высокого уровня или низкого уровня.
Прежде чем мы рассмотрим конкретный пример, вернитесь еще раз к уроку
Среда разработки Arduino. вспомните из
чего состоит программа для Ардуино (скетч).
Blink
Blink - является, пожалуй, самой простой программой, но в тоже время, позволяет
быстро проверить работу контроллера и конечно, очень удобно начать изучение
программирования именно с неё.
Давайте откроем Tinkercad Circuits создадим новый проект, найдем в поле
с компонентами контроллер Arduino UNO и перенесем его на рабочее поле:
Если нажать кнопку "Начать моделирование", мы увидим мигающий на плате
контроллера светодиод L. Светодиод будет зажигаться на 1 секунду,
потом гаснуть на 1 секунду и далее все будет повторяться.
Если теперь нажать кнопку "код" и выбрать режим "Текст", мы увидим следующий
код:
Это и есть Blink. В Tinkercad Circuits он автоматически загружается
в контроллер после того, как мы перенесли контроллер на рабочее поле.
Итак, давайте разберем эту программу.
Первая часть программы:
void setup()
{
pinMode(13, OUTPUT);
}
Это функция void setup(), которая запускается один раз, после того как на плату
подано питание и служит в частности для того, чтобы запрограммировать
соответствующий пин контроллера на ввод или на вывод, для этого внутри
void setup() (внутри фигурных скобок), размещаются соответствуюшие функции.
В данном примере используется функция: pinMode(pin, mode), которая как
раз и устанавливает режим работы заданного пина как входа или как выхода.
- параметр pin - это номер вывода, который мы определяем, в нашем примере это
вывод 13. (В программе blink используется вывод 13, потому что на этот вывод
сразу подключен светодиод L, установленный на плате контроллера. Запомните
это, так как этот светодиод очень удобно использовать для отладки программы
или в качестве индикатора работы). В качестве параметра pin мы можем указать
любой пин контроллера, от 0 до 19. При программировании пины от D0 до D13
обозначаются просто цифрами от 0 до 13, без буквы D. А вот пины от A0 до A5
могут обозначаться либо точно также от A0 до A5, либо цифрами A0 - 14, A1 - 15,
A2 - 16, A3 - 17, A4 - 18, A5 - 19.
- параметр mode - устанавливает режим работы вывода, и может принимать
одно из двух значение - INPUT или OUTPUT. В нашем примере значение установлено
как OUTPUT, это значит что пин запрограммирован как выход, сигнал выходит из
контроллера. Если бы мы установили параметр INPUT, то вывод работал бы как вход,
т.е. контроллер ожидал бы когда на этот вывод поступит сигнал извне.
(На самом деле, mode может принимать еще одно значение: INPUT_PULLUP -
подтянутый к питанию вход. Просто в режиме INPUT вывод никуда не подключен и
на него могут наводиться различные помехи. Чтобы этого не происходило, вход
обычно "подтягивают" внешним резистором к питанию или к земле. Режим
INPUT_PULLUP позволяет подключить к выводу встроенный в микроконтроллер
резистор, подтягивающий вывод к питанию.)
Вторая часть программы:
void loop()
{
digitalWrite(13, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(13, LOW);
delay(1000); // Wait for 1000 millisecond(s)
}
Это функция void loop() - все функции, которые находятся внутри нее,
в фигурных скобках, выполняются в бесконечном цикле.
И первая функция цикла имеет синтаксис: digitalWrite(pin, value)
Эта функция передает значение высокого или низкого уровня на соответствующий
вывод.
- параметр pin - это номер вывода, который мы определяем, в нашем
примере это вывод 13.
- параметр value - может принимать значение HIGH или LOW (высокий или
низкий уровень). Если значение HIGH - на выводе появится напряжение логической
1, если LOW - на выводе будет напряжение логического нуля. Кстати, вместо
HIGH можно написать 1, а вместо LOW - 0.
Т.е. вот так:
void loop()
{
digitalWrite(13, 1);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(13, 0);
delay(1000); // Wait for 1000 millisecond(s)
}
тоже будет работать.
Следующая функция имеет синтаксис delay(ms) - останавливает выполнение
программы на заданное количество миллисекунд.
- параметр ms - это количество миллисекунд, на которое приостанавливается
выполнение программы. В нашем примере этот параметр равен 1000 миллисекунд, или
1 секунду.
Теперь давайте рассмотрим всю программу построчно:
void setup() // запускается блок инициализации
{
pinMode(13, OUTPUT); // определяем пин 13 как вывод
}
void loop() // запускается основной блок программы
{
digitalWrite(13, HIGH); // на пин 13 подается сигнал высокого уровня - зажигая светодид
delay(1000); // делаем паузу длительностью 1000 миллисекунд (1 секунда), в течении которой светодиод продолжает светиться.
digitalWrite(13, LOW); // на пин 13 подается сигнал низкого уровня - светодид гаснет
delay(1000); // делаем паузу длительностью 1000 миллисекунд (1 секунда), в течении которой светодиод не светиться.
} // далее программа повторяется пока с платы контроллера не будет снято питание.
Для тех, кто работает с реальным контроллером.
Основная задача этого урока -
научиться загружать скетч в вашу плату Arduino, для этого:
1. Запустите программу Arduino IDE. (Как установить программу подробно
описано в уроке Среда разработки Arduino.)
2. Подключите контроллер Arduino к компьютеру. При первом подключении
потребуется установить драйвер. Драйвер есть на диске, который идет вместе
с Arduino, если у вас нет лиска, то драйвер можно скачать:
CH341.zip
3. Теперь нужно настроить Arduino IDE под ваш контроллер. Для этого в меню
Сервис > Плата > из списка контроллеров выбираем свой контроллер,
например Arduino UNO
4. Далее, скорее всего программе нужно будет указать номер последовательного
порта. Не смотря на то, что ваш контроллер подключен через USB-разъем, общение
компьютера с контроллером идет через COM-порт, в данном случае это виртуальный
последовательный порт, который и создает драйвер при установке. Для этого,
в меню Сервис > Последовательный порт > выбрать нужный COM-порт.
Узнать номер вашего порта можно в "Диспетчере устройств" (Можно просто перебором
найти нужный порт, в системе одновременно их не так много).
5. Теперь, когда программа настроена, загружаем наш скетч. Для этого в меню
Файл > Примеры > 01.Basics > открыть скетч Blink.
6. После того, как скетч открыт, его нужно загрузить. Самый простой способ это
сделать - нажать кнопку в виде круга со стрелочкой внутри в графическом меню
программы
Можно загрузить скетч и через основное меню Файл > Загрузить
или используя горячие клавиши "Ctrl+U".
В процессе загрузки, если все сделано правильно, на плате будут мигать светодиоды
RX\TX, сигнализируя о том, что данные передаются, а после загрузки запуститься
программа Blink: светодиод L будет мигать, с частотой одно мигание в две секунды.
Если у вас все получилось - поздравляю, вы научились загружать скетч в вашу
плату Arduino!