Содержание
- 1 Программирование Arduino
- 2 Математика, вычисления
- 3 Библиотеки для экранов, индикаторов и дисплеев
- 4 Arduino Bluetooth Control
- 5 Критерии выбора хорошего биокамина и принцип его работы
- 6 Начало работы с Ардуино
- 7 3. Подключение платы Arduino к компьютеру
- 8 Добавить ваш
- 9 Arduino UNO: прошивка, память
- 10 Язык Arduino
- 11 Какие бывают платы
- 12 Библиотеки коммуникации
- 13 Структура кода
- 14 Элементы платы
Программирование Arduino
Теперь, когда необходимая нам схема собрана, мы можем начать программирование платы Arduino UNO. Полный текст программы будет приведен в конце статьи, в этом разделе будет дано объяснение некоторых участков кода этой программы.
В каждой программе для Arduino должны обязательно присутствовать две функции – это функции void setup () и void loop (), иногда их называют «абсолютным минимумом», необходимым для написания программы. Все операции, которые мы запишем внутри void setup (), исполнятся только один раз, а операции, которые мы запишем внутри void loop () – будут исполняться снова и снова. Пример этих функций показан в коде ниже – именно в таком виде они создаются когда вы выбираете пункт меню File -> New.
Arduino
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
1 |
voidsetup(){ // put your setup code here, to run once: } voidloop(){ // put your main code here, to run repeatedly: } |
Начнем писать программу в функции setup (). Обычно в этой функции объявляются названия пинов (контактов). В нашей программе нам необходимо объявить всего два контакта: контакт 2 в качестве входного контакта и контакт 3 в качестве выходного контакта. Это можно сделать с помощью следующих строчек кода:
Arduino
pinMode(2,INPUT);
pinMode (3,OUTPUT);
1 |
pinMode(2,INPUT); pinMode(3,OUTPUT); |
Но здесь необходимо внести небольшое изменение в программу – нам желательно чтобы контакт 2, который мы объявили в качестве входного контакта, никогда не был бы в «плавающем» состоянии. Это означает что входной контакт должен быть всегда подсоединен либо к +5 В, либо к земле. А в нашем случае при нажатии кнопки он будет подсоединен к земле, а при отжатой кнопке он будет находиться в плавающем состоянии. Чтобы исключить это нам необходимо задействовать внутренний подтягивающий резистор, который находится внутри микроконтроллера ATmega 328 (то есть снаружи мы этот резистор не видим). Для его задействования необходимо написать соответствующую строчку кода в программе.
С помощью этой строчки кода контакт 2 будет подключаться через подтягивающий резистор к напряжению +5 В всегда когда он не подсоединен к земле. То есть мы должны в одной из написанных нами строчек кода изменить слово INPUT на слово INPUT_PULLUP как показано ниже.
Arduino
pinMode(2,INPUT_PULLUP);
1 | pinMode(2,INPUT_PULLUP); |
Теперь, когда мы закончили с функцией setup (), перейдем к функции loop (). В этой функции мы должны проверять не подсоединен ли контакт 2 к земле (то есть на его входе низкий уровень – LOW) и если он подсоединен в земле, то мы должны зажечь светодиод при помощи подачи на контакт 3 высокого уровня (HIGH). А если контакт 2 не подсоединен к земле (то есть кнопка не нажата), то мы должны держать светодиод в выключенном состоянии при помощи подачи на контакт 3 низкого уровня (LOW). В программе это будет выглядеть следующим образом:
Arduino
if (digitalRead(2) == LOW)
{
digitalWrite(3,HIGH);
}
else
{
digitalWrite(3,LOW);
}
1 |
if(digitalRead(2)==LOW) { digitalWrite(3,HIGH); } else { digitalWrite(3,LOW); } |
В этих строчках кода оператор digitalRead() используется для проверки статуса (состояния) входного контакта. Если контакт подсоединен к земле, то оператор digitalRead() возвратит значение LOW, а если оператор подсоединен к +5 В, то оператор возвратит значение HIGH.
Аналогично, оператор digitalWrite() используется для установки состояния выходного контакта. Если мы установим контакт в состояние HIGH, то на его выходе будет напряжение +5 В, а если мы установим контакт в LOW, то на его выходе будет 0 В.
Таким образом в нашей программе когда мы нажимаем кнопку на контакт 2 будет подана земля и, соответственно, на контакт 3 мы подаем высокий уровень +5 В (HIGH) чтобы зажечь светодиод. Если условие не выполняется – то есть на контакт 2 не подана земля, то мы на контакт 3 подаем низкий уровень 0 В (LOW) чтобы выключить светодиод.
На этом наша программа закончена, теперь загрузим код программы на нашу плату Arduino таким же образом как ранее мы загружали код программы мигания светодиодом.
Математика, вычисления
// ========= МАТЕМАТИКА =========
// полный урок тут: https://alexgyver.ru/lessons/compute/
+ , — , * , / , % ; // сложить, вычесть, умножить, разделить, остаток от деления
a = b + c / d;
++ , — , += , -= , *= , /= ; // прибавить 1, вычесть 1, прибавить, вычесть, умножить, разделить
a++; // ~ a = a + 1;
a /= 10; // ~ a = a / 10;
// === БОЛЬШИЕ ВЫЧИСЛЕНИЯ ===
// ВАЖНО! Для арифметических вычислений по умолчанию используется ячейка long (4 байта)
// но при умножении и делении используется int (2 байта)
// Если при умножении чисел результат превышает 32’768, он будет посчитан некорректно.
// Для исправления ситуации нужно писать (long) перед умножением, что заставит МК выделить дополнительную память
long val;
val = 2000000000 + 6000000; // посчитает корректно (т.к. сложение)
val = 25 * 1000; // посчитает корректно (умножение, меньше 32’768)
val = 35 * 1000; // посчитает НЕКОРРЕКТНО! (умножение, больше 32’768)
val = (long)35 * 1000; // посчитает корректно (выделяем память (long) )
val = 1000 + 35 * 10 * 100; // посчитает НЕКОРРЕКТНО! (в умножении больше 32’768)
val = 1000 + 35 * 10 * 100L; // посчитает корректно! (модификатор L)
val = (long)35 * 1000 + 35 * 1000; // посчитает НЕКОРРЕКТНО! Второе умножение всё портит
val = (long)35 * 1000 + (long)35 * 1000; // посчитает корректно (выделяем память (long) )
// === ВЫЧИСЛЕНИЯ FLOAT ===
// если при вычислении двух целочисленных нужен дробный результат — пишем (float)
float val;
val = 100 / 3; // посчитает НЕПРАВИЛЬНО (результат 3.0)
val = (float)100 / 3; // посчитает правильно (указываем (float))
val = 100.0 / 3; // посчитает правильно (есть число float)
// при присваивании float числа целочисленному типу данных дробная часть отсекается
int val;
val = 3.25; // val принимает 3
val = 3.92; // val принимает 3
val = round(3.25); // val принимает 3
val = round(3.92); // val принимает 4
// === МАТЕМАТИЧЕСКИЕ ФУНКЦИИ ===
// Ограничить диапазон числа val между low и high
val = constrain(val, low, high);
// Перевести диапазон числа val (от inMin до inMax) в новый диапазон (от outMin до outMax)
val = map(val, inMin, inMax, outMin, outMax);
min(a, b); // Возвращает меньшее из чисел a и b
max(a, b); // Возвращает большее из чисел
abs(x); // Модуль числа
round(x); // Математическое округление
radians(deg); // Перевод градусов в радианы
degrees(rad); // Перевод радиан в градусы
sq(x); // Квадрат числа
cos(x) // Косинус (радианы)
sin(x) // Синус (радианы)
tan(x) // Тангенс (радианы)
fabs(x) // Модуль для float чисел
fmod(x, y) // Остаток деления x на у для float
sqrt(x) // Корень квадратный
sqrtf(x) // Корень квадратный для float чисел
cbrt(x) // Кубический корень
hypot(x, y) // Гипотенуза ( корень(x*x + y*y) )
square(x) // Квадрат ( x*x )
floor(x) // Округление до целого вниз
ceil(x) // Округление до целого вверх
exp(x) // Экспонента (e^x)
cosh(x) // Косинус гиперболический (радианы)
sinh(x) // Синус гиперболический (радианы)
tanh(x) // Тангенс гиперболический (радианы)
acos(x) // Арккосинус (радианы)
asin(x) // Арксинус (радианы)
atan(x) // Арктангенс (радианы)
atan2(y, x) // Арктангенс (y / x) (позволяет найти квадрант, в котором находится точка)
log(x) // Натуральный логарифм х ( ln(x) )
log10(x) // Десятичный логарифм x ( log_10 x)
pow(x, y) // Степень ( x^y )
fma(x, y, z) // Возвращает x*y + z
fmax(x, y) // Возвращает большее из чисел
fmin(x, y) // Возвращает меньшее из чисел
trunc(x) // Возвращает целую часть числа с дробной точкой
round(x) // Математическое округление
// === КОНСТАНТЫ ===
F_CPU // частота тактирования в Гц (16000000 для 16 МГц)
INT8_MAX // 127 Максимальное значение для char, int8_t
UINT8_MAX // 255 Максимальное значение для byte, uint8_t
INT16_MAX // 32767 Максимальное значение для int, int16_t
UINT16_MAX // 65535 Максимальное значение для unsigned int, uint16_t
INT32_MAX // 2147483647 Максимальное значение для long, int32_t
UINT32_MAX // 4294967295 Максимальное значение для unsigned long, uint32_t
M_E // 2.718281828 Число e
M_LOG2E // 1.442695041 log_2 e
M_LOG10E // 0.434294482 log_10 e
M_LN2 // 0.693147181 log_e 2
M_LN10 // 2.302585093 log_e 10
M_PI // 3.141592654 pi
M_PI_2 // 1.570796327 pi/2
M_PI_4 // 0.785398163 pi/4
M_1_PI // 0.318309886 1/pi
M_2_PI // 0.636619772 2/pi
M_2_SQRTPI // 1.128379167 2/корень(pi)
M_SQRT2 // 1.414213562 корень(2)
M_SQRT1_2 // 0.707106781 1/корень(2)
PI // 3.141592654 Пи
HALF_PI // 1.570796326 пол Пи
TWO_PI // 6.283185307 два Пи
EULER // 2.718281828 Число Эйлера е
DEG_TO_RAD // 0.01745329 Константа перевода град в рад
RAD_TO_DEG // 57.2957786
Библиотеки для экранов, индикаторов и дисплеев
Библиотека I2C
Библиотека, предназначенная для работы периферийного устройства по протоколу I2C.
Пример использования:
#ifndef I2C_MASTER_H
#define I2C_MASTER_H
void I2C_init (void) – создание объекта, настройка на правильную частоту для шины.
uint8_t I2C_start () – установка соединения с новым устройством.
uint8_t I2C_write() – запись данных на текущее устройство.
uint8_t I2C_read_ack() – считывание байта с устройства, запрос следующего байта.
Библиотека LiquidCrystal
Стандартная библиотека, установленная в Arduino IDE. Предназначена для управления жидкокристаллическими дисплеями LCD.
Пример использования:
#include <LiquidCrystal.h>. Также, чтобы не ошибиться при написании, можно подключить через меню Sketch – Import Library – LiquidCrystal.
Конструктор класса – LiquidCristal(…). Аргументами являются rs, rw, en, do…d7. Первые 3 соответствую выводам сигналов RS, RW и Enable. Выводы d соответствуют номерам шин данных, к которым подключен дисплей.
void begin(cols, rows) – метод, который инициализирует интерфейс дисплея. Аргументами являются количество знаков в строке (cols) и число строк (rows). Этот метод должен задаваться первым.
void createChar(num, data) – метод, необходимый для создания пользовательских символов.
Библиотека UTFT
Стандартная библиотека, необходимая для работы Ардуино с TFT экранами разных типов. Все поддерживаемые дисплеи представлены в сопроводительном документе с библиотекой.
Пример использования:
#include <UTFT.h>
UTFT(); – создание экземпляра UTFT.
textRus(char*st, int x, int y); – метод, позволяющий выводить строку из указателя. Например, char *dht = “Температура,С”;
textRus(string st, int x, int y); – вывод строки с указанием в параметре. Например, g.textRus(“Температура, С”, 0, 20);
Библиотека LedControl
Позволяет управлять семисегментными дисплеями, объединять массив из светодиодов в одну матрицу.
Пример использования:
#include <LedControl.h>
LedControl lc1= LedControl( );
– требуется для инициализации библиотеки. Должна состоять из четырех аргументов – номера пинов, к которым подключен дисплей (первые 3 аргумента) и количество подключенных чипов.
writeArduinoOn7Segment() – отображение на дисплее всех чисел от 0 до 15. Использует функции setChar() для символов a и d и setRow() для создания макета пропущенных символов.
LedControl.shutdown() – отключение изображения.
setIntensity() – контроль яркости.
Arduino Bluetooth Control
Сокращенное название — ABC. Управляет и контролирует основные возможности API. Используется в мониторинге контактов через Bluetooth. Работает в автономном режиме. Приобщение к работе производит строго из Ардуино.
Инструменты, используемые в процессе:
- Metrics – передает показатели о сбоях и изменениях. Те, свою очередь, приходят на телефон в виде сообщения об остановке работы. Это подобие функции, где встряхнув гаджет можно отправить данные.
- Клавиши с указателями – служат для отправки информации.
- Терминал – варьирует информацией с временными показателями по назначению.
- Accelerometer – управление жестами. Смартфон превращается в механизм для регулирования машины.
- Голос – создает речевые команды. Доступно голосовое общение с роботом.
- Кнопки – функционируют 6 штук в горизонтальном положении. Используются для доставки информации на Arduino.
Управление проектами в дистанционном и удаленном виде стало частой необходимостью. ABC подходит для этих целей на 100%. UART (Serial) предназначается для беспроводного соединения Ардуино и PC. Данное подключение не нуждается в библиотеках и схемах.
Критерии выбора хорошего биокамина и принцип его работы
Начало работы с Ардуино
Говоря бытовым языком, Ардуино – это электронная плата, в которую можно воткнуть множество разных устройств и заставить их работать вместе с помощью программы, написанной на языке Ардуино в специальной среде программирования.
Чаще всего плата выглядит вот так:
На рисунке показана одна из плат Ардуино – Arduino Uno. Мы изучим ее подробнее на следующих уроках.
В плату можно втыкать провода и подключать множество разных элементов. Чаще всего, для соединения используется макетная плата для монтажа без пайки. Можно добавлять светодиоды, датчики, кнопки, двигатели, модули связи, реле и создавать сотни вариантов интересных проектов умных устройств. Плата Ардуино – это умная розетка, которая будет включать и выключать все присоединенное в зависимости от того, как ее запрограммировали.
Вся работа над проектом разбивается на следующие этапы:
- Придумываем идею и проектируем.
- Собираем электрическую схему. Тут нам пригодится макетная плата, упрощающая монтаж элементов. Безусловно, понадобятся навыки работы с электронными приборами и умение пользоваться мультиметром.
- Подключаем плату Arduino к компьютеру через USB.
- Пишем программу и записываем ее в плату буквально нажатием одной кнопки на экране в специальной среде программирования Arduino.
- Отсоединяем от компьютера. Теперь устройство будет работать автономно – при включении питания оно будет управляться той программой, которую мы в него записали.
Программа и среда программирования выглядят вот так:
На экране показана программа (на сленге ардуинщиков текст программы называется “скетч”), которая будет мигать лампочкой, подсоединенной к 13 входу на плате Ардуино UNO. Как видим, программа вполне проста и состоит из понятных для знающих английский язык инструкций. В языке программирования Arduino используется свой диалект языка C++, но все возможности C++ поддерживаются.
Есть и другой вариант написания кода – визуальный редактор. Тут не нужно ничего писать – можно просто перемещать блоки и складывать из них нужный алгоритм. Программа загрузится в подключенную плату одним нажатием кнопки мыши!
Визуальную среду рекомендуется использовать школьникам младших классов, более старшим инженерам лучше сразу изучать “настоящий” Ардуино – это довольно просто, к тому же знания C++ никому не повредят.
В целом все выглядит довольно понятно, не так ли? Осталось разобраться в деталях.
3. Подключение платы Arduino к компьютеру
- Соедините Arduino с компьютером по USB-кабелю. На плате загорится светодиод «ON» и начнёт мигать светодиод «L». Это значит, что на плату подано питание и микроконтроллер начал выполнять прошитую на заводе программу «Blink».
- Для настройки Arduino IDE под конкретную модель узнайте, какой номер COM-порта присвоил компьютер вашей плате. Зайдите в «Диспетчер устройств» Windows и раскройте вкладку «Порты (COM и LPT)».
Операционная система распознала плату Arduino как COM-порт и назначила номер . Если вы подключите к компьютеру другую плату, операционная система назначит ей другой номер
Если у вас несколько платформ, очень важно не запутаться в номерах COM-портов.
Что-то пошло не так?
После подключения Arduino к компьютеру, в диспетчере устройств не появляются новые устройства? Это может быть следствием следующих причин:
- Неисправный USB-кабель или порт
- Блокировка со стороны операционной системы
- Неисправная плата
Добавить ваш
Arduino UNO: прошивка, память
Программирование платы происходит в бесплатной среде Arduino IDE на русском, которую можно скачать на официальном сайте. Для подключения устройств и модулей используются коннекторы («папа-папа» и «папа-мама»), которые подключаются к портам Ардуино. Чтобы начать работать с платформой, перейдите в раздел Arduino uno r3 «Уроки для начинающих» , где представлены подробные инструкции с примерами.
Плата поддерживает три типа памяти:
Flash – память объемом 32 кБ, используется для хранения программы. Когда контроллер прошивается скетчем через USB, он записывается именно во Flash – память. Чтобы очистить память Arduino UNO следует загрузить пустой скетч.
SRAM память — это оперативная память Ардуино объемом 2 кБ. Здесь хранятся переменные и объекты, создаваемые в скетче. SRAM память энерго-зависимая, при отключении источника питания от платы, все данные удалятся.
EEPROM — это энергонезависимая память объемом 1кБ. Сюда можно записывать данные, которые при выключении питания не исчезнут. Минус EEPROM в ограничении циклов перезаписи — 100 000 раз по утверждениям производителя.
Описание Ардуино УНО на русском
Рекомендуем вам ознакомиться с другими платами из линейки Arduino-Genuino, например, аналог самой популярной платы UNO — RobotDyn UNO R3 от китайского производителя. Плата по своим характеристикам ничем не уступает официальному производителю, но при этом имеет более демократичную цену и ряд преимуществ. Таких как, более удобный USB-разъем и большее количество аналоговых входов.
Плата Arduino Uno – центр большой империи Arduino, самое популярное и самое доступное устройство. В ее основе лежит чип ATmega – в последней ревизии Ардуино Уно R3 – это ATmega328 (хотя на рынке можно еще встретить варианты платы UNO с ATmega168). Большинство ардуинщиков начинают именно с платы UNO. В этой статье мы рассмотрим основные особенности, характеристики и устройство платы Arduino Uno ревизии R3, требования к питанию, возможности подключения внешних устройств, отличия от других плат (Mega, Nano).
Язык Arduino
Если опытный программист посмотрит на код для Arduino, он скажет, что это код на C++. Это недалеко от истины: основная логика Ардуино реализована на C++, а сверху на неё надет фреймворк Wiring, который отвечает за общение с железом.
На это есть несколько причин:
- У С++ слава «слишком сложного языка». Arduino позиционируется как микроконтроллеры и робототехника для начинающих, а начинающим иногда трудно объяснить, что С++ не такой уж сложный для старта. Проще сделать фреймворк и назвать его отдельным языком.
- В чистом С++ нет удобных команд для AVR-контроллеров, поэтому нужен был инструмент, который возьмёт на себя все сложные функции, а на выходе даст программисту часто используемые команды.
- Разработчики дали программистам просто писать нужные им программы, а все служебные команды, необходимые для правильного оформления кода на С++, взяла на себя специальная среда разработки.
Среда разработки (IDE) Arduino.
Какие бывают платы
По производителю
Существуют как официальные версии плат Arduino, так и платы от сторонних производителей. Оригинальные платы отличаются высоким качеством продукта, но и цена тоже выше. Они производятся только в Италии и США, о чём свидетельствует надпись на самой плате.
На примере самой популярной платы Arduino UNO:
-
Оригинальная плата. Поставляется только в фирменной коробке, имеет логотип компании, на портах платы — маркировка. Цена от производителя 20 €.
-
Плата от стороннего производителя. Качество хуже, однако цена начинается от 150 рублей. Качество платы может отразиться на её работоспособности в дальнейшем. Хоть это и редкость, но плата и вовсе может не работать «из коробки» — всё зависит от добросовестности изготовителя и продавца. Для работы с подобными платами требуется драйвер CH340, который находится в свободном доступе. Во всём остальном процесс разработки идентичен процессу разработки на оригинальных платах.
По назначению
У платы UNO достаточно портов для реализации большинства проектов. Однако иногда возможностей UNO может быть недостаточно, а иногда — избыточно. По этой причине как оригинальный, так и сторонние производители выпускают большое количество плат, различающихся характеристиками микроконтроллера, количеством портов и функциональным назначением.
Различные платы Arduino. Источник
Самые популярные из них:
- Arduino Nano — различие с UNO только в конструктивном исполнении. Nano меньше.
- Arduino Mega — плата на базе мощного микроконтроллера. Имеет большое количество портов.
- Arduino Micro — имеет встроенную поддержку USB-соединения, а потому может использоваться как HID-устройство (клавиатура, мышь, MIDI-устройство).
- Arduino Ethernet — имеет возможность подключения к сети через Ethernet-провод. На плате также расположен слот для microSD карточки.
- Arduino Mini — по характеристикам немного уступает UNO. Преимуществом платы является её миниатюрное исполнение.
- Arduino Due — плата на базе 32-разрядного ARM микроконтроллера. Имеет преимущество в производительности по сравнению с остальными.
- Arduino LilyPad — форм-фактор позволяет использовать плату в предметах одежды и текстиля.
- Arduino Yún — «нужно было ставить линукс…». Имеет поддержку дистрибутива Linux, встроенную поддержку Ethernet и Wi-Fi, слот для microSD. Как и Micro, имеет встроенную поддержку USB-соединения.
4
Библиотеки коммуникации
Библиотека Wire
Требуется для работы с двухпроводным интерфейсом I2C.
Пример использования:
#include <Wire.h>
Wire.begin() – инициализация библиотеки, подключение к шине I2C.
Wire.requestFrom() – запрос мастером байтов от ведомого устройства.
Wire.beginTransmission() – начало передачи на ведомое устройство.
Библиотека Irremote
Требуется для работы ардуино с ИК приемником.
Пример использования:
#include <IRremote.h>
IRrecv irrecv(RECV_PIN); – пин, к которому подключен ИК приемник.
SetPinAndButton(int ir1,int ir2,int pin) – позволяет настроить определенный выход на срабатывание при заданных значениях ir1, ir2.
Библиотека GSM
Требуется для соединения через GSM-плату с сетью GSM/GRPS. С ее помощью можно реализовать операции, свершаемые GSM-телефоном, работать с голосовыми вызовами и подключаться к сети интернет через GRPS.
Пример использования:
#include <GSM.h>
GSM GSMAccess – инициализирует экземпляр класса.
gprs.powerOn() – включение питания.
GSMVoiceCall – настройка голосовых вызовов.
GPRS – настройка подключения к интернету.
GSM – управление радио-модемом.
Библиотека RFID
Требуется для соединения Ардуино и RFID-модуля.
Пример использования:
#include <RFID.h>
RFID rfid(SS_PIN, RST_PIN); – создание экземпляра rfid, аргументы – пины, к которым подключен модуль.
rfid.init(); – инициализация модуля RFID.
Библиотека MFRC 522
Требуется для соединения Ардуино и MFRC522 -модуля.
Пример использования:
#include <MFRC522.h>
MFRC522 mfrc522(SS_PIN, RST_PIN); – создание экземпляра MFRC522, аргументами указаны выходы, к которым подключен модуль.
mfrc522.PCD_Init(); – инициализация MFRC522.
Библиотека Ethershield
Новая версия https://github.com/jcw/ethercard
Требуется для подключения Ардуино к локальной сети или сети интернет. Библиотека больше не поддерживается, более новая версия Ethercard. Также существует стандартная библиотека Ethernet.
Пример использования:
#include «EtherShield.h»
#include <EtherCard.h>
EtherShield es = EtherShield (); – подготовка веб-страницы
ether.begin(sizeof Ethernet::buffer, mymac, ); – начало работы, аргументы – адрес Mac и номер порта, к которому подключен выход CS.
Библиотека Nrf24l01
Требуется для работы с RF24-радиомодулем.
Пример использования:
#include “RF24.h”
RF24 – Конструктор создает новый экземпляр драйвера. Перед тем, как использовать, нужно создать экземпляр и указать пины, к которым подключен чип (_cepin : контакт модуля Enable, cspin : контакт модуля Select).
Begin – начало работы чипа.
setChannel – каналы для связи RF.
setPayloadSize – установка фиксированного размера передачи.
getPayloadSize – получение фиксированного размера.
Библиотека TinyGPS
Требуется для чтения сообщений GPGGA и GPRMC. Помогает считывать данные о положении, дате, времени, высоте и других параметрах.
Пример использования:
#include <TinyGPS.h>
TinyGPS gps; – создание экземпляра TinyGPS.
encode () – подача на объект последовательных данных по одному символу.
gps.stats( ) – метод статистики. Показывает, получены корректные данные или нет.
Структура кода
Прежде чем переходить к структуре и порядку частей кода, нужно кое-что запомнить:
- Переменная любого типа должна вызываться после своего объявления. Иначе будет ошибка
- Объявление и использование классов или типов данных из библиотеки/файла должно быть после подключения библиотеки/файла
- Функция может вызываться как до, так и после объявления, потому что C++ компилируемый язык, компиляция проходит в несколько этапов, и функции “выделяются” отдельно, поэтому могут вызываться в любом месте программы
При запуске Arduino IDE даёт нам заготовку в виде двух обязательных функций: setup и loop
Код в блоке выполняется один раз при каждом запуске микроконтроллера. Код в блоке выполняется “по кругу” на всём протяжении работы микроконтроллера, начиная с момента завершения выполнения .
Для любознательных: если вы уже знакомы с языком C++, то вероятно спросите “а где же и вообще файл main.cpp?”. Всё очень просто: за вас уже написали внутри файла main.cpp, который лежит глубоко в файлах “ядра”, а и встроены в него следующим образом:
// main.cpp // где-то в глубинах ядра Arduino int main() { setup(); for (;;) { loop(); } return 0; }
На протяжении нескольких лет работы с Arduino я сформировал для себя следующую структуру скетча:
- Описание прошивки, полезные ссылки, заметки, авторство
- Константы настройки (define и обычные)
- Служебные константы (которые следует менять только с полным осознанием дела)
- Подключаемые библиотеки и внешние файлы, объявление соответствующих им типов данных и классов
- Глобальные переменные
- setup()
- loop()
- Свои функции
/* Данный скетч плавно крутит сервопривод туда-обратно между мин. и макс. углами by AlexGyver */ // -------- НАСТРОЙКИ --------- #define SERVO_PIN 13 // сюда подключена серво #define SERVO_SPEED 3 // скорость серво #define MIN_ANGLE 50 // мин. угол #define MAX_ANGLE 120 // макс. угол // ------- БИБЛИОТЕКИ ------- #include <Servo.h> Servo myservo; // ------- ПЕРЕМЕННЫЕ ------- uint32_t servoTimer; boolean servoDirection; int servoAngle; // --------- SETUP ---------- void setup() { myservo.attach(SERVO_PIN); } // ---------- LOOP ---------- void loop() { turnServo(); } // --------- ФУНКЦИИ -------- void turnServo() { if (millis() - servoTimer >= 50) { // каждые 50 мс servoTimer = millis(); if (servoDirection) { servoAngle += SERVO_SPEED; if (servoAngle >= MAX_ANGLE) { servoAngle = MAX_ANGLE; servoDirection = false; } } else { servoAngle -= SERVO_SPEED; if (servoAngle <= MIN_ANGLE) { servoAngle = MIN_ANGLE; servoDirection = true; } } myservo.write(servoAngle); } }
Это удобная структура для “скетча”, крупные проекты так писать не рекомендуется и следует приучать себя к более взрослым подходам, описанным в уроке по разработке крупных проектов.
Элементы платы
Микроконтроллер ATmega328P
Сердцем платформы Arduino Uno является 8-битный микроконтроллер фирмы Microchip — ATmega328P на архитектуре AVR с тактовой частотой 16 МГц.
Контроллер обладает тремя видами памяти:
- 32 КБ Flash-памяти, из которых 0,5 КБ используются загрузчиком, который позволяет прошивать Arduino Uno с обычного компьютера через USB. Flash-память постоянна и её предназначение — хранение программ и сопутствующих статичных ресурсов.
- 2 КБ RAM-памяти, которые предназначены для хранения временных данных, например переменных программы. По сути, это оперативная память платформы. RAM-память энергозависимая, при выключении питания все данные сотрутся.
- 1 КБ энергонезависимой EEPROM-памяти для долговременного хранения данных, которые не стираются при выключении контроллера. По своему назначению — это аналог жёсткого диска для Arduino.
Микроконтроллер ATmega16U2
Микроконтроллер не содержит USB интерфейса, поэтому для прошивки и коммуникации с ПК на плате присутствует дополнительный микроконтроллер ATmega16U2 с прошивкой USB-UART преобразователя. При подключении к ПК Arduino Uno определяется как виртуальный COM-порт.
общается с ПК через по интерфейсу UART используя сигналы и , которые параллельно выведены на контакты и платы Arduino Uno. Во время прошивки и отладки программы, не используйте эти пины в своём проекте.
Светодиодная индикация
Имя светодиода | Назначение |
---|---|
ON | Индикатор питания платформы. |
L | Пользовательский светодиод на пине микроконтроллера. Используйте определение для работы со светодиодом. При задании значения высокого уровня светодиод включается, при низком – выключается. |
RX и TX | Мигают при прошивки и обмене данными между Arduino Uno и компьютером. А также при использовании пинов и . |
Порт USB Type-B
Разъём USB Type-B предназначен для прошивки и питания платформы Arduino. Для подключения к ПК понадобиться кабель USB (A — B).
Понижающий регулятор 5V
Понижающий линейный преобразователь NCP1117ST50T3G обеспечивает питание микроконтроллера и другой логики платы при подключении питания через или пин Vin. Диапазон входного напряжения от 7 до 12 вольт. Выходное напряжение 5 В с максимальным выходным током 1 А.
Понижающий регулятор 3V3
Понижающий линейный преобразователь LP2985-33DBVR обеспечивает напряжение на пине . Регулятор принимает входное напряжение от линии 5 вольт и выдаёт напряжение 3,3 В с максимальным выходным током 150 мА.
ICSP-разъём ATmega328P
ICSP-разъём выполняет две полезные функции:
- Используется для передачи сигнальных пинов интерфейса SPI при подключении Arduino Shield’ов или других плат расширения. Линии ICSP-разъёма также продублированы на цифровых пинах , , и .
- Предназначен для загрузки прошивки в микроконтроллер через внешний программатор. Одна из таких прошивок — Bootloader для Arduino Uno, который позволяет .
А подробности распиновки .