Arduino для студентов-двигателистов v.1.0
Введение - 2 час.
Введение в программирование Arduino
Что такое Arduino?
Arduino – это платформа, включающая семейство аппаратных модулей на основе микроконтроллеров AVR и ARM (и, возможно, других) и единое программное обеспечение, позволяющее освоить программирование микроконтроллеров даже ребёнку.
Основной используемый модуль – Arduino Uno (рисунок 1) на основе AVR-микроконтроллера Amtel Atmega 328P.
Рисунок 1 – Arduino Uno
Микроконтроллер представляет собой микропроцессорную систему со всеми опорными устройствами, интегрированными в одном чипе. Для создания простейшего автоматического устройства достаточно подключить источник питания, цепь сброса и (не обязательно!) кристалл кварца (источник тактовой частоты).
Плата Arduino устроена очень просто: на ней присутствуют разъёмы внешнего питания, USB, штырьковые разъёмы, подключенные к универсальным входам/выходам микроконтроллера, кварц, кнопка сброса, регулятор входного напряжения, несколько светодиодов, преобразователь USB/UART и другие вспомогательные микросхемы. Упрощённый или даже полноценный аналог Arduino можно легко собрать своими руками, но это обычно не имеет смысла из-за низкой стоимости модуля.
Обобщенная функциональная схема AVR-микроконтроллера приведена на рисунке 1. На схеме мы видим все стандартные компоненты компьютера: системные шины, АЛУ, ОЗУ, ПЗУ, РОН, плюс множество встроенных интерфейсов: UART, SPI, 3-wire и др. Основные отличия от ПК состоят в том, что все компоненты размещены в одном кристалле, и что используется гарвардская архитектура, в которой программы и данные хранятся в разных модулях памяти, в отличие от архитектуры фон Неймана, когда и программа и данные хранятся в одном и том же модуле памяти.
Рисунок 1 – Обобщенная функциональная схема AVR-микроконтроллера
Начало работы с Arduino
Строго говоря, ответы на почти любые вопросы по Ардуино очень легко найти в Интернете, в том числе бесчисленное количество видеороликов.
Или сразу идем на сайт производителя arduino.cc и скачиваем и устанавливаем последнюю версию Arduino IDE (интегрированная среда разработки).
Запускаем программу.
Подключаем модуль к компьютеру с помощью USB-кабеля.
В разделе Tools выбираем тип платы. (Для Arduino Due нужно выбрать programming port и подключить кабель к соответствующему разъёму из двух)
В разделе Tools необходимо указать COM-порт для связи с платой. Обычно в списке не много портов, и очевидно, какой нужно использовать. COM-1 – обычно это стандартный COM-порт компьютера. Наша плата создает новый свой собственный порт с более высоким номером, например COM5. Если непонятно, то можно отключить кабель и посмотреть, какой порт пропадёт.
Для начала работы можно воспользоваться библиотекой программ для Ардуино, в меню Файл/Примеры (File/Examples) Arduino IDE. Выберем программу blink. Программа вызывает мигание встроенного в плату светодиода, который подключен к выводу №13.
int ledPin = 13;
void setup ()
{
pinMode (ledPin, OUTPUT);
}
void loop ()
{
digitalWrite (ledPin, HIGH);
delay (1000);
digitalWrite (ledPin, LOW);
delay (1000);
}
Нажимаем на кнопку «Вгрузить» (самая левая на панели кнопок под главным меню).
Рассмотрим текст программы. Основа языка программирования модуля Arduino — это язык Си (скорее Си++), точнее, диалект Processing/Wiring.
Строчка
int ledPin = 13
объявляет целочисленную переменную ledPin и присваивает ей значение 13.
Фрагмент кода
void setup ()
{
…..
}
- это объявление функции setup (). Имя setup зарезервировано и означает, что эта функция будет запущена один раз при начале работы микроконтроллера. Между фигурными скобкам записываются действия, которы необходимо выполнить при запуске (инициализации) программы. В нашем случае мы командой
pinMode (ledPin, OUTPUT);
устанавливаем режим работы универсального контакта ввода/вывода с номером, равным ledPin = 13. «OUTPUT» означает, что контакт настроен на вывод.
void loop ()
{
…..
}
- это тоже объявление стандартной, но, в отличие от setup (), то, что записано в фигурных скобках будет повторяться бесконечно, пока включен микроконтроллер. В этих двух стандартных функциях заложен весь принцип работы данного микроконтроллера. Они обязательно присутствуют в любой программе для Arduino, но могут быть пустыми. Функция setup () выполняется однократно сначала, а функция loop () – после завершения запускается заново, и этот процесс повторяется бесконечно. Рабочий Цикл loop () задает поведение нашей системы, в нём производится чтение информации со входов, выполняются необходимые действия, посылается информация через порты, устанавливаются значения выводов.
Язык программировании С
Программа на Си, каких бы размеров она ни была, состоит из функций и переменных.
Базовый Си (в отличие от c++ и Csharp и т.д.) — язык сравнительно "низкого уровня". Все механизмы высокого уровня в Си обеспечиваются исключительно с помощью функций.
Синтаксис языка СИ
Комментарии
Комментарии – важный элемент оформления программы.
// Комментарий до конца строки
/* Многострочный
комментарий */
Символы операций языка Си
Символ | Назначение | Пример |
() | Вызов функции | |
[ ] | Выделение элемента массива | |
. | Выделение элемента записи (поля объекта) | |
-> | Выделение элемента записи | |
! | Логическое отрицание | |
~ | Поразрядное отрицание | |
- | Изменение знака | |
++ | Увеличение на единицу | i++; |
-- | Уменьшение на единицу | i--; |
& | Взятие адреса | |
* | Обращение по адресу | |
(тип) | Преобразование типа | x= (float) a; |
sizeof() | Определение размера в байтах | |
* | Умножение | |
/ | Деление | |
% | Определение остатка от деления | |
+ | Сложение | |
- | Вычитание | |
<< | Сдвиг влево | |
>> | Сдвиг вправо | |
< | Меньше, чем | |
<= | Меньше или равно | |
> | Больше, чем | |
>= | Больше или равно | |
= = | Равно | |
!= | Не равно | |
& | Поразрядное логическое "И" | |
^ | Поразрядное исключающее "ИЛИ" | |
| | Поразрядное логическое "ИЛИ" | |
&& | Логическое "И" | |
|| | Логическое "ИЛИ" | |
?: | Условная (тернарная) операция | |
= | Присваивание | |
+=, - =, *=, /=, %=, <<=,>>=, &=, |=, ^= | Составные операции присваивания | а *= b (т.е. a = a * b) |
Типы данных
· Простые типы данных
o Целочисленные
o Вещественные
o Символьные
o Логические
o Указатель
o Пустой тип (void)
· Составные типы данных
o Массивы
o Строки
o Структуры
Целочисленные типы данных
Количество бит | Беззнаковый тип | Знаковый тип |
unsigned char 0...255 | char -128...127 | |
unsigned short 0...65535 | short -32768...32767 | |
unsigned int | int | |
unsigned long int | long int |
Вещественные типы данных
Вещественное число в памяти вычислительной машины представляется в нормированной форме в двоичной системе счисления в виде 4 полей: мантисса m, знак мантиссы, порядок p, знак порядка.
m |
Само число определяется по формуле
.
Различают три основных типа представления вещественных чисел в языке Си (они напрямую соответствуют встроенным типам вещественных чисел центрального процессора):
Тип | Обозначение в Си | Кол-во бит | Биты степени | Мантисса | Сдвиг |
простое | float | 30...23 | 22...0 | ||
двойной точности | double | 62...52 | 51...0 | ||
двойной расширен- ной точности | longdouble | 78...64 | 62...0 |
Пример: представить число -178,125 как тип float:
Преобразуем отдельно целую и дробную части:
17810 = 101100102.
0,12510 = 0,0012.
Тогда 178,12510 = 10110010,0012=1,0110010001·2111
В Arduino типы несколько отличаются:
char —единичный байт, который может содержать один символ из допустимого символьного набора;
int —целое, обычно отображающее естественное представление целых в машине;
float —число с плавающей точкой одинарной точности;
double —число с плавающей точкой двойной точности.
При своем объявлении переменная может быть инициализирована, например:
char esc = '\\';
int i = 0;
int limit = MAXLINE+1;
floateps= 1.0e-5;
Логический тип boolean
имеет два значения:true/false(истина и ложь).
Функции ввод/выводa (для Arduino)
Микроконтроллеры отличаются широким набором интерфейсов ввод/выводa, но они отличаются от используемых на персональных компьютерах.
Цифровой ввод/вывод на контакты
digitalWrite()
digitalRead()