Тема 6. IDE Arduino. Скетч и его структура.
План
1. Внешний вид IDE Arduino
2. Структура программы
3. Основные функции
Теоретическая часть
1 Внешний вид IDE Arduino
Для программирования плат Arduino существует специальная интегрированная среда разработки IDE Arduino. Рассмотрим внешний вид программы(рис 1).
Рисунок 1 — Внешний вид IDE Arduino
Вверху, под строкой заголовка находится строка Меню, со следующими пунктами: Файл, Правка, Скетч, Настройки, Сервис.
Под строкой меню располагается строка инструментов, на которую вынесены частоиспользуемые команды:
проверить
Загрузить
Создать
Сохранить
Открыть
монитор порта.
Ниже располагается строка с названиями открытых вкладок. В конце строки находится пиктограмма , по нажатии на которую открывается меню, относящееся ко вкладкам.
В центре окна находится рабочая область, в которой пишется код программы. Под рабочей областью находится окно сообщений, куда выводятся сообщения о результате компиляции, загрузки и т.д.
2 Структура программы
Программа, написанная в IDE Arduino называется скетчем. Каждый скетч должен состоять как минимум из двух функций:
void setup()
{
операторы;
}
void loop()
{
операторы;
}
В начале программы, перед функцией setup, обычно, объявляются переменные. После включения питания платы первой выполняется функция setup. Она выполняется только один раз. Обычно в ней инициализируются режимы работы портов, устанавливается скорость работы с последовательным портом и т.д.
Код, написанный в функции loop() начинает выполняться после выполнения функции setup(), и выполняется в бесконечном цикле снова и снова. В этой функции выполняется основная работа: различные вычисления, получение значений датчиков, вывод значений на порты.
3 Основные функции
pinMode(номер_порта, режим) — установка дискретного(цифрового) порта с номерами от 0 до 13, как вход( INPUT) или выход (OUTPUT).
pinMode(0, OUTPUT); //0 порт устанавливается как выход
pinMode(1, INPUT); //1 порт устанавливается как вход
Аналоговые порты могут использоваться как дискретные , при обращении к ним по номерам, начиная с 14 (аналоговый вход 0) .
digitalWrite(номер_порта, значение) — посылает на указанный номер порта значение HIGH или LOW.
Пример:
digitalWrite(2, HIGH); /* выставляем 2й вывод в «высокое» состояние. Например зажигаем светодиод */
digitalRead (номер_порта) — получает значение с указанного порта: HIGH (1) или LOW(0).
Пример:
int val;
val = digitalRead(3); /*получаем значение с 3го порта. Например определяем нажата или не нажата кнопка*/
Следует заметить, что если к порту ничего не подключено, то функция digitalRead () может хаотично возвращать значения HIGH или LOW.
analogRead(порт) — cчитывает значение с указанного аналогового порта. Может принимать значение от 0 до 1023. Максимальная скорость считывания с аналогового порта примерно 10000 раз в секунду.
Пример:
int val;
val = analogRead(4); /*считываем значение на 4м аналоговом входе, например поворот потенциометра */
Аналоговые порты по умолчанию определенны как входы.
analogWrite(порт, значение) — выводит на порт аналоговое значение от 0 до 255.
Пример:
analogWrite(5, 128); /*посылает на 5й порт значение 128. Например светодиод, подключенный к 5му выходу будет светиться со средней яркостью*/
Для аналоговых выходов не обязательно вызывать функцию pinMode().
delay(время_мс) — приостанавливает выполнение программы на заданное число миллисекунд.
Пример:
delay(1000); //пауза 1 секунда
delayMicroseconds(время_мкс) — приостанавливает выполнение программы на заданное число микросекунд.
Пример:
delayMicroseconds(500); //пауза 500 микросекунд
Последовательная передача данных
Arduino может принимать и посылать данные через последовательный порт. На компьютере он представлен USB COM-портом.
Serial.begin(скорость_передачи) — устанавливает скорость передачи информации COM-порта в битах в секунду для последовательной передачи данных. Нормированные скорости: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, или 115200. Для связи с другими микроконтроллерами могут использоваться другие скорости.
Пример:
Serial.begin(9600); //устанавливаем скорость 9600 бит/сек
Serial.available() — принимаемые по последовательному порту байты попадают в буфер микроконтроллера, откуда программа может их считать и обработать. Функция Serial.available() возвращает количество накопленных в буфере байт. В буфере может храниться до 128 байт.
Пример:
if (Serial.available() > 0) { // Если в буфере есть данные
// операторы приема и обработки данных
}
Serial.read() — cчитывает следующий байт из буфера последовательного порта.
Пример:
incomingByte = Serial.read(); // считываем байт
Serial.flush() — очищает входной буфер последовательного порта. Находящиеся в буфере данные стираются, и дальнейшие вызовы Serial.read() или Serial.available() будут иметь смысл для данных, полученных после вызова Serial.flush().
Практическое задание
1. Написать программу, которая поворачивает серводвигатель на угол, задаваемый поворотом потенциометра.
#include
Servo myservo;
int potpin = 0;
int val;
void setup()
{
myservo.attach(9);
}
void loop()
{
val = analogRead(potpin);
val = map(val, 0, 1023, 0, 179);
myservo.write(val);
delay(15);
}
Домашнее задание
2. Написать программу, которая поворачивает серводвигатель на угол, задаваемый через монитор порта.