Цифровой ввод/вывод на контакты

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;

intlimit = MAXLINE+1;

floateps= 1.0e-5;

 

 

Логический тип boolean

имеет два значения:true/false(истина и ложь).

 

Функции ввод/выводa (для Arduino)

Микроконтроллеры отличаются широким набором интерфейсов ввод/выводa, но они отличаются от используемых на персональных компьютерах.

Цифровой ввод/вывод на контакты

digitalWrite()

digitalRead()