Arduino. Команды. На русском, краткий обзор языка.
Краткий Справочник по языку Arduino Quick Command Reference Guide.
Перевод встроенной справки Arduino IDE (на русском) v1.8.13, для Windows (7) ...
...
... может иметь отличия и исправления по сравнению с устаревшей версией перевода справочных материалов ... Пользовательский перевод был сделан с целью ознакомления с возможностями языка программирования Arduino, так как (на момент перевода на русский, 2021) - фактически были доступны English, Deutsch и Portugues (Brasil) language онлайн версии руководства ...
Примечание : автор перевода (не владея языком программирования) позволил себе включить в текст справки некоторые уточняющие дополнения, повышаемые читабельность и восприятие обучающего материала ... Профессиональные программисты, составляющие справку - уже имеют замыленный глаз, представляя некоторые вещи, как : само собой разумеющееся, что у неподготовленного читателя может вызвать недоумение и разрыв в последовательности изложения и применяемости справочной документации ... На самом деле - я не могу назвать точную причину (простота языка Arduino или стиль изложения справки авторами), но они, реально - весьма доходчиво излагают суть применения операторов, команд и функций языка, уточняя и дополняя изложение - секретами уникального мастерства программирования (такой легкости восприятия, в подобной литературе - мне не доводилось встречать ранее) ... Скорее всего - потому, что будучи основанным на C / C++ по структуре (синтаксису), язык программирования Arduino - сильно похож на обычный JavaScript ...
Программы Arduino можно разделить на три основные части:
- структура ...
- значения (переменные и константы) ...
- функции ...
Итак ... Изложение материала, в руководстве - идет на стыке трех областей знаний : программирование (операторы, команды и функции) ; схемотехника (аппаратная реализация чипов и плат) и электроника (свойство и поведение электрических сигналов тока при взаимодействии с радио / электронными компонентами) ... Одно - взаимосвязано или значительно интегрировано в другое, поэтому иногда удобно рассматривать частные случаи - представляя картину взаимодействия - в целом ... Однако, некоторые сложные моменты - упоминаются вскользь и требуют более углубленного индивидуального изучения ...
Обзор раскрывает возможности языка программирования Arduino, но для примитивных скетч программ (и особенно : мигания встроенным светодиодом) - достаточно знания всего нескольких операторов и функций ))) ... Хотя, за внешней простотой - скрывается мощнейшее средство управления, ограниченное только разрядностью и объемом внутренней памяти микропроцессора, а также - уровнем знаний, навыков и подготовки программиста ... Как (скромно) заявляют разработчики : максимальная скорость опроса датчика - не может превышать 10000 раз в секунду (!!!) ... Вдумайтесь и сравните с обычным цифровым мультиметром, который делает измерения 1 раз в секунду ...
Со своей стороны, я постарался - еще более сократить и упростить руководство, чтобы превратить его в увлекательный рассказ : как устроен и работает Arduino, взгляд - изнутри ... По окончании беглого чтения (за короткое время до 95 минут) - вы уже можете считать себя начинающим программистом, с большими возможностями в будущем ... Arduino - это один из самых быстрых практических курсов изучения прикладного языка программирования микроконтроллеров, для использования в радиолюбительских самоделках, робототехнике, RC игрушках и вплоть до космического применения ...
Structure - Структура.
Sketch - скетч ... Текстовый программный исходный код, подобно обычному тексту в блокноте ... Исходный код будет скомпилирован в исполняемый код, загружаемый в микроконтроллер Arduino ...
Как и в языке JavaScript - большинство строк кода в Arduino - заканчиваются точкой с запятой ; ... Возможно это помогает компилятору правильно воспринимать отдельные участки кода и в случае пропуска ; - может повлечь ошибки интерпретации, вычисления или другие неустановленные сбои ... В скобках (условие сравнения) - точка с запятой обычно не применяется, а в коде { действие ; } - обычно : для завершения каждой строки ...
setup () - Функция вызывается при запуске скетча : для инициализации переменных, режимов вывода, начала использования библиотек и т. д. Функция настройки запускается только один раз, после каждого включения или сброса (reset) платы Arduino.
loop () - Функция построчного выполнения основного программного кода скетча в цикле, позволяя программе изменяться и реагировать ... Применяется для активного управления платой Arduino, ее взаимодействием с внешними датчиками, приводами и изменением поведения, согласно ответной реакции, заложенной в коде программы ...
Control Structures - Структуры управления.
if - (условие) и ==,! =, <,> (операторы сравнения) ... if (сравнение / выражение) {do, действие ; } ... проверяет, было ли достигнуто заданное условие ... Истина - программа выполняет определенное действие (операторы внутри скобок) ... Ложь - код пропускается. Если скобки { } опущены - следующая строка (обозначенная точкой с запятой) станет единственным условным оператором. Остерегаться применения знака = (присваивание) вместо == (сравнение) во избежание нежелательного результата вычислений и работы программы ...
if ... else - оператор else расширяет базовый оператор if, позволяя более одного действия реакции на условие сравнения ( или / или ), а также указывая дополнительное условие сравнения else if ...
for - (переменная ; условие ; шаг приращения) {цикл} ... Инициализация переменной происходит первой и однократно ... Каждый раз при прохождении цикла проверяется условие ... Истина - блок операторов и приращение выполняются, и условие проверяется снова ... Ложь - цикл заканчивается ... Счетчик приращения обычно используется для изменения шага, направления и окончания выполнения цикла по условию ... Цикл for в C намного более гибок, чем циклы for в некоторых других компьютерных языках, включая BASIC. Любой или все из трех элементов заголовка могут быть опущены, хотя точки с запятой являются обязательными. Также операторы для инициализации, условия и приращения могут быть любыми действительными операторами C с несвязанными переменными и использовать любые типы данных C, включая числа с плавающей запятой. Эти необычные операторы for могут помочь решить некоторые редкие проблемы программирования.
switch case ... switch (var) {case : do; break; default : do; break;} ... Оператор выбора действия ... Подобно операторам if - этот оператор управляет потоком программ, позволяя программистам указывать другой код, который должен выполняться в различных условиях. Переменная VAR сравнивается со значениями case ... Истина - код выполняется ... Без ключевого слова break (прервать и выйти) - продолжится проверка остальных case до окончания всего кода switch ...
while (выражение) { do, действие} ... Цикл петля ... Будет повторяться непрерывно и бесконечно, пока выражение внутри скобок () - не станет ложным. Что-то должно изменить проверяемую переменную, иначе цикл while никогда не завершится. Это может быть изменение значения переменной или внешнее условие (например, сигнал датчика) ...
do ... while ...do {действие} while (сравнение); ... Цикл do работает так же, как цикл while ... за исключением того, что условие проверяется в конце цикла ... поэтому цикл do - всегда запускается всегда, хотя бы один раз ...
break - прерывание ... используется для принудительного выхода из цикла do, for, while, а также из оператора выбора действия - switch ... Выходит на выполнение следующей, за циклом, строки / команды (в отличие от оператора goto, который может сразу перейти, как в начало или конец программы, так и в любое другое, указанное меткой, место) ...
continue ... for (сравнение) { if (сравнение) { continue ; } } ... Оператор пропускает оставшуюся часть текущей итерации цикла (do, for или while). Он продолжается, проверяя условное выражение цикла и продолжая любые последующие итерации.
return ... FuncCheck () { if (a>b) { return a; } else { return b; } } ... Завершить функцию и вернуть ее значение в вызывающую функцию ... Ключевое слово return удобно для тестирования раздела кода без необходимости комментирования больших участков кода, содержащих ошибки ...
goto ... goto метка; ... метка: с двоеточием на конце ... Переход / прыжок в отмеченную точку в программе ... Переводит указатель следующего шага / действия программы в метку перехода / назначение ... Использование goto не рекомендуется в программировании на многих языках и считается, что этот оператор - не является необходимым, но при разумном использовании он может упростить определенные программы. Причина, по которой многие программисты не одобряют использование goto, заключается в том, что при неограниченном использовании операторов goto - легко создать программу с неопределенным потоком программы, которую невозможно отладить. ... С учетом сказанного, есть случаи, когда оператор goto - может пригодиться и упростить кодирование. Одна из таких ситуаций - выход из глубоко вложенных циклов for или логических блоков при определенном условии.
Further Syntax - Дальнейший синтаксис.
; (semicolon) ... Точка с запятой ... Используется в конце строки выражения ... Если вы забудете закончить строку точкой с запятой, это приведет к ошибке компилятора ...
{} (curly braces) ... Фигурные скобки - являются основной частью языка программирования C. Они используются в нескольких различных конструкциях, описанных ниже, и иногда это может сбивать с толку новичков. Скобки - парный элемент (открывающая / закрывающая) ... Начинающие программисты и программисты, пришедшие к C с языка BASIC, часто находят использование фигурных скобок запутанным или пугающим. В конце концов, одни и те же фигурные скобки заменяют оператор RETURN в подпрограмме (функции), оператор ENDIF в условном выражении и оператор NEXT в цикле FOR ... Поскольку фигурные скобки используются очень разнообразно ... рекомендуется вводить закрывающую - сразу после ввода открывающей скобки (при вставке конструкции функции кода, требующей фигурных скобок) - это позволит никогда не выйти из равновесия ... Несбалансированные фигурные скобки приведут к ошибке компилятора ...
// (single line comment) ... Однострочный краткий комментарий - для информирования себя или других о том, как работает программа. Они игнорируются компилятором и не экспортируются в процессор, поэтому они не занимают места на микросхеме Atmega. Комментарии предназначены только для того, чтобы помочь вам понять (или запомнить), как работает ваша программа, или проинформировать об этом - других ... Комментирование частей кода программы - это удобный способ удалить строки, которые могут содержать ошибки, компилятор просто игнорирует их. Это может быть особенно полезно при попытке найти проблему или когда программа отказывается компилироваться, а ошибка компилятора - является загадочной или бесполезной.
/* */ (multi-line comment) ... Требуются парные ограничители ... Многострочный комментарий - используйте его, чтобы закомментировать целые блоки кода ... Однострочный комментарий можно использовать внутри многострочного ... Вложение одного в другой многострочный комментарий - недопустимо ...
#define ... # является обязательным ... точка с запятой не ставится (точно, так же, как и знак = равенства) - это приведет к ошибкам компилятора ... Определитель констант ... м-м-м ... Назначатель, привязчик определения ... Полезный компонент C, который позволяет программисту давать имя постоянному значению перед компиляцией программы. Определенные константы в Arduino не занимают места в памяти программ на чипе. Компилятор заменит ссылки на эти константы определенным значением во время компиляции. Однако, это - может иметь некоторые нежелательные побочные эффекты, если, например, имя константы, которое было # определено, включено в какое-то другое имя константы или переменной. В этом случае текст будет заменен # определенным числом (или текстом). Как правило, ключевое слово const - предпочтительнее для определения констант, и его следует использовать вместо #define ...
#include ... # является обязательным ... точка с запятой не ставится (точно, так же, как и знак = равенства) - это приведет к ошибкам компилятора ... Включение, подключение - используется для включения внешних библиотек в ваш скетч. Это дает программисту доступ к большой группе стандартных библиотек C (группы готовых функций), а также к библиотекам, написанным специально для Arduino. Основная справочная страница для библиотек AVR C (AVR - это ссылка на чипы Atmel, на которых основана Arduino) ...
Arithmetic Operators - Арифметические операторы.
= (assignment operator) ... оператор присваивания (одинарный знак равенства) ... Сохраняет значение справа от знака равенства - в переменной слева ... var a=b; ... Если тип переменной недостаточно велик для хранения значения - значение, хранящееся в переменной - будет неверным ... Не путайте оператор присваивания [=] с оператором сравнения [==] ...
+ (addition) ... Сложение ... - (subtraction) ... Вычитание ... * (multiplication) ... Умножение ... / (division) ... Деление ...
Сложение, вычитание, умножение и деление ... Эти операторы возвращают сумму, разность, произведение или частное (соответственно) двух операндов ... Результат операции - соответствует типу применяемых данных, например при делении целых - никогда не получится дробного значения (результат, после точки - будет просто отброшен, даже - не округлен) ... Неправильный выбор типа данных - может привести к переполнению и ошибке ... Если операнды разных типов - для вычисления используется больший тип ... Если операнды с плавающей запятой - результат будет такой же, с десятичными ... При переполнении операнды могут перевернуться через 0 ... 0 - 1 = -32768 ... Недостатки математики с плавающей запятой : большой размер, медленные скорости вычислений ... Конвертируйте переменные из одного типа данных - в другой, на лету ...
% (modulo) ... Вычисление по модулю ... Оператор по модулю не работает с числами с плавающей запятой ... Вычисляет остаток от деления одного целого числа на другое. Это полезно для сохранения переменной в определенном диапазоне (например, размер массива).
Comparison Operators - Операторы сравнения.
== (equal to) ... равно ...
!= (not equal to) ... не равно ...
< (less than) ... меньше ...
> (greater than) ... больше ...
<= (less than or equal to) ... меньше или равно ...
>= (greater than or equal to) ... больше или равно ...
... Операторы сравнения, в основном - работают с IF, но могут применяться в любом допустимом контексте ... Главное, что нужно запомнить, это - порядок написания знаков, то есть : как говорится (больше или равно) - так и пишется >= ... Написание => - приведет к ошибке синтаксиса или более худшим последствиям ...
Boolean Operators - Логические операторы ... Булева алгебра.
Истина, True = 1 ... Ложь, False = 0 ...
&& (and) ... if (x > 0 && y > 0) { True; } ... И ... Конъюнкция, союз, логическое умножение двух или более операторов ... А*В = Истина, только тогда, когда и А и В - Истина ; иначе - Ложь ... Побитовое сравнение выполняется попарно для обоих операторов ...
|| (or) ... if (x > 0 || y > 0) { True; } ... ИЛИ ... Дизъюнкция (разобщение), логическое сложение ... A+B = Истина, только тогда, когда или А, или В, или оба сразу (и А, и В) - Истина, иначе - Ложь ...
! (not) ... if (!x) { True; } ... НЕ ... Отрицание (инверсия, переворот), логическая противоположность ... А - Истина, только тогда, когда В - Ложь, и - наоборот ...
Предупреждение : Убедитесь, что вы не перепутали логический оператор && с & - побитовым оператором ... Это совершенно разные звери. Точно так же, как и логические || с побитовым оператором |, или ! (восклицательный знак) и ~ (тильда) - вы должны быть уверены, что и где вы хотите получить в результате ...
Pointer Access Operators - Операторы доступа к указателям.
* dereference operator ... разыменование ...
& reference operator ... ссылка ...
... Указатели - один из самых сложных предметов для новичков в изучении C, и можно написать подавляющее большинство скетчев Arduino, даже не сталкиваясь с указателями. Однако для управления определенными структурами данных использование указателей может упростить код, а знания об управлении указателями удобно иметь в своем наборе инструментов.
Bitwise Operators - Побитные операторы.
& (bitwise and) ... Поразрядное И ...
| (bitwise or) ... Поразрядное ИЛИ
^ (bitwise xor) ... Побитовое Исключающее ИЛИ ... По сравнению с ИЛИ (x > 0 || y > 0) - Исключающее ИЛИ ... Истинно только когда X противоположно Y, в противном случае - Ложь (упрощенно ; с тремя и более операторами - все намного сложнее) ...
~ (bitwise not) ... Побитовое НЕ ...
<< (bitshift left) ... Побитный сдвиг влево ...
>> (bitshift right) ... Побитный сдвиг вправо ... Эти операторы заставляют биты в левом операнде сдвигаться влево или вправо на количество позиций, заданное правым операндом ... При сдвиге влево - крайние левые биты - теряются (буквально исчезают) ... При сдвиге вправо и если старший бит = 1 - поведение зависит от точного типа данных ... Если тип int, старший бит является битом знака числа ... и знаковый бит копируется в младшие биты по эзотерическим историческим причинам ... Такое поведение, называемое расширением знака, часто не является тем поведением, которое вам нужно ... Оказывается, правила сдвига вправо отличаются для выражений типа unsigned int, поэтому вы можете использовать приведение типов, чтобы подавить те, которые копируются слева ...
... Поразрядные операторы выполняют свои вычисления на битовом уровне переменных. Они помогают решать широкий круг общих проблем программирования. Большая часть приведенного ниже материала взята из отличного руководства по побитовой математике ...
... Обычная задача для побитовых операторов AND и OR - это то, что программисты называют чтением - изменением - записью в порту. На микроконтроллерах порт - это 8-битное число, которое представляет собой некоторую информацию о состоянии контактов. Запись в порт контролирует сразу все контакты. PORTD - это встроенная константа, которая относится к выходным состояниям цифровых выводов 0,1,2,3,4,5,6,7. Если в позиции бита стоит 1, то этот вывод HIGH (высокое значение, логическая единица) ... Выводы уже должны быть установлены на выходы с помощью команды pinMode () ... Итак, если мы напишем PORTD = B00110001; мы сделали пины / контакты 0,4 и 5 - HIGH ... Одна небольшая загвоздка заключается в том, что мы также могли изменить состояние контактов 0 и 1, которые используются Arduino для последовательной связи, поэтому мы могли вмешаться в последовательную связь ... Наш алгоритм для программы : Получите PORTD и очистите только биты, соответствующие контактам, которые мы хотим контролировать (с помощью побитового И) ... Объедините измененное значение PORTD с новым значением для контролируемых выводов (с двойным ИЛИ) ...
Compound Operators - Составные операторы.
++ (increment) ... Увеличение ... x++; // увеличиваем x на единицу и возвращает старое значение x ... ++x; // увеличивает x на единицу и возвращает новое значение x ...
-- (decrement) ... Уменьшение ... x--; // уменьшает x на единицу и возвращает старое значение x /// --x; // уменьшает x на единицу и возвращает новое значение x ...
+= (compound addition) ... сложное сложение ... x+=y эквивалентно x=x + y ...
-= (compound subtraction) ... сложное вычитание ... x-=y эквивалентно x=x - y ...
*= (compound multiplication) ... сложное умножение ... x*=y эквивалентно x=x * y ...
/= (compound division) ... составное деление ... x/=y эквивалентно x=x / y ...
%= (compound modulo) ... составной по модулю ... x%=y эквивалентно x=x % y ...
&= (compound bitwise and) ... составное побитовое И ... Составной побитовый оператор AND часто используется с переменной и константой, чтобы перевести определенные биты в переменную в LOW состояние (до 0). В руководствах по программированию это часто называется - очисткой или сбросом битов ... x : переменная типа char, int или long ... y : целочисленная константа или char, int или long ... Примечание: поскольку мы имеем дело с битами в побитовом операторе, удобно использовать двоичный форматтер с константами. В других представлениях числа по-прежнему имеют то же значение, их просто не так легко понять. Ноль в любом числовом формате - это ноль ... Следовательно - чтобы очистить (установить в ноль) биты 0 и 1 переменной, оставив остальную часть переменной неизменной, используйте составной побитовый оператор с константой ...
|= (compound bitwise or) ...составное побитовое ИЛИ ... Составной побитовый оператор ИЛИ - используется с переменной и константой, чтобы установить в 1 определенные биты в переменной ... x : переменная типа char, int или long ... y : целочисленная константа или char, int или long ...
Variables - Переменные.
Constants - Константы.
Константы - это предопределенные выражения на языке Arduino. Они используются для облегчения чтения программ. Константы классифицируются по группам ...
HIGH | LOW ... Определение уровней контактов : ВЫСОКИЙ и НИЗКИЙ ... При чтении или записи на цифровой вывод есть только два возможных значения, которые может принимать / быть установленными на вывод : HIGH и LOW ... Значение контакта порта - выставляется с помощью двух функций, вызываемых последовательно : сконфигурировать - pinMode () ; выставить уровень - digitalWrite () ...
HIGH INPUT ... Это включит внутренние подтягивающие резисторы 20 кОм, которые подтянут входной вывод до HIGH значения, если внешняя схема не подтянет его к LOW. Вот как работает INPUT_PULLUP, что более подробно описано ниже ... HIGH будет, при ... Напряжение больше 3 вольт (платы 5В) ... Напряжение больше 2 вольт (платы 3,3 В) ...
HIGH OUTPUT ... В этом состоянии выход (контакт) может подавать ток (выдавать напряжение), например зажечь светодиод, подключенный через резистор к земле.
LOW INPUT ... LOW будет, при ... Напряжение менее 3 Вольт (платы с питанием 5В) ... Напряжение менее 2 Вольт (платы с питанием 3,3 В) ...
LOW OUTPUT ... Вывод находится на 0 В (как на платах 5 В, так и на 3,3 В). В этом состоянии он может потреблять ток (замыкать на массу), например зажечь светодиод, подключенный через последовательный резистор к +5 В (или +3,3 В).
INPUT | OUTPUT | INPUT_PULLUP ... Определение режимов цифровых выводов ... Цифровые выводы могут использоваться, как INPUT, INPUT_PULLUP или OUTPUT. Изменение вывода с помощью pinMode () изменяет электрическое поведение вывода.
INPUT - ВХОД ... Контакты Arduino (Atmega) считаются находящимися в состоянии высокого импеданса. Выводы, сконфигурированные как INPUT, предъявляют чрезвычайно низкие требования к цепи, которую они выбирают, что эквивалентно последовательному резистору 100 МОм перед выводом. Это делает их полезными для считывания показаний датчика ... Если ваш вывод настроен как ВХОД, и вы читаете переключатель, когда переключатель находится в разомкнутом состоянии, входной вывод будет - плавающим, что приведет к непредсказуемым результатам ... Чтобы обеспечить правильные показания при разомкнутом переключателе, необходимо использовать подтягивающий или понижающий резистор ... Назначение этого резистора - перевести пин в известное состояние, когда переключатель разомкнут ... Обычно выбирается резистор 10 кОм, поскольку это достаточно низкое значение, чтобы надежно предотвратить плавающий вход, и в то же время достаточно высокое значение, чтобы не потреблять слишком большой ток при замкнутом переключателе. Для получения доп информации см. Руководство по цифровому считыванию последовательного порта.
Если используется понижающий резистор, входной вывод будет НИЗКИМ, когда переключатель разомкнут, и ВЫСОКИМ, когда переключатель замкнут.
Если используется подтягивающий резистор, входной вывод будет ВЫСОКИМ, когда переключатель разомкнут, и НИЗКИМ, когда переключатель замкнут.
INPUT_PULLUP ... Вход с подтяжкой ... Микроконтроллер Atmega на Arduino имеет внутренние подтягивающие резисторы (сопротивления, которые подключаются к источнику питания - изнутри), к которым вы можете получить доступ. Если вы предпочитаете использовать их вместо внешних подтягивающих резисторов, вы можете использовать аргумент INPUT_PULLUP в pinMode () ...
Контакты, сконфигурированные как входы с INPUT или INPUT_PULLUP, могут быть повреждены или разрушены, если они подключены к напряжениям ниже земли (отрицательное напряжение) или выше положительной шины питания (5 В или 3 В).
OUTPUT - ВЫХОД ... Контакты Arduino (Atmega) считаются находящимися в состоянии низкого импеданса. Это означает, что они могут обеспечивать значительный ток для других цепей. Контакты Atmega могут подавать (обеспечивать ток) или принимать (поглощать ток) до 40 мА (миллиампер) тока в другие устройства / цепи. Это делает их полезными для питания светодиодов, поскольку светодиоды обычно используют менее 40 мА. Нагрузки более 40 мА (например, двигатели) потребуют транзистора или другой схемы интерфейса ... Контакты, сконфигурированные как выходы, могут быть повреждены или разрушены, если они подключены либо к заземлению, либо к положительной силовой шине ...
LED_BUILTIN ... Светодиод встроенный ... Большинство плат Arduino имеют контакт, подключенный к встроенному светодиоду последовательно с резистором. Константа LED_BUILTIN - это номер вывода, к которому подключен встроенный светодиод. На большинстве плат этот светодиод подключен к цифровому выводу 13.
true | false ... Определение логических уровней : истина и ложь (логические константы) ... На языке Arduino для обозначения истины и лжи используются две константы ... false определить легче из двух ... false определяется как 0 (ноль) ... Часто говорят, что истина определяется как 1, что верно, но истина имеет более широкое определение ... Любое целое число, которое не равно нулю, истинно в логическом смысле ... Таким образом, -1, 2 и -200 также определены как истинные в логическом смысле ... Обратите внимание, что константы true и false набираются в нижнем регистре, в отличие от HIGH, LOW, INPUT и OUTPUT.
integer constants ... Целочисленные константы - это числа, используемые непосредственно в скетче, например 123. По умолчанию эти числа обрабатываются как int, но вы можете изменить это с помощью модификаторов U и L (см. Ниже) ... Обычно целочисленные константы обрабатываются как целые числа с основанием 10 (десятичные), но для ввода чисел с другими основаниями могут использоваться специальные обозначения (средства форматирования) ... Десятичный - по умолчанию, без дополнительных указаний ... Двоичный (бинарный) - B, работает только с 8-битными значениями (от 0 до 255), действительны символы 0 - 1 ... Восьмеричное, начиная с 0, допустимы символы 0 - 7 ... Шестнадцатеричный, начиная с 0x, допустимы 0 - 9, A - F, a - f ...
Десятичное число - это основание 10. Это математика здравого смысла, с которой вы знакомы. Предполагается, что константы без других префиксов имеют десятичный формат ... Двоичный - это основание два. Допустимы только символы 0 и 1 ... Модуль форматирования двоичных файлов работает только с байтами (8 бит) от 0 (B0) до 255 (B11111111) ... Если удобно ввести int (16 бит) в двоичной форме, вы можете сделать это двухэтапной процедурой : младший байт * 256 + старший байт ... Предупреждение ... Можно создать трудно обнаруживаемую ошибку (непреднамеренно) включив начальный ноль перед константой и заставив компилятор непреднамеренно интерпретировать вашу константу как восьмеричную ... Шестнадцатеричные значения с префиксом 0x от 0 - F (0 - 15) ...
Устройства форматирования U и L ... По умолчанию целочисленная константа обрабатывается как int с сопутствующими ограничениями в значениях. Чтобы указать целочисленную константу с другим типом данных, после нее введите ... u / U, чтобы преобразовать константу в беззнаковый формат данных ... l / L, чтобы преобразовать константу в длинный формат данных ... ul / UL, чтобы преобразовать константу в длинную константу без знака ...
floating point constants - константы с плавающей запятой ... Подобно целочисленным константам, константы с плавающей запятой используются для облегчения чтения кода. Константы с плавающей запятой меняются местами во время компиляции на значение, которое вычисляется выражением ... Константы с плавающей запятой также могут быть выражены в различных научных обозначениях ... E / e - принимаются как действительные индикаторы экспоненты ... 10,0 = 10 ... 2.34E5 = 2.34 * 10 ^ 5 = 234000 ... 67e-12 = 67,0 * 10 ^ -12 = 0.000000000067 ...
Data Types - Типы данных.
void - пустота ... Ключевое слово void используется только в объявлениях функций. Это указывает на то, что функция не должна возвращать никакой информации функции, из которой она была вызвана ... void setup () ... void loop () ...
boolean - логический ... Логическое значение содержит одно из двух значений: истина или ложь. (Каждая логическая переменная занимает один байт памяти.) Например, можно задать логическое значение running=false; чтобы затем изменить его running=!running на true (наоборот) ...
char - символ ... Тип данных, занимающий 1 байт памяти, в котором хранится символьное значение. Символьные литералы записываются в одинарные кавычки ... Для нескольких символов или строк - используйте двойные кавычки ... Однако символы сохраняются как числа. Вы можете увидеть конкретную кодировку буквы в цифру - в таблице ASCII. Это означает, что можно выполнять арифметические операции с символами, в которых используется значение ASCII символа (A + 1 = 66, поскольку A = 65) ... См. Serial.println о том, как символы преобразуются в числа ... Тип данных char является типом со знаком, что означает, что он кодирует числа от -128 до 127. Для однобайтового (8-битного) типа данных без знака используйте байтовый тип данных ...
unsigned char - беззнаковый символ ... Беззнаковый тип данных, занимающий 1 байт памяти. То же, что и байтовый тип данных ... Тип данных unsigned char кодирует числа от 0 до 255 ... Для единообразия стиля программирования Arduino следует отдавать предпочтение байтовому типу данных ...
byte - байт ... Байт хранит 8-битное беззнаковое число от 0 до 255.
int ... Целые числа - это ваш основной тип данных для хранения чисел ... На Arduino Uno (и других платах на базе ATMega) - int хранит 16-битное (2-байтовое) значение. Это дает диапазон от -32768 до 32767 В Arduino Due int хранит 32-битное (4-байтовое) значение от -2147483648 до 2147483647 ... int хранит отрицательные числа с помощью метода, называемого математикой дополнения до 2. Самый старший бит, иногда называемый битом знака - отмечает число как отрицательное число. Остальные биты инвертируются и добавляется 1 ... Arduino позаботится о работе с отрицательными числами за вас, чтобы арифметические операции работали прозрачно и ожидаемым образом ... Однако при работе с оператором сдвига вправо (>>) могут возникнуть неожиданные сложности ... Совет по кодированию ... Когда переменные превышают свою максимальную емкость, они возвращаются к своей минимальной емкости, обратите внимание, что это происходит в обоих направлениях, то есть - переворачиваются
unsigned int - беззнаковое целое ... На Uno и других платах на базе ATMEGA целые числа без знака - такие же, как целые числа, поскольку они хранят 2-байтовое значение. Однако вместо хранения отрицательных чисел они хранят только положительные значения, что дает полезный диапазон от 0 до 65535 ... Due хранит 4-байтовое (32-битное) значение в диапазоне от 0 до 4294967295 ... Разница между целыми числами без знака и (знаковыми) целыми числами заключается в том, как интерпретируется самый старший бит, иногда называемый битом знака ... В типе Arduino int (со знаком), если старший бит равен = 1, то число интерпретируется как отрицательное число, а остальные 15 бит интерпретируются с помощью математики дополнения до 2 ... Совет по кодированию ... Когда переменные превышают свою максимальную емкость, они - возвращаются / переворачиваются к своей минимальной емкости - и это происходит в обоих направлениях ...
word - слово ... На Uno и других платах на базе ATMEGA слово хранит 16-битное беззнаковое число ... В случае Due и Zero вместо этого хранится 32-битное число без знака ...
long - длинный ... Длинные переменные представляют собой переменные расширенного размера для хранения чисел и хранят 32 бита (4 байта), от -2147483648 до 2147483647 ... Если вы выполняете математику с целыми числами, по крайней мере, одно из чисел должно сопровождаться буквой L, поэтому оно должно быть длинным ...
unsigned long - беззнаковый длинный ... Беззнаковые длинные переменные представляют собой переменные расширенного размера для хранения чисел и хранят 32 бита (4 байта). В отличие от стандартных long беззнаковые long не хранят отрицательные числа, делая их диапазон от 0 до 4294967295 ...
short - короткая ... Short - это 16-битный тип данных ... На всех Arduinos (на базе ATMega и ARM) шорт хранит 16-битное (2-байтовое) значение ... Это дает диапазон от -32768 до 32767 ...
float ... Тип данных для чисел с плавающей запятой, число с десятичной запятой ... Числа с плавающей запятой часто используются для аппроксимации аналоговых и непрерывных значений, поскольку они имеют большее разрешение, чем целые числа ... Числа с плавающей запятой могут быть от 3,4028235E + 38 до -3,4028235E + 38 ... Они хранятся как 32 бита (4 байта) информации ... Точность чисел с плавающей запятой составляет всего 6-7 десятичных знаков ... Это означает - общее количество цифр, а не число справа от десятичной точки ... В отличие от других платформ, где вы можете получить большую точность, используя двойное значение (например, до 15 цифр), на Arduino двойное значение имеет тот же размер, что и float ... Числа с плавающей запятой неточны и могут давать странные результаты при сравнении. Например, 6.0 / 3.0 может не равняться 2.0. Вместо этого вы должны проверить, что абсолютное значение разницы между числами меньше некоторого небольшого числа ... Математика с плавающей запятой также намного медленнее, чем целочисленная математика при выполнении вычислений, поэтому ее следует избегать, если, например, цикл должен выполняться на максимальной скорости для критической функции синхронизации ... Программисты часто идут на все, чтобы преобразовать вычисления с плавающей запятой в целочисленные, чтобы увеличить скорость ... Если вы выполняете математику с числами с плавающей запятой, вам нужно добавить десятичную точку, иначе тип данных переменной будет рассматриваться как int ... См. Подробности на странице констант с плавающей запятой ...
double ... Число двойной точности с плавающей запятой ... На Uno и других платах на базе ATMEGA это занимает 4 байта ... То есть реализация double точно такая же, как и float, без увеличения точности ... В Arduino Due двойники имеют 8-байтовую (64-битную) точность ... Подсказка ... Пользователи, которые заимствуют код из других источников, который включает двойные переменные, могут захотеть изучить код, чтобы увидеть, отличается ли предполагаемая точность от фактически достигнутой на Arduinos на базе ATMEGA ...
string - char array ... массив символов ... Текстовые строки могут быть представлены двумя способами. вы можете использовать тип данных String, который является частью ядра начиная с версии 0019, или вы можете создать строку из массива типа char и завершить ее нулем ... На этой странице описан последний метод ...Объект String дает больше функциональных возможностей за счет большего объема памяти ...
Возможности объявления строк ... Объявить массив символов без его инициализации ... Объявить массив символов (с одним дополнительным символом), и компилятор добавит требуемый нулевой символ ... Явно добавить нулевой символ ... Инициализировать строковую константу в кавычках; компилятор изменит размер массива так, чтобы он соответствовал строковой константе и завершающему нулевому символу ... Инициализировать массив с явным размером и строковой константой ... Инициализировать массив, оставив дополнительное место для строки большего размера ...
Нулевое прекращение ... Обычно строки заканчиваются нулевым символом (код ASCII 0) ... Это позволяет функциям (например, Serial.print ()) определять, где находится конец строки ... В противном случае они продолжили бы чтение последующих байтов памяти, которые на самом деле не являются частью строки ... Это означает, что в вашей строке должно быть место для одного символа больше, чем текст, который вы хотите, чтобы он содержал. Вот почему переменные должны состоять из восьми символов, хотя arduino - всего семь - последняя позиция автоматически заполняется нулевым символом или явно добавленным ... Обратите внимание, что возможна строка без последнего нулевого символа (если ошибочно указать длину переменной, как семь - вместо восьми) ... Это нарушит работу большинства функций, использующих строки, поэтому не следует делать это намеренно ... Однако если вы заметили, что что-то ведет себя странно (работает с символами не в строке) - это может быть проблемой ...
Одиночные кавычки или двойные кавычки? ... Строки всегда определяются в двойных кавычках, а символы всегда определяются в одинарных кавычках ... Обертывание длинных строк - можно обернуть длинные строки - в кавычках, как и каждая последующая - для массив [число элементов] с квадратными скобками (это мы еще не проходили) ...
Массивы строк ... При работе с большими объемами текста, например проектом с ЖК-дисплеем, часто бывает удобно настроить массив строк ... Поскольку сами строки являются массивами, это фактически пример двумерного массива ... Звездочка после типа данных char * - указывает, что это массив указателей ... Все имена массивов на самом деле являются указателями, поэтому это необходимо для создания массива массивов. Указатели - одна из наиболее эзотерических частей C для понимания новичками, но не обязательно разбираться в указателях в деталях, чтобы эффективно использовать их в примерах кода ...
String - object ... Класс String, являющийся частью ядра начиная с версии 0019, позволяет вам использовать и управлять строками текста более сложными способами, чем это делают массивы символов ... Вы можете объединять строки, добавлять к ним, искать и заменять подстроки и многое другое ... Он требует больше памяти, чем простой массив символов, но он также более полезен ... Для справки, символьные массивы называются строками с маленькой буквой s, а экземпляры класса String называются строками с большой буквы S ... Обратите внимание, что постоянные строки, указанные в двойных кавычках - обрабатываются как массивы символов, а не экземпляры класса String ...
Примеры объектов String ... Constructors - Конструкторы строк ... StringAdditionOperator - Оператор сложения строк ... StringIndexOf - Строковый индекс ... StringAppendOperator - Оператор добавления строки ... StringLengthTrim - Обрезка длины строки ... StringCaseChanges - Изменения в регистре строк ... StringReplace - Заменить строку ... StringRemove - Удалить строку ... StringCharacters - Строковые символы ... StringStartsWithEndsWith - Строка начинается с ... StringComparisonOperators - Операторы сравнения строк ... StringSubstring - Строковая подстрока ...
array ... Массив - это набор переменных, доступ к которым осуществляется по порядковому номеру ... Массивы на языке программирования C, на котором основана Arduino, могут быть сложными, но использование простых массивов относительно несложно ...
Создание (объявление) массива ... Все перечисленные методы являются допустимыми способами создания (объявления) массива ... int mymsv[5] ... int mymsv[] = {1, 2, 3} ... То же - комбинированное или с присвоением строки char mymsv[] = test ... Можно объявить массив без его инициализации, без явного выбора размера ... Компилятор создает массив - сам ... Обратите внимание, что при объявлении массива типа char для хранения требуемого нулевого символа требуется на один элемент больше, чем ваша инициализация, так как текст должен заканчиваться нулем ...
Доступ к массиву ... Массивы имеют нулевой индекс, то есть, в отношении инициализации массива выше, первый элемент массива имеет индекс 0, 2 - 1, 3 - 2 и так далее ... Недействительный индекс массива - может содержать случайную информацию (другой адрес памяти) ... По этой причине вы должны быть осторожны при доступе к массивам ... Доступ за конец массива (с использованием номера индекса, превышающего объявленный вами размер массива - минус 1 [так как - отсчет начинается с 0]) - это чтение из памяти, которая используется для других целей ... Чтение из этих мест, вероятно, мало что даст, за исключением получения неверных данных ... Запись в случайные ячейки памяти - определенно плохая идея и часто может привести к неприятным результатам, таким, как - ошибки или сбой в работе программы ... Эту ошибку, также - сложно отследить ... В отличие от BASIC или JAVA, компилятор C не проверяет, находится ли доступ к массиву в допустимых пределах объявленного вами размера массива ...
Массивы и циклы FOR ... Массивы часто обрабатываются внутри циклов for, где счетчик цикла используется в качестве индекса для каждого элемента массива ... Например, чтобы распечатать элементы массива через последовательный порт - это можно сделать в цикле ...
Conversion - Преобразование.
char () - Преобразует значение в символ текста ...
byte () ... Преобразует значение в 8-битное беззнаковое число от 0 до 255 ...
int () ... Преобразует значение в 16-битное (2-байтовое) число со знаком от -32768 до 32767 ...
word () ... Преобразует значение в 16-битное беззнаковое число 0 до 65535, функция word(x), значение любого типа ... Или создает слово из двух байтов, функция word(h,l), где h : старший (крайний левый) байт слова, l : младший (крайний правый) байт слова ...
long () ... Преобразует значение в 32 бита (4 байта), от -2147483648 до 2147483647 ...
float () ... Преобразует значение в тип данных с плавающей запятой ... -3,4028235E + 38 до 3,4028235E + 38 ... Помнить о точности и ограничениях чисел с плавающей запятой в Arduino ...
Variable Scope & Qualifiers - Переменная область действия и квалификаторы.
variable scope ... Переменная область ... Переменные в C и Arduino, имеют свойство, называемое областью действия ... Это отличается от ранних версий языков, таких как BASIC, где каждая переменная является глобальной переменной ... Глобальная переменная - это переменная, которую видит каждая функция в программе ... Локальные переменные видны только той функции, в которой они объявлены ... В среде Arduino любая переменная, объявленная вне функции (например, setup (), loop () и т.д.) - является глобальной переменной ... Когда программы начинают становиться больше и сложнее, локальные переменные - полезный способ гарантировать, что только одна функция имеет доступ к своим собственным переменным ... Это предотвращает ошибки программирования, когда одна функция непреднамеренно изменяет переменные, используемые другой функцией ... Также иногда бывает удобно объявить и инициализировать переменную внутри цикла for ... Это создает переменную, к которой можно получить доступ только внутри скобок цикла for ...
static ... Статический ... Ключевое слово static используется для создания переменных, которые видны только одной функции ... Однако в отличие от локальных переменных, которые создаются и уничтожаются каждый раз при вызове функции, статические переменные сохраняются за пределами вызова функции, сохраняя свои данные между вызовами функций ... Переменные, объявленные как статические, будут созданы и инициализированы только при первом вызове функции ...
volatile ... изменчиво ... Это ключевое слово, известное как квалификатор переменной, оно обычно используется перед типом данных переменной, чтобы изменить способ, которым компилятор и последующая программа обрабатывают переменную ... Объявление переменной volatile - это директива для компилятора ... Компилятор - это программное обеспечение, которое переводит ваш код C / C ++ в машинный код, который является настоящими инструкциями для чипа Atmega в Arduino ... В частности, он указывает компилятору загружать переменную из ОЗУ, а не из регистра хранения, который представляет собой временную ячейку памяти, в которой хранятся программные переменные и которыми ими управляют ... При определенных условиях значение переменной, хранящейся в регистрах, может быть неточным ... Переменная должна быть объявлена, изменчивой - всякий раз, когда ее значение может быть изменено чем-то, находящимся вне контроля раздела кода, в котором она появляется, например, одновременно выполняющимся потоком ... В Arduino единственное место, где это может произойти, - это участки кода, связанные с прерываниями, которые называются подпрограммой обслуживания прерываний ...
const ... ключевое слово ... Ключевое слово const означает константу ... Это квалификатор переменной, который изменяет поведение переменной, делая ее - доступной только для чтения ... Это означает, что переменную можно использовать так же, как любую другую переменную ее типа, но ее значение нельзя изменить ... Вы получите ошибку компилятора, если попытаетесь присвоить значение константной переменной ... Константы, определенные с помощью ключевого слова const, подчиняются правилам области видимости переменных, которые регулируют другие переменные ... Это, а также недостатки использования #define делают ключевое слово const лучшим методом для определения констант и предпочтительнее, чем использование #define ... Вы можете использовать const или #define для создания числовых или строковых констант ... Для массивов - нужно будет использовать const ... В общем, const предпочтительнее #define для определения констант ...
Utilities - Утилиты.
sizeof () ... размер ... Оператор sizeof возвращает количество байтов в типе переменной или количество байтов, занятых массивом ... Оператор sizeof полезен для работы с массивами (такими как строки), где удобно иметь возможность изменять размер массива, не нарушая другие части программы ... Для текста, правильно отформатированная строка - заканчивается символом NULL, который имеет значение ASCII 0 ...
PROGMEM ... Храните данные в программной флэш-памяти, вместо - SRAM ... Есть описание различных типов памяти, доступных на плате Arduino ... Ключевое слово PROGMEM - это модификатор переменной, его следует использовать только с типами данных, определенными в pgmspace.h ... Он сообщает компилятору - поместить эту информацию во флэш-память, а не в SRAM, куда она обычно помещается ... PROGMEM является частью библиотеки pgmspace.h, доступной только в архитектуре AVR ... Итак, сначала нужно включить библиотеку в скетч ... Поскольку PROGMEM является модификатором переменной - нет жесткого и быстрого правила о том, куда он должен идти, поэтому компилятор Arduino принимает все определения ниже, которые также являются синонимами ... Однако эксперименты показали, что в различных версиях Arduino (связанных с версией GCC) PROGMEM может работать в одном месте, а не в другом ... Более ранние версии IDE могут работать лучше, если PROGMEM включен после имени переменной ... Так : const dataType variableName[] PROGMEM = {}; ... Или - так : const PROGMEM dataType variableName[] = {}; ... Хотя PROGMEM можно использовать с одной переменной, на самом деле это стоит суеты только в том случае, если у вас есть большой блок данных, который необходимо сохранить, что обычно проще всего сделать в массиве (или другой структуре данных) ... Использование PROGMEM также представляет собой двухэтапную процедуру ... После загрузки данных во флэш-память требуются специальные методы (функции), также определенные в библиотеке pgmspace.h, для чтения данных из программной памяти обратно в SRAM, чтобы использовать их в работе ... Массивы строк - При работе с большими объемами текста, например проектом с ЖК-дисплеем, часто бывает удобно настроить массив строк ... Поскольку сами строки являются массивами, это фактически пример двумерного массива ... Это, как правило, большие структуры, поэтому часто желательно поместить их в программную память ... Примечание : для работы с PROGMEM переменные должны быть определены либо глобально, либо - static ... Строки могут легко заполнить оперативную память ; если есть свободное место во флэш-памяти - лучше сохранять их туда ...
Functions - Функции.
Обычно - функции работают с переменными var (сокращенно от variable), значениями val (сокр. от value) и отправляют результаты обработки result - вызывающей функции (кроме void - пустое объявление функции, не требующее ответа) ... В скобках (var, var) - может быть одна или более переменных, как определено задачами и исполнением функции ... Переменные определяются заранее, с указанием типа данных или - непосредственно задействуются ключевые слова языка программирования Arduino ...
Digital I/O - цифровые входы / выходы.
pinMode (pin, mode) ... INPUT / OUTPUT ... Настраивает указанный вывод для работы в качестве входа или выхода ... Начиная с Arduino 1.0.1, можно включить внутренние подтягивающие резисторы в режиме INPUT_PULLUP ... Кроме того, режим INPUT явно отключает внутренние подтяжки ...
digitalWrite (pin, value) ... HIGH / LOW ... Установка уровня состояния / напряжения контакта ... 5 В (или 3,3 В) и 0 В (земля) ...
digitalRead (pin) ... Считывает значение состояния с указанного цифрового вывода ... Примечание : если вывод ни к чему не подключен, digitalRead () может возвращать HIGH или LOW (и это может меняться случайным образом) ... Аналоговые входные контакты могут использоваться как цифровые контакты, обозначенные как A0, A1 и т.д. ...
Analog I/O - аналоговые входы / выходы.
analogReference () ... Базис, опорная точка начала отсчета аналогового входа ... Конфигурирует опорное напряжение используется для аналогового входа (то есть значение, используемое в качестве верхней части диапазона входного сигнала) ... Возможные варианты ... DEFAULT - 5В или 3,3В по типу питания платы ... INTERNAL - 1,1V на ATmega 168 / 328 и 2,56V yf ATmega8 (не доступно на Arduino Mega) ... INTERNAL1V1 - 1.1V (Arduino Mega только) ... INTERNAL2V56 - 2.56V (Arduino Mega только) ... EXTERNAL - напряжение, приложенное к AREF контакту (от 0 до 5 вольт - только), используется в качестве опорного ... Примечание : после изменения аналогового задания первые несколько показаний функции analogRead () могут быть неточными ... Предупреждение : не превышать пределы напряжений !!! ... Указывать EXTERNAL - только перед вызовом analogRead (), иначе - короткое замыкание на активное внутреннее опорное напряжение, с повреждением микроконтроллера ... Допускается подключить внешний источник EXTERNAL опорного напряжения к AREF пину через резистор 5K, что позволяет переключаться между внешними и внутренними опорными напряжениями, однако резистор изменит напряжение, которое получает используется в качестве опорного, поскольку есть внутренний 32K резистор на AREF контакте ... Они действуют как делитель напряжения, поэтому, например, 2,5 В, приложенное через резистор, даст 2,5 * 32 / (32 + 5), примерно = 2,2 В на выводе AREF ...
analogRead (pin) ... Returns = int (0 to 1023) ... Считывает значение с указанного аналогового вывода ... Плата Arduino содержит 6-канальный (8 каналов на Mini и Nano, 16 на Mega) 10-битный аналого-цифровой преобразователь ... АЦП преобразует входные напряжения от 0 до 5 вольт в целочисленные значения от 0 до 1023, с разрешением отсчета 5 вольт / 1024 единиц = 0,0049 вольт (4,9 мВ) на единицу ... Диапазон ввода и разрешение можно изменить с помощью analogReference () ... Для чтения аналогового входа требуется около 100 микросекунд (0,0001 с), поэтому максимальная скорость чтения составляет около 10000 раз в секунду ... Если аналоговый входной вывод ни к чему не подключен, значение, возвращаемое функцией analogRead (), будет колебаться в зависимости от ряда факторов (например, значений других аналоговых входов, наводка от руки на плате, помехи и т.д.) ...
analogWrite (pin, value), где value = duty cycle : между 0 (всегда выключено) и 255 (включено постоянно) ... PWM, Pulse Width Modulation ... Широтно - Импульсная модуляция с изменяемой скважностью (Duty cycle, отношение периода следования импульсов к длительности импульса ; величина, обратная скважности - коэффициент заполнения или рабочий цикл ... Записывает аналоговое значение (сигнал ШИМ) на вывод ... Может использоваться для освещения светодиода с разной яркостью или для привода двигателя с разной скоростью ... После вызова analogWrite () вывод будет генерировать устойчивую прямоугольную волну указанного рабочего цикла до следующего вызова analogWrite () (или вызова digitalRead () или digitalWrite () на том же выводе) ... Частота сигнала ШИМ на большинстве контактов составляет примерно 490 Гц ... На Uno и подобных платах контакты 5 и 6 имеют частоту примерно 980 Гц ... Контакты 3 и 11 на Леонардо также работают на частоте 980 Гц ... На большинстве плат Arduino (с ATmega 168 / 328) эта функция работает на контактах 3, 5, 6, 9, 10 и 11 ... На Arduino Mega она работает на контактах 2-13 и 44-46 ... Платы с ATmega8 поддерживают функцию analogWrite () только на контактах 9, 10 и 11 ... Arduino Due поддерживает функцию analogWrite () на выводах со 2 по 13, а также на выводах DAC0 и DAC1 ... В отличие от контактов PWM, DAC0 и DAC1 являются цифро-аналоговыми преобразователями и действуют как настоящие аналоговые выходы ... Не требуется вызывать pinMode () - перед вызовом analogWrite () ... Функция analogWrite не имеет ничего общего с аналоговыми выводами или функцией analogRead ... Примечания и известные проблемы ... Выходы ШИМ, генерируемые на контактах 5 и 6, будут иметь рабочие циклы, превышающие ожидаемые ... Это связано с взаимодействием с функциями millis () и delay (), которые используют тот же внутренний таймер, который используется для генерации этих выходных сигналов ШИМ ... Это будет заметно в основном при настройках низкой продолжительности включения (например, 0-10) и может привести к тому, что значение 0 - не полностью отключит (обесточит) выход на контактах 5 и 6 ...
Только для плат Due и Zero.
analogReadResolution (bits) ... Это расширение аналогового API для Arduino Due и Zero ... Устанавливает размер (в битах) значения, возвращаемого функцией analogRead () ... По умолчанию используется 10 бит (возвращает значения от 0 до 1023) для обратной совместимости с платами на базе AVR ... Due и Zero имеют возможности 12-битного АЦП, доступ к которым можно получить, изменив разрешение на 12 ... Это вернет значения от analogRead () от 0 до 4095 ... Вы можете установить разрешение выше 12, но значения, возвращаемые функцией analogRead (), будут иметь приближение ... Превышение разрешения платы - запишет дополнительные биты - нулями ... При установке параметра ниже разрешения платы - лишние младшие значащие биты АЦП - будут отброшены ... Использование 16-битного разрешения (или выше) - позволит писать скетчи, автоматически совместимые с будущими платами более высокого разрешения - без изменения строчек кода ...
analogWriteResolution (bits) ... Это расширение аналогового API для Arduino Due и Zero ... Устанавливает разрешение функции analogWrite () ... По умолчанию используется 8 бит (значения от 0 до 255) для обратной совместимости с платами на базе AVR ... Поможет обеспечить работу с полным разрешением для ЦАП (цифро-аналоговый преобразователь) и ШИМ без перехода ... Значение bits может находиться в диапазоне от 1 до 32 ... Превышение стандартной возможности платы - дополнится нулями или отбросит значимые единицы ...
Advanced I/O - Расширенный ввод / вывод.
tone (pin, frequency, duration) ... Тон ... Генерирует прямоугольный сигнал заданной частоты (и рабочего цикла 50%) на выводе ... Вывод можно подключить к пьезозуммеру или другому динамику для воспроизведения звука ... Одновременно может генерироваться только один тон ... Использование функции tone () будет мешать выходу ШИМ на контактах 3 и 11 (на платах, отличных от Mega) ... Невозможно генерировать тоны ниже 31 Гц ... Предварительно вызвать noTone () на предыдущем контакте перед вызовом tone () на следующем ...
noTone (pin) ... Останавливает генерацию звука прямоугольной волны, вызванной тональным сигналом ... Не действует, если звук не воспроизводится ...
shiftOut (dataPin, clockPin, bitOrder, value) ... shiftOut () ... Вывод бит ??? ... Сдвигает байт данных по одному биту за раз ... Со старшего (крайний левый) или младшего (крайний правый) бита ... Следить за синхронизацией по фронту ... Примечание : DataPin и clockPin уже должны быть настроены, как - выходы, с помощью вызова pinMode () ... shiftOut в настоящее время записывается для вывода 1 байта (8 бит), поэтому для вывода значений больше 255 - требуется двухэтапная операция ...
shiftIn (dataPin, clockPin, bitOrder) ... Ввод бит ??? ... Сдвигает байт данных по одному бит за раз ... Тактовая и синхронизация по фронтам ... Примечание: это программная реализация; Arduino также предоставляет библиотеку SPI, которая использует аппаратную реализацию, которая работает быстрее, но работает только на определенных контактах ...
pulseIn (pin, value, timeout) ... Функция возвращает : длина импульса (в микросекундах) или 0, если ни один импульс не завершился до тайм-аута ... Считывает уровень импульса на контакте ... Срабатывает только при перепаде сигнала - и запускает таймер подсчета длительности ... Синхронизация этой функции была определена эмпирически и, вероятно, покажет ошибки для более коротких импульсов ... Работает с импульсами длительностью от 10 микросекунд до 3 минут ... Эту процедуру можно использовать, только если активированы прерывания ... Самое высокое разрешение достигается с короткими интервалами ...
Time - Время.
millis () ... Возвращает количество миллисекунд с момента начала выполнения текущей функции ... Это число переполнится (вернется к нулю) примерно через 50 дней ... Примечание - возвращаемое значение для millis () представляет собой длинное число без знака, логические ошибки могут возникнуть, если программист попытается выполнить арифметику с меньшими типами данных, такими как int ... Даже подписанное long может столкнуться с ошибками, поскольку его максимальное значение вдвое меньше, чем у его беззнакового аналога ...
micros () ... Возвращает количество микросекунд с момента начала выполнения текущей функции ... Это число переполнится (вернется к нулю) примерно через 70 минут ... На платах Arduino с частотой 16 МГц (например, Duemilanove и Nano) эта функция имеет разрешение четыре микросекунды (т.е. возвращаемое значение всегда кратно четырем) ... На платах Arduino 8 МГц (например, LilyPad) эта функция имеет разрешение восемь микросекунд ... Примечание : в миллисекунде - 1000 микросекунд и в секунде - 1000000 микросекунд ...
delay (ms) ... Приостанавливает программу на время (в миллисекундах), указанное в качестве параметра ... Предостережение ... Хотя с помощью функции delay () легко создать мигающий светодиод, и во многих скетчах используются короткие задержки для таких задач, как отключение переключателя, использование delay () в программном коде - имеет существенные недостатки ... Никакое другое считывание датчиков, математические вычисления или манипуляции с выводами не могут выполняться во время функции задержки, поэтому, по сути, это останавливает большинство других действий ... Для альтернативных подходов к управлению синхронизацией использовать другие подходы ... Более опытные программисты обычно избегают использования delay () для определения времени событий продолжительностью более 10 миллисекунд, если только, скетч Arduino, не - примитивно прост ... Однако - функция задержки не отключает прерывания ... Последовательная связь, которая появляется на выводе RX, записывается, значения PWM (analogWrite) и состояния выводов сохраняются, а прерывания - будут работать должным образом ...
delayMicroseconds (us) ... Приостанавливает программу на время (в микросекундах), указанное в качестве параметра ... В настоящее время наибольшее значение, обеспечивающее точную задержку, составляет 16383 ... Это может измениться в будущих выпусках Arduino ... Для задержек, превышающих несколько тысяч микросекунд, вместо этого следует использовать delay (ms) ... Предостережения и известные проблемы ... Эта функция работает очень точно в диапазоне от 3 микросекунд ... Мы не можем гарантировать, что delayMicroseconds будет работать, именно - с меньшими временными задержками ... Начиная с Arduino 0018, delayMicroseconds () - больше не отключает прерывания ...
Math - Математика.
Примечание ... Из-за особенностей реализации математических функций - избегайте использования других функций - внутри ( ) скобок - это может привести к неверным результатам ... Авторы имели ввиду, что вместо переменных min (x, y) - можно подставить, например : функцию счетчика min (i++, var) и делать сравнение с ней, но результат может быть непредсказуемым, потому и рекомендуют - воздержаться от употребления ...
min (x, y) ... Вычисляет минимум двух чисел ... Возврат - Меньшее из двух чисел ...
max (x, y) ... Вычисляет максимум двух чисел ... Возврат - Наибольшее из двух значений параметра ...
abs (x) ... Вычисляет абсолютное значение числа -x ... 0 ... x ...
constrain (x, a, b) ... Ограничивает число x - нахождением в диапазоне a - b ...
map (value, fromLow, fromHigh, toLow, toHigh) ... Переназначает число из одного диапазона в другой ... То есть значение fromLow будет отображаться в toLow ... значение fromHigh - в toHigh ... промежуточные значения - в промежуточные значения и т.д. ... Не ограничивает значения в пределах диапазона, потому что значения, выходящие за пределы диапазона, иногда предназначаются и полезны ... Функцию constrain () можно использовать до или после этой функции, если желательны ограничения диапазонов ... Обратите внимание, что нижние границы любого диапазона - могут быть больше или меньше верхних границ, поэтому функцию map () можно использовать для изменения диапазона чисел ... Функция также хорошо обрабатывает отрицательные числа ... Функция map () использует целочисленную математику, поэтому не будет генерировать дроби, когда математика может указать, что это должно быть сделано ... Дробные остатки - отсекаются (не округляются и не усредняются) ...
pow (base, exponent) ... Вычисляет значение числа в степени ... Pow () можно использовать для возведения числа в дробную степень ... Это полезно для создания экспоненциального отображения значений или кривых (графиков) ...
sqrt (x) ... Вычисляет квадратный корень числа ...
Trigonometry - Тригонометрия.
sin (rad) ... Вычисляет синус угла (в радианах) ... Результат будет от -1 до 1 ... rad : угол в радианах (с плавающей запятой) ...
cos (rad) ... Вычисляет cos угла (в радианах) ... Результат будет от -1 до 1 ... rad : угол в радианах (с плавающей запятой) ...
tan () ... Вычисляет тангенс угла (в радианах) ... Результат будет между отрицательной бесконечностью и бесконечностью ... rad : угол в радианах (с плавающей запятой) ...
Радиан - современная единица измерения углов в математике и физике ... Радиан = 180 / ПИ = примерно 57.3 градуса ... В этом скрывается еще один нюанс : математики измеряют углы в радианах и это приводит к путанице и неразберихе, особенно на промежуточных углах ... С другой стороны - это может выглядеть удобным, при указании углов через ПИ ... 90 = Пи / 2 ... 180 = Пи ... 270 = 3 / 2 Пи ... 360 = 2 Пи ... Кстати, JavaScript - также не понимает углов в градусах, требуя радианы ... В коде программы всегда требуется предварительно вычислить / конвертировать требуемые величины, перевод : градус * ПИ / 180 = радиан или радиан * 180 / ПИ = градус ...
Characters - Символы.
Для всех функций : анализ, является ли символ - чем-то : правда или ложь ...
isAlphaNumeric (thisChar) ... буквенно-цифровым ...
isAlpha (thisChar) ... альфа ...
isAscii (thisChar) ... текстовый ASCII символ ...
isWhitespace (thisChar) ... пробел ... Разобраться с вариантами
...
... поможет статья на Википедии, объясняя разницу типографических вариантов отделения текста, таких как пустое место или символы : табуляции, возврата каретки, новой строки, вертикальной табуляции и прочих ...
isControl (thisChar) ... контрольный управляющий символ ...
isDigit (thisChar) ... цифра, число ...
isGraph (thisChar) ... печатный символ ...
isLowerCase (thisChar) ... строчный символ ...
isPrintable (thisChar) ... печатный символ ...
isPunct (thisChar) ... знак, символ препинания ...
isSpace (thisChar) ... пробел или пустой символ ...
isUpperCase (thisChar) ... заглавная, прописная буква ...
isHexadecimalDigit (thisChar) ... валидная, допустимая шестнадцатеричная цифра ...
Random Numbers - Случайные числа.
randomSeed (seed) ... Инициализирует генератор псевдослучайных чисел, заставляя его запускаться в произвольной точке его случайной последовательности ... Эта последовательность, хотя и очень длинная и случайная - всегда одинакова ... Если важно, чтобы последовательность значений, сгенерированная random (), отличалась, при последующих выполнениях скетча - используйте randomSeed () для инициализации генератора случайных чисел довольно случайным вводом, таким как analogRead () - на неподключенном выводе (висящем в воздухе, без потребителя) ... И наоборот, иногда может быть полезно использовать точно повторяющиеся псевдослучайные последовательности. Это можно сделать, вызвав randomSeed () с фиксированным номером перед запуском случайной последовательности ...
random (min, max) ... Случайная функция генерирует псевдослучайные числа ... min - нижняя граница случайного значения, включительно (необязательно) ... max - верхняя граница случайного значения, исключая ... Возврат : случайное число от min до max-1 (длинное) ...
Bits and Bytes - Биты и байты.
lowByte (x) ... Извлекает младший (крайний правый) байт переменной (например, слова) ...
highByte (x) ... Извлекает старший (крайний левый) байт слова (или второй младший байт большего типа данных) ...
bitRead (x, n) ... Читает бит по номеру ... x : число, с которого следует читать ... n : какой бит читать, начиная с 0 для наименее значимого (крайнего правого) бита ...
bitWrite (x, n, b) ... Записывает бит числовой переменной ... x : числовая переменная для записи ... n : какой бит числа записывать, начиная с 0 для наименее значимого (крайнего правого) бита ... b : значение для записи в бит (0 или 1) ...
bitSet (x, n) ... Устанавливает (записывает в 1 [единицу]) бит числовой переменной ... x : числовая переменная, бит которой нужно установить ... n : какой бит установить, начиная с 0 для наименее значимого (крайнего правого) бита ...
bitClear (x, n) ... Очищает, (записывает в 0 [сбрасывает, обнуляет]) бит числовой переменной ... x : числовая переменная, бит которой нужно очистить ... n : какой бит очистить, начиная с 0 для наименее значимого (крайнего правого) бита ...
bit (n) ... Вычисляет значение указанного бита ... (бит 0 равен 1 ... бит 1 равен 2 ... бит 2 равен 4 и т.д.) ... n: бит, значение которого нужно вычислить ...
External Interrupts - Внешние прерывания.
attachInterrupt attachInterrupt(digitalPinToInterrupt(pin), ISR, mode); - рекомендуемый и не рекомендуемые запросы ... attachInterrupt(interrupt, ISR, mode); ... attachInterrupt(pin, ISR, mode); ... Где : interrupt - прерывание :, pin - контакт, ISR - системная функция обработки исключительной ситуации, mode - режим отслеживания сигнала на пине : LOW - низкий уровень сигнала, CHANGE - при изменении, RISING - при повышении (подъеме), FALLING - при снижении (падении) ... Включает обработку выбранного прерывания ...
Использование прерываний ... Прерывания полезны для того, чтобы что-то происходило автоматически в программах микроконтроллера, и могут помочь решить проблемы с синхронизацией ... Хорошие задачи для использования прерывания могут включать чтение поворотного энкодера или мониторинг пользовательского ввода ... Если вы хотите убедиться, что программа всегда улавливает импульсы от поворотного энкодера, чтобы он никогда не пропустил импульс, было бы очень сложно написать программу для чего-либо еще, потому что программе нужно было бы постоянно опрашивать датчик. линии для энкодера, чтобы улавливать импульсы, когда они возникают ... Другие датчики также имеют аналогичную динамику интерфейса, например, попытку прочитать звуковой датчик, который пытается поймать щелчок, или инфракрасный датчик (фото затвор) ... Во всех этих ситуациях, использование прерывания - может освободить микроконтроллер для выполнения другой работы, не пропуская при этом сработку по входу исключительной ситуации ... ISR обработка прерываний - должна быть, как можно более короткой и быстрой ... Несколько ISR - будут выполняться по очереди их приоритета ... Переменные, совместно используемые ISR и основной программой - должны быть задекларированы, как volatile ... Вместо явного объявления прерывания - рекомендуется указать номер пина (кроме контакта 4), на который повешан обработчик - для совместимости с обработкой, отличающейся на разных версиях плат ...
detachInterrupt (interrupt) ... detachInterrupt (digitalPinToInterrupt(pin)) ... или для Arduino Due, Zero only : detachInterrupt (pin) ... Выключает обработку выбранного прерывания ...
Interrupts - Общие прерывания.
interrupts () ... Повторно включает прерывания (после того, как они были отключены noInterrupts ()) ... По умолчанию, прерывания - включены ... Прерывания позволяют выполнять определенные важные задачи в фоновом режиме ... Некоторые функции не будут работать, пока прерывания отключены, а входящие сообщения могут игнорироваться ... Однако прерывания могут немного нарушить синхронизацию кода и могут быть отключены для особо важных участков кода ...
noInterrupts () ... Отключение прерываний, не указывается конкретно, но скорее всего - и внутренних, и внешних, для обработки участков кода с критической временной зависимостью - по таймингам синхронизации ...
Communication - Коммуникация и связь.
Serial ... Последовательная передача данных ... Используется для связи между платой Arduino и компьютером (или другими устройствами) ... Все платы Arduino имеют как минимум один последовательный порт (также известный как UART или USART) ... Он обменивается данными на цифровых выводах 0 (RX) и 1 (TX), а также с компьютером через USB (псевдо виртуальный RS-232 COM порт) ... Таким образом, если вы используете эти функции - вы не можете использовать контакты 0 и 1 для цифровых входов / выходов ... Можно использовать встроенный последовательный монитор среды Arduino для связи с платой Arduino ... Нажмите кнопку монитора последовательного порта на панели инструментов и выберите ту же скорость передачи, что и при вызове begin () ... Примечание : не подключайте USB контакты напрямую к порту RS232 - напряжение +/- 12 В повредит плату Arduino ... Arduino Mega имеет три дополнительных последовательных порта ; чтобы использовать их - понадобится дополнительный адаптер USB-to-serial ... Arduino Due имеет три дополнительных последовательных порта TTL на 3,3 В, USB-to-TTL Serial порт отладки USB и на микросхеме SAM3X собственный SerialUSB порт ... Плата Arduino Leonardo использует Serial1 TTL 5 В порт (зарезервирован для связи USB CDC) ...
Stream ... Транслятор, потоковая передача данных ... Это базовый класс для символьных и двоичных потоков ... Он не вызывается напрямую, но вызывается всякий раз, когда вы используете функцию, которая на него полагается ... Stream определяет функции чтения в Arduino ... При использовании каких-либо основных функций, использующих метод read () или аналогичный, можно с уверенностью предположить, что он вызывает класс Stream ... Для таких функций, как print (), Stream наследуется от класса Print ...
Некоторые из библиотек, которые полагаются на Stream, включают : ... Serial (рассмотрено - выше) ... Wire, библиотека проводной связи - позволяет обмен данными с устройствами I2C / TWI, через контакты SDA (линия данных) и SCL (линия синхронизации) ... Наследие от функций Stream - делает ее совместимой с другими библиотеками чтения / записи ... Из-за этого send () и receive () были заменены на read () и write () ... Примечание : существуют как 7-, так и 8-битные версии адресов I2C ... 7 бит - идентификатор устройства, а 8-ой бит определяет режим : чтение или запись ... 8-битный адрес требует сдвиг на один бит вправо для исправления адресации ... Примеры использования I2C : цифровой потенциометр, связь плат Arduino между собой, цифровой сигнал от датчика ультразвуковой дальномер ... Ethernet Client / Ethernet Server - библиотека позволяет плате Arduino подключаться к Интернету - с помощью шины SPI и контакта SS ... Может служить либо сервером, принимающим входящие соединения, либо клиентом, выполняющим исходящие ... Библиотека поддерживает до четырех одновременных подключений (входящих, исходящих или их комбинации) ... SD, библиотека чтения / записи на стандартные SD и SDHC-карты с файловой системой FAT16 и FAT32, используя короткие имена 8.3 для файлов через протокол и порт SPI и контакт SS ... Примечание для всех применений : даже если аппаратный контакт SS не используется - его необходимо оставить как выход (не занимать), иначе библиотеки - не будет работать ...
Функции класса Stream ... stream.available () ... получает количество байтов, доступных в потоке ; это - только для уже поступивших / полученных байтов ... stream.read () ... читает символы из входящего потока в буфер ... stream.flush () ... очищает буфер после отправки всех исходящих символов ... stream.find (target) ... чтения данных из потока, пока не будет найдена целевая строка заданной длины ; вернет : истина, если - найдено или ложь, если - истекло время ожидания ... stream.findUntil (target, terminal) ... читает данные из потока до тех пор, пока не будет найдена целевая строка заданной длины или строка-ограничитель, возвращая истину, если - найдено или ложь, если время ожидания - истекло ... stream.peek () ... читает байт из файла, не переходя к следующему ... То, есть - последовательные вызовы peek () вернут то же значение, что и следующий вызов read () ... stream.readBytes (buffer, length) ... считывает символы из потока в буфер, до определенной длины или истекло время ожидания ... stream.readBytesUntil (character, buffer, length) ... считывает символы из потока в буфер, до события : обнаружен символ терминатора, считана определенная длина или наступил тайм-аут ... readString () ... считывает символы из потока в строку, до истечения времени ожидания (тайм-аут) ... stream.readString (terminator) ... считывает символы из потока в строку ... Функция завершается, если обнаруживается символ терминатора (отмены) или истекает время ожидания ... stream.parseInt (list, char skipchar) ... возвращает первое действительное (длинное) целое число из последовательного буфера ... Символы, не являющиеся целыми числами (или со знаком минус) - пропускаются ; при тайм-ауте - вернется 0 ... stream.parseFloat (list) ... возвращает первое действительное число с плавающей запятой из текущей позиции ... stream.setTimeout (time) ... максимальное время ожидания потоковых данных в миллисекундах ...
USB (32u4 based boards and Due/Zero only - только платы на базе 32u4 и Due / Zero).
Библиотеки мыши и клавиатуры ... Эти базовые библиотеки позволяют платам на базе 32u4 или плате Due and Zero выступать в качестве родной мыши и / или клавиатуры на подключенном компьютере ... Предупреждение при использовании библиотек Mouse и Keyboard : если библиотека Mouse или Keyboard постоянно работает, будет сложно запрограммировать плату ... Такие функции, как Mouse.move () и Keyboard.print () будут перемещать курсор или отправлять нажатия клавиш на подключенный компьютер, и их следует вызывать только тогда, когда вы готовы их обработать ... Для включения этой функции рекомендуется использовать систему управления, например физический переключатель, или реагировать только на определенный ввод, которым вы можете управлять ... При использовании библиотеки Mouse или Keyboard, лучше всего - сначала протестировать вывод с помощью Serial.print () ... Таким образом, вы можете быть уверены, что знаете, какие значения сообщаются и могут быть обработаны ...
Keyboard ... Клавиатура ... Функции клавиатуры позволяют Leonardo, Micro или Due отправлять нажатия клавиш на подключенный компьютер ... Примечание : не все возможные символы ASCII, особенно непечатаемые, можно отправить с помощью библиотеки Keyboard ... Библиотека поддерживает использование клавиш-модификаторов ... Клавиши-модификаторы изменяют поведение другой клавиши при одновременном нажатии ... Keyboard.begin () - начинает эмулировать клавиатуру, подключенную к компьютеру ; чтобы завершить управление, используйте Keyboard.end () ... Keyboard.press () - при вызове работает так, как если бы на клавиатуре была нажата и удерживалась клавиша ... Полезно при использовании клавиш-модификаторов ... Чтобы завершить нажатие клавиши, используйте Keyboard.release () или Keyboard.releaseAll () ... Keyboard.print (characters) - отправляет нажатие клавиши на подключенный компьютер ... Keyboard.println (characters) - отправляет нажатие клавиши на подключенный компьютер, за которым следует перевод строки и возврат каретки ... Keyboard.write (character) - отправляет нажатие клавиши на подключенный компьютер - это похоже на нажатие и отпускание клавиши на клавиатуре ... Можно отправить некоторые символы ASCII или дополнительные модификаторы клавиатуры и специальные клавиши ... Поддерживаются только символы ASCII, которые есть на клавиатуре (например, ASCII 8 - будет работать, а ASCII 25 - нет) ... При отправке заглавных букв Keyboard.write () отправляет команду сдвига плюс желаемый символ, как при вводе текста на клавиатуре ... При отправке числового типа - он отправляется, как символ ASCII (например, 97 = a) ...
Mouse ... Мышь ... Функции мыши позволяют Leonardo, Micro или Due управлять перемещением курсора на подключенном компьютере ... При обновлении позиции курсора, она всегда - относительно предыдущей позиции курсора ... Mouse.begin () - начинается эмуляция мыши, подключенной к компьютеру ... begin () необходимо вызвать перед управлением компьютером ... Чтобы завершить управление, используйте Mouse.end () ... Когда вы используете команды мыши - Arduino берет управление мышью - на себя ... Mouse.click (button) - посылает мгновенный щелчок на компьютер в месте нахождения курсора - то же самое, что нажать и сразу отпустить кнопку мыши ; по умолчанию - левая кнопка мыши ... Mouse.move (xVal, yPos, wheel) - перемещает курсор на подключенный компьютер ; движение на экране всегда происходит относительно текущего положения курсора ... Mouse.press (button) - нажатие : эквивалентно нажатию и постоянному удержанию кнопки мыши ; отменяется с помощью Mouse.release () ... Mouse.isPressed (button) - проверяет текущее состояние всех кнопок мыши и сообщает, нажаты они или нет ... Значение кнопки : MOUSE_LEFT (default) ... MOUSE_RIGHT ... MOUSE_MIDDLE ...
Looking for something else? ... Ищете что-нибудь еще? ...
Смотрите в папке установки Arduino IDE на вашем ПК / reference / www.arduino.cc / en / Reference / Libraries.html (libraries page) Страницу библиотек - для взаимодействия с конкретными типами оборудования ... Попробуйте
...
... предоставленного сообществом community-contributed code ... Язык Arduino основан на C / C ++. Он связан с
...
... и позволяет использовать любые его функции ; подробности см. в
...
Март, 2021 ...
Раздел computer : список всех страниц ...