Программирование ардуино справочник языка + видео обзор

Содержание
  1. Язык программирования Ардуино
  2. Arduino IDE
  3. Какой язык используется для написания программы Arduino?
  4. Что такое sketch?
  5. Каковы общие синтаксические элементы в программировании Arduino?
  6. Каковы различные типы переменных в программе Arduino?
  7. Что такое int?
  8. Что такое Функция?
  9. Преимущества Arduino
  10. Вывод
  11. Arduino. Синтаксис и структура кода
  12. Синтаксис
  13. Оформление
  14. Форматирование
  15. Имена переменных
  16. Структура кода
  17. Полный список команд языка Ардуино
  18. Структура скетча
  19. Синтаксис, структура кода
  20. Условия (if, switch)
  21. Циклы (for, while)
  22. Операторы
  23. Арифметические
  24. Сравнение и логика
  25. Составные операторы
  26. Битовые операции
  27. Указатели и ссылки
  28. Работа с данными
  29. Типы данных, переменные
  30. Структуры
  31. Перечисления
  32. Классы
  33. Массивы
  34. Строки (объект String)
  35. Спецификаторы переменных
  36. Преобразование типов данных
  37. “Символьные” функции
  38. Работа с цифрами
  39. Целые и дробные числа
  40. Математические функции и константы
  41. Математические функции из math.h
  42. Размеры типов данных
  43. Математические константы
  44. Псевдослучайные числа
  45. Биты и байты
  46. Ввод-вывод
  47. Цифровые пины
  48. Аналоговые пины
  49. Аппаратные прерывания
  50. Видео

Язык программирования Ардуино

Программа Arduino обычно пишется в Arduino IDE. Программа представляет собой набор инструкций на встроенном языке C. Он имеет некоторые специальные заголовочные файлы в виде zip-файлов, которые доступны в Интернете для предоставления специализированных функций. Программы Arduino называются скетч.

Код Arduino должен содержать две функции:

Это два основных элемента любого кода Arduino.

Все объявления выполняются в voidsetup(). Название содержит слово «установка», которое должно выдавать его назначение. Фактические команды, (которые должны быть выполнены) и вычислительный процесс кодируются в функции voidloop (). ‘Петля » означает, что эскиз будет выполняться бесконечно.

Arduino IDE

Какой язык используется для написания программы Arduino?

Встроенный C используется для написания программ Arduino. Он используется для приложений, которые очень близки к аппаратному обеспечению. Это напрямую связано с аппаратным обеспечением. Он очень похож на C и C++. Но у него есть некоторые встроенные функции, отличные от обычных функций, используемых в обычном C.

Что такое sketch?

Программа Arduino называется sketch. Он содержит инструкции, которые должны быть выполненыArduino, которые написаны на встроенном языке C.

Каковы общие синтаксические элементы в программировании Arduino?

Общий синтаксис написания программы на Arduino почти аналогичен обычному C и C++. Тем, кто знаком с базовыми C и C++ будет легко в изучении arduino. Если вы хотите быстро подытожить свои знания языка Си, у нас есть бесплатный курс программирования на Си для начинающих, который вы можете проверить.

Каковы различные типы переменных в программе Arduino?

В языке программирования Arduino существует около 18 типов данных.

Что такое int?

Что такое Функция?

Помимо встроенных функций, вы также можете писать свои функции. Используя это, мы можем разделить большую программу на основные строительные блоки.

Он содержит набор программных операторов с фигурными скобками в виде <>. Он обеспечивает возможность повторного использования.

Определяемые пользователем функции подразделяются на четыре типа:

Преимущества Arduino

Вывод

Есть еще много чего, что вы можете сделать с Arduino, и мы рассмотрим следующий этап программирования Arduino на более позднем этапе этого курса Arduino. Однако того, что мы увидели в этом посте, должно быть более чем достаточно, чтобы вы могли работать с большинством проектов. Если у вас есть какие-либо вопросы, мы всегда рады помочь. Дайте нам знать в комментариях, и мы свяжемся с вами. Не стесняйтесь добавлять эту страницу в закладки для дальнейшего использования.

Источник

Arduino. Синтаксис и структура кода

Микроконтроллер штука мягко говоря тупая, не способная к мышлению и импровизации, и способная только выполнять точные инструкции. Общение с микроконтроллером происходит в письменном виде на языке программирования, язык это очень чёткий, строгий и имеет свой синтаксис и некоторые нормы оформления. И если синтаксическая ошибка приводит к ошибке компиляции кода или к неправильной работе прошитого им устройства, то оформление кода служит для удобства программиста, а также для тех, кто полезет разбираться с его кодом.

Непосредственно в сам микроконтроллер загружается бинарный машинный код, который выглядит как хаотичный набор букв и цифр. Данный код может быть получен из любого языка программирования, тут всё зависит от среды разработки и такой штуки как интерпретатор. Официальной средой разработки является Arduino IDE, где программирование осуществляется на языке C++ – одном из самых популярных и мощных языков. Сами разработчики называют язык Arduino Wiring, так как в стандартной библиотеке Arduino.h используются функции и инструменты из фреймворка Wiring. Но языком, именно языком, из которого берётся синтаксис, является C++, поэтому параллельно с изучением стандартных функций желательно изучить любой справочник по “плюсам”, например мне очень нравится вот этот. В нём можно найти гораздо больше информации по языку, чем во всех Ардуино-уроках вместе взятых (речь идёт именно о языке и синтаксисе, а не о функциях из Wiring). Помимо Си существуют среды разработки, позволяющие писать на Java, например Espruino WEB IDE, или B4R – на языке Basic. Или XOD – программировать придётся визуальными блоками. Но это откровенно говоря такое себе, мы будем рассматривать только Си.

Синтаксис

Программирование ардуино справочник языка

К синтаксису также можно отнести комментарии, т.к. в разных языках они выделяются по-разному. Комментарий это обычный текст, который игнорируется на этапе компиляции. Комментарии нужны для пояснения кода, как себе самому, так и другим возможным его читателям. В C++ у нас два типа комментариев:

Оформление

Форматирование

Есть такое понятие, как форматирование (выравнивание) кода, то есть соблюдение пробелов и интервалов. Чисто для примера, сравните эти два куска кода. Какой смотрится более понятно и наглядно?

Не бойтесь, во всех серьезных средах разработки есть автоформатирование кода, оно работает как в процессе написания, так и по вызову. Arduino IDE – не исключение, в ней код форматируется по горячей комбинации Ctrl+T.

Имена переменных

Структура кода

Прежде чем переходить к структуре и порядку частей кода, нужно кое-что запомнить:

При запуске Arduino IDE даёт нам заготовку в виде двух обязательных функций: setup и loop

Программирование ардуино справочник языка

Для любознательных: если вы уже знакомы с языком C++, то вероятно спросите “а где же int main() и вообще файл main.cpp?”. Всё очень просто: int main() за вас уже написали внутри файла main.cpp, который лежит глубоко в файлах “ядра”, а setup() и loop() встроены в него следующим образом:

На протяжении нескольких лет работы с Arduino я сформировал для себя следующую структуру скетча:

Источник

Полный список команд языка Ардуино

На этой странице представлен список всех (или почти всех) доступных “из коробки” команд для Arduino с кратким описанием и примерами. Часть информации взята из Гугла, в основном некоторые особенности языка, часть получена методом проб и ошибок. Полную информацию о том, как этим пользоваться, можно получить из уроков или официального reference. Также изо всех сил рекомендую вот этот онлайн справочник по C++, из него можно узнать гораздо больше о некоторых особенностях использования операторов и типов данных.

А ещё у меня есть краткий сборник всех основных Ардуино-функций для печати! Смотри в этом уроке.

Структура скетча

Синтаксис, структура кода

Ставится в конце каждого действия

Функция, содержимое которой выполняется один раз при запуске микроконтроллера. Подробнее – в этом уроке.

Функция, содержимое которой выполняется (или пытается выполняться) “по кругу” на протяжении всего времени работы МК. Подробнее – в этом уроке.

Директива, позволяющая подключать в проект дополнительные файлы с кодом.

В чём отличие <> и “”? Когда указываем название “в кавычках”, компилятор сначала ищет файл в папке со скетчем, а затем в папке с библиотеками. При использовании компилятор ищет файл только в папке с библиотеками

Директива, дающая команду препроцессору заменить указанное название на указанное значение. Чаще всего таким образом объявляют константы:

После компиляции все встречающиеся в тексте программы слова MOTOR_PIN будут заменены на цифру 10, а LED_PIN – на цифру 3. Такой способ хранения констант не использует оперативную память микроконтроллера. Также define позволяет делать т.н. макро функции. Например Ардуиновская функция sq (квадрат) является макро, который при компиляции превращается в умножение:

Директивы препроцессору, позволяющие включать или исключать участки кода по условию

При помощи условной компиляции очень удобно собирать и настраивать сложные проекты с кучей настроек и библиотек, подключаемых “по условию”. Например:

Если параметру DEBUG установить 1, то будет подключена библиотека Serial, если 0 – то нет. Таким образом получаем универсальный оптимизированный проект с отладкой. Подробнее – в этом уроке.

Условные директивы препроцессору, позволяют включать или исключать участки кода по условию: ifdef – определено ли? ifndef – не определено ли? Подробнее – в этом уроке.

Оператор перехода в другую часть кода по метке. Не рекомендуется к использованию, всегда можно обойтись без него. Как пример использования – выход из кучи условий

Оператор прерывания функции, он же оператор возврата значения из функции. Подробнее – в этом уроке

Условия (if, switch)

Оператор выбора, заменяет конструкцию с else if. Подробнее – в этом уроке.

Оператор break очень важен, позволяет выйти из switch. Но можно использовать так:

Циклы (for, while)

Пропускает все оставшиеся в теле цикла действия и переходит к следующей итерации

Операторы

Запятая тоже является оператором, используется в следующих случаях:

Рассмотрим третий случай здесь:

Арифметические

Арифметические операторы – самые простые и понятные из всех

Большой урок по математическим действиям.

Сравнение и логика

Подробный урок по сравнениям и условиям.

Составные операторы

По битовым операциям читай отдельный урок. По математическим операциям у меня тоже есть подробный урок.

Битовые операции

По битовым операциям читай урок у меня на сайте.

Указатели и ссылки

Подробнее об указателях и ссылках читайте в отдельном уроке.

Работа с данными

Типы данных, переменные

Переменная – элементарная ячейка для хранения данных (цифр). Переменные разных типов имеют разный “размер ячейки” и имеют разный лимит на размер числа.

НазваниеАльт. названиеВесДиапазонОсобенность
booleanbool1 байт0 или 1, true или falseЛогическая переменная. bool на Arduino тоже занимает 1 байт, а не бит!
charint8_t1 байт-128… 127Хранит номер символа из таблицы символов ASCII
byteuint8_t1 байт0… 255
intint16_t, short2 байта-32 768… 32 767
unsigned intuint16_t, word2 байта0… 65 535
longint32_t4 байта-2 147 483 648… 2 147 483 647– 2 миллиарда… 2 миллиарда
unsigned longuint32_t4 байта0… 4 294 967 2950… 4 миллиарда…
float4 байта-3.4028235E+38… 3.4028235E+38Хранит числа с плавающей точкой (десятичные дроби). Точность: 6-7 знаков
double4 байтаДля AVR то же самое, что float. А так он 8 байт
int64_t8 байт-(2^64)/2… (2^64)/2-1Очень большие числа. Serial не умеет такие выводить
uint64_t8 байт2^64-1Очень большие числа. Serial не умеет такие выводить

Существует еще несколько специальных типов данных для символов. Подробнее можно почитать здесь.

Создаёт тип данных под названием color, который будет абсолютно идентичен типу byte (то есть принимать 0-255). Теперь с этим типом можно создавать переменные:

Создали три переменные типа color, который тот же byte, только в профиль. Это всё!

Более подробно о переменных и данных можно почитать вот здесь.

Структуры

Структура (struct) – очень составной тип данных: совокупность разнотипных переменных, объединённых одним именем.

Ярлык будет являться новым типом данных, и, используя этот ярлык, можно объявлять уже непосредственно саму структуру:

Также есть вариант объявления структуры без создания ярлыка, т.е. создаём структуру, не объявляя её как тип данных со своим именем.

Более подробно про структуры читай тут.

Перечисления

Перечисления (enum – enumeration) – тип данных, представляющий собой набор именованных констант, нужен в первую очередь для удобства программиста.

Объявление перечисления чем-то похоже на объявление структуры:

Таким образом мы объявили ярлык. Теперь, используя этот ярлык, можно объявить само перечисление:

Также как и у структур, можно объявить перечисление без создания ярлыка (зачем нам лишняя строчка?):

Более подробно про перечисления читай тут.

Классы

Классы в С++ – это основной и очень мощный инструмент языка, большинство “библиотек” являются классами. Иерархия такая:

Класс объявляется следующим образом:

Более подробно про работу с классами читай вот в этом уроке про классы.

Массивы

Для объявления массива достаточно указать квадратные скобки после имени переменной, тип данных – любой. Более подробно про массивы читай в уроке.

Строки (объект String)

String – очень мощный инструмент для работы со строками, т.е. текстовыми данными. Объявить строку можно несколькими способами:

Подробнее про строки String и массивы символов читай в этом уроке.

Строки можно сравнивать, складывать и вычитать, также для работы с ними есть куча функций:

myString.charAt(index);

Возвращает элемент строки myString под номером index. Аналог – myString[index];

myString.setCharAt(index, val);

Записывает в строку myString символ val на позицию index. Аналог – myString[index] = val;

myString.concat(value);

Присоединяет value к строке (value может иметь любой численный тип данных). Возвращает true при успешном выполнении, false при ошибке. Аналог – сложение, myString + value;

myString.endsWith(myString2);

Проверяет, заканчивается ли myString символами из myString2. В случае совпадения возвращает true

myString.startsWith(myString2);

Проверяет, начинается ли myString символами из myString2. В случае совпадения возвращает true

myString.equals(myString2);

Возвращает true, если myString совпадает с myString2. Регистр букв важен

myString.equalsIgnoreCase (myString2);

Возвращает true, если myString совпадает с myString2. Регистр букв неважен

myString.indexOf(val);
myString.indexOf(val, from);

myString.lastIndexOf(val);
myString.lastIndexOf(val, from);

myString.length();

Возвращает длину строки в количестве символов

myString.remove(index);
myString.remove(index, count);

Удаляет из строки символы, начиная с index и до конца, либо до указанного count

myString.replace(substring1, substring2);

В строке myString заменяет последовательность символов substring1 на substring2.

myString.reserve(size);

Зарезервировать в памяти количество байт size для работы со строкой

myString.c_str();

Преобразовывает строку в “СИ” формат (null-terminated string) и возвращает указатель на полученную строку

myString.trim();

Удаляет пробелы из начала и конца строки. Действует со строкой, к которой применяется

myString.substring(from);
myString.substring(from, to);

Возвращает кусок строки, содержащейся в myString начиная с позиции from и до конца, либо до позиции to

myString.toCharArray(buf, len);

Раскидывает строку в массив – буфер buf (типа char []) с начала и до длины len

myString.getBytes(buf, len);

Копирует указанное количество символов len (вплоть до unsigned int) в буфер buf (byte [])

myString.toFloat();

Возвращает содержимое строки в тип данных float

myString.toDouble();

Возвращает содержимое строки в тип данных double

myString.toInt();

Возвращает содержимое строки в тип данных int

myString.toLowerCase();

Переводит все символы в нижний регистр. Было ААААА – станет ааааа

myString.toUpperCase();

Переводит все символы в верхний регистр. Было ааааа – станет ААААА

Спецификаторы переменных

Преобразование типов данных

Таким образом можно преобразовывать обычные переменные, указатели и другие типы данных.

И для строк мы уже рассматривали выше

Как пользоваться: на примере предыдущего примера

Подробный урок по типам данных смотри тут.

“Символьные” функции

Все следующие функции принимают как аргумент символ (тип char), анализируют его и возвращают true или false в зависимости от предназначения.

Работа с цифрами

Целые и дробные числа

Arduino поддерживает работу с целыми числами в разных системах исчисления:

БазисПрефиксПримерОсобенности
2 (двоичная)B или 0b (ноль бэ)B1101001цифры 0 и 1
8 (восьмеричная)0 (ноль)0175цифры 0 – 7
10 (десятичная)нет100500цифры 0 – 9
16 (шестнадцатеричная)0x (ноль икс)0xFF21Aцифры 0-9, буквы A-F

ВАЖНО! Для арифметических вычислений по умолчанию используется ячейка long (4 байта), но при умножении и делении используется int (2 байта), что может привести к непредсказуемым результатам! Если при умножении чисел результат превышает 32’768, он будет посчитан некорректно. Для исправления ситуации нужно писать (тип данных) перед умножением, что заставит МК выделить дополнительную память для вычисления (например (long)35 * 1000). Также существую модификаторы, делающие примерно то же самое.

Посмотрим, как это работает на практике:

Arduino поддерживает работу с числами с плавающей точкой (десятичные дроби). Этот тип данных не является для неё “родным”, поэтому вычисления с ним производятся в несколько раз дольше, чем с целочисленным типом (около 7 микросекунд на действие). Arduino поддерживает три типа ввода чисел с плавающей точкой:

Тип записиПримерЧему равно
Десятичная дробь20.520.5
Научный2.34E52.34*10^5 или 234000
Инженерный67e-1267*10^-12 или 0.000000000067

С вычислениями есть такая особенность: если в выражении нет float чисел, то вычисления будут иметь целый результат (дробная часть отсекается). Для получения правильного результата нужно писать (float) перед действием, или использовать float числа при записи. Смотрим:

Ну и напоследок, при присваивании float числа целочисленному типу данных дробная часть отсекается. Если хотите математическое округление – его нужно использовать отдельно:

Математические функции и константы

Математических функций Arduino поддерживает очень много, малая часть из них являются макро функциями, идущими в комплекте с Arduino.h, все остальные же наследуются из мощной C++ библиотеки math.h

Математические функции из math.h

Размеры типов данных

КонстантаЗначение
UINT8_MAX255
INT8_MAX127
UINT16_MAX65535
INT16_MAX32767
UINT32_MAX4294967295
INT32_MAX2147483647
ФункцияЗначение
min(a, b)Возвращает меньшее из чисел a и b
max(a, b)Возвращает большее из чисел
abs(x)Модуль числа
constrain(val, low, high)Ограничить диапазон числа val между low и high
map(val, min, max, outMin, outMax)Перевести диапазон числа val (от min до max) в новый диапазон (от outMin до outMax). val = map(analogRead(0), 0, 1023, 0, 100); – получить с аналогового входа значения 0-100 вместо 0-1023. Работает только с целыми числами!
round(x)Математическое округление
radians(deg)Перевод градусов в радианы
degrees(rad)Перевод радиан в градусы
sq(x)Квадрат числа

Математические константы

КонстантаЗначениеОписание
INT8_MAX127Максимальное значение для char, int8_t
UINT8_MAX255Максимальное значение для byte, uint8_t
INT16_MAX32767Максимальное значение для int, int16_t
UINT16_MAX65535Максимальное значение для unsigned int, uint16_t
INT32_MAX2147483647Максимальное значение для long, int32_t
UINT32_MAX4294967295Максимальное значение для unsigned long, uint32_t
M_E2.718281828Число e
M_LOG2E1.442695041log_2 e
M_LOG10E0.434294482log_10 e
M_LN20.693147181log_e 2
M_LN102.302585093log_e 10
M_PI3.141592654pi
M_PI_21.570796327pi/2
M_PI_40.785398163pi/4
M_1_PI0.3183098861/pi
M_2_PI0.6366197722/pi
M_2_SQRTPI1.1283791672/корень(pi)
M_SQRT21.414213562корень(2)
M_SQRT1_20.7071067811/корень(2)
NAN__builtin_nan(“”)nan
INFINITY__builtin_inf()infinity
PI3.141592654Пи
HALF_PI1.570796326пол Пи
TWO_PI6.283185307два Пи
EULER2.718281828Число Эйлера е
DEG_TO_RAD0.01745329Константа перевода град в рад
RAD_TO_DEG57.2957786Константа перевода рад в град

Псевдослучайные числа

Биты и байты

Битовые операции – подробнее читай в отдельном уроке.

Ввод-вывод

Цифровые пины

Устанавливает режим работы пина pin (ATmega 328: D0-D13, A0-A5) на режим mode:

Читает состояние пина pin и возвращает :

Подаёт на пин pin сигнал value:

Запускает генерацию ШИМ сигнала (отдельный урок про ШИМ) на пине pin со значением value. Для стандартного 8-ми битного режима это значение 0-255, соответствует скважности 0-100%. Подробнее о смене частоты и разрядности ШИМ смотрите в этом уроке. ШИМ пины:

Аналоговые пины

Читает и возвращает оцифрованное напряжение с пина pin. АЦП на большинстве плат Arduino имеет разрядность 10 бит, так что возвращаемое значение 0 – 1023 при напряжении 0 – опорное на пине. Урок про аналоговые пины.

Устанавливает режим работы АЦП согласно mode:

Как это влияет на работу? Значение 1023 функции analogRead() будет соответствовать опорному напряжению или выше его, соответственно поставив INTERNAL можно измерять напряжение от 0 до 1.1V с точностью (1.1 / 1023

1.2 мВ), напряжение выше 1.1V будет всегда 1023. После изменения источника опорного напряжения (вызова analogReference) первые несколько измерений могут быть нестабильными.

Нельзя использовать напряжение меньше 0V или выше 5V в качестве внешнего опорного в пин AREF. Также при использовании режима EXTERNAL нужно вызвать analogReference(EXTERNAL) до вызова функции analogRead(), иначе можно повредить микроконтроллер. Также можно подключить опорное в пин AREF через резистор на

5 кОм, но так как вход AREF имеет собственное сопротивление в 32 кОм, реальное опорное будет например 2.5 * 32 / (32 + 5) =

Аппаратные прерывания

Подключить прерывание (читай урок про прерывания) на номер прерывания pin, назначить функцию ISR как обработчик и установить режим прерывания mode:

Источник

Видео

Программирование Ардуино с нуля. Arduino для начинающих.

Программирование Ардуино с нуля.  Arduino для начинающих.

XOD — графический язык программирования Arduino. Обзор языка и среды разработки

XOD — графический язык программирования Arduino. Обзор языка и среды разработки

Уроки Arduino для начинающих, #2.1, Основы языка C

Уроки Arduino для начинающих, #2.1, Основы языка C

Уроки Arduino #1 - структура программы и типы данных

Уроки Arduino #1 - структура программы и типы данных

Ардуино уроки программирование для начинающих с 9 лет [с нуля] #ДомаВместе

Ардуино уроки программирование для начинающих с 9 лет [с нуля] #ДомаВместе

Цикл уроков по программированию на C++ для Arduino. Часть 1.

Цикл уроков по программированию на C++ для Arduino. Часть 1.

Программирование Ардуино с нуля. Типы данных, переменные, константы, массивы.

Программирование Ардуино с нуля. Типы данных, переменные, константы, массивы.

XOD — графический язык программирования для Arduino

XOD — графический язык программирования для Arduino

ArduBlock - Ардуино без программирования

ArduBlock  - Ардуино без программирования

Способ 1 | Программируем ARDUINO на языке PYTHON | Arduino + Python | #Arduino #Python

Способ 1 | Программируем ARDUINO на языке PYTHON | Arduino + Python | #Arduino #Python
Поделиться или сохранить к себе:
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных, принимаю Политику конфиденциальности и условия Пользовательского соглашения.