Структура программы на языке c++ для arduino

Важные страницы

  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макро, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
  • Поддержать автора за работу над уроками
  • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту (alex@alexgyver.ru)

Курс «Ардуино программирование для начинающих»

ВведениеАрдуино: что это такое?Алгоритмы в робототехникеОсновные законы электричества

Модуль 1. «Ардуино — Старт»

1.1. Назначение пинов на Ардуино
1.2. Подключение светодиода к Ардуино
1.3. Мигание светодиода на Ардуино
1.4. Включение светодиода кнопкой
1.5. Задержки Ардуино — delay и millis
1.6. Подключение пьезоизлучателя к Ардуино
1.7. Монитор порта Arduino IDE
1.8. Аналоговый и цифровой выход на Ардуино
1.9. Подключение RGB светодиода к Ардуино
1.10. Аналоговые порты на Ардуино
1.11. Подключение потенциометра к Ардуино
1.12. Циклы for и while в Ардуино
1.13. Плавное включение светодиода
1.14. Последовательное включение светодиодов
1.15. Подключение датчика воды к Ардуино
1.16. Подключение фоторезистора к Ардуино
1.17. Подключение тактовой кнопки к Ардуино
1.18. Включение светодиода кнопкой Ардуино
1.19. Подключение датчика LM35 к Ардуино
1.20. Подключение транзистора к Ардуино
1.21. Подключение лазерного светодиода
1.22. Подключение моторчика к Ардуино
1.23. Семисегментный индикатор Ардуино
1.24. Сдвиговый регистр 74hc595 Ардуино
1.25. Датчик сердцебиения KY-039 Ардуино
1.26. Локальные и глобальные переменные

Модуль 2. «Ардуино — Шилд»

2.1. Подключение реле к Ардуино
2.2. Подключение датчика препятствия
2.3. Подключение сервопривода к Ардуино
2.4. Плавное вращение сервопривода
2.5. Управление Ардуино с компьютера
2.6. Подключение датчика звука к Ардуино
2.7. Подключение датчика движения к Ардуино
2.8. Подключение датчика вибрации к Ардуино
2.9. Подключение модуля с кнопкой
2.10. Подключение датчика освещенности
2.11. Подключение ИК приемника к Ардуино
2.12. Подключение УЗ дальномера к Ардуино
2.13. Подключение датчика DHT11 к Ардуино
2.14. Подключение LCD дисплея к Ардуино
2.15. Русский шрифт на LCD дисплее
2.16. Подключение джойстика к Ардуино
2.17. Управление сервоприводом джойстиком
2.18. Как подключить шаговый двигатель
2.19. Подключение датчика цвета к Ардуино
2.20. Подключение мотор шилд к Ардуино
2.21. Подключение датчика пламени Ардуино
2.22. Подключение датчика геркона к Ардуино
2.23. Подключение датчика тока к Ардуино
2.24. Подключение тензодатчика к Ардуино
2.25. Подключение энкодера к Ардуино
2.26. Четырехразрядный семисегментный индикатор

Модуль 3. «Ардуино — IoT»

3.1. Изменение частоты ШИМ Ардуино
3.2. Arduino EEPROM запись, чтение данных
3.3. Подключение LED ленты к Ардуино
3.4. Подключение DS18B20 к Arduino
3.5. Подключение модуля часов DS1302 к Аrduino
3.6. Подключение датчика газа MQ2
3.7. Адресная светодиодная лента Ардуино
3.8. Подключение DF Player mini к Ардуино
3.9. Радио модуль nRF24L01: описание, распиновка
3.10. Подключение модуля nRF24L01 к Ардуино
3.11. Подключение блютуз модуля к Ардуино
3.12. Прошивка блютуз модуля HC-05/06
3.13. Подключение модуля HR911105A к Ардуино

Реализуемые проекты

Машинка с управлением от смартфонаЛодка на Ардуино с ИК управлениемМетеостанция на Ардуино и Андроид

Что дают уроки для начинающих по Ардуино? Arduino UNO — это электронный конструктор, пользующийся огромной популярностью благодаря простоте программирования и возможностью создавать устройства, выполняющие разнообразные функции. Программирование производится на языке C++ или при помощи языка визуального программирования Scratch for Arduino.

Подключение вашей платы Arduino к компьютеру

После того как вы установили Arduino IDE на свой компьютер следующим логичным шагом будет подключение платы Arduino UNO к компьютеру. Чтобы сделать это просто используйте кабель для программирования (синего цвета) и соедините его с платой Arduino и USB портом вашего компьютера.

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

  1. Он запитывает плату Arduino UNO, то есть чтобы обеспечить выполнение программ на ней необходимо просто запитать ее с помощью USB кабеля.
  2. Через него программируется микроконтроллер ATmega328, находящийся на плате Arduino UNO. То есть код программы пересылается из компьютера в микроконтроллер именно по этому кабелю.
  3. Он может функционировать в качестве кабеля для последовательной связи, то есть с его помощью можно передавать данные с Arduino UNO в компьютер – это полезно для целей отладки программы.

После того как вы подадите питание на плату Arduino UNO на ней загорится маленький светодиод – это свидетельствует о том, что на плату подано питание. Также вы можете заметить как мигает другой светодиод – это результат работы программы по управлению миганием светодиода, которая по умолчанию загружена в вашу плату ее производителем.

Поскольку вы подключаете плату Arduino в первый раз к компьютеру необходимо некоторое время чтобы драйвера для нее успешно установились. Чтобы проверить правильно ли все установилось и определилось откройте «Диспетчер устройств (Device manager)» на вашем компьютере.

В диспетчере устройств откройте опцию «Порты» “Ports (COM & LPT)”, кликните на ней и посмотрите правильно ли отображается там ваша плата.

При этом стоит отметить, что не стоит обращать внимание на то, какой номер порта отобразился у вашей платы Arduino – он может, к примеру, выглядеть как CCH450 или что то подобное. Этот номер порта просто определяется производителем платы и больше ни на что не влияет

Если вы не можете в диспетчере устройств найти опцию “Ports (COM & LPT)”, то это означает, что ваша плата не корректно определилась компьютером. В большинстве случает это означает проблему с драйверами – по какой то причине они автоматически не установились для вашей платы. В этом случае вы должны будете вручную установить необходимые драйверы.

В некоторых случаях в указанной опции диспетчера устройств может отобразиться два COM порта для вашей платы и вы не будете знать какой из них правильный. В этой ситуации отключите и снова подключите плату Arduino к компьютеру – какой из COM портов при этом будет появляться и исчезать, значит тот и правильный порт.

Следует помнить о том, что номер COM порта будет изменяться при каждом новом подключении вашей платы к компьютеру – не пугайтесь, в этом нет ничего страшного.

Реальный пример

Рассмотрим пример, в котором происходит следующее: две кнопки управляют яркостью светодиода, подключенного к ШИМ пину. Установленная яркость сохраняется в EEPROM, т.е. при перезапуске устройства будет включена яркость, установленная последний раз. Для опроса кнопок используется библиотека GyverButton.

Для начала посмотрите на первоначальную программу, где установленная яркость не сохраняется. Программу можно чуть оптимизировать, но это не является целью данного урока.

#define BTN_UP_PIN 3    // пин кнопки вверх
#define BTN_DOWN_PIN 4  // пин кнопки вниз
#define LED_PIN 5       // пин светодиода

#include <GyverButton.h>

GButton btnUP(BTN_UP_PIN); // кнопка "яркость вверх"
GButton btnDOWN(BTN_DOWN_PIN); // кнопка "яркость вниз"

int LEDbright = 0;

void setup() {
  pinMode(LED_PIN, OUTPUT); // пин светодиода как выход
}

void loop() {
  // опрос кнопок
  btnUP.tick();
  btnDOWN.tick();

  if (btnUP.isClick()) {
    // увеличение по клику
    LEDbright += 5;
    setBright();
  }

  if (btnDOWN.isClick()) {
    // уменьшение по клику
    LEDbright -= 5;
    setBright();
  }
}

void setBright() {
  LEDbright = constrain(LEDbright, 0, 255); // ограничили
  analogWrite(LED_PIN, LEDbright);    // изменили яркость
}

В этот код нам нужно добавить:

  • Подключить библиотеку EEPROM.h
  • При запуске: чтение яркости из EEPROM и включение светодиода
  • При клике: запись актуального значения в EEPROM
#define BTN_UP_PIN 3    // пин кнопки вверх
#define BTN_DOWN_PIN 4  // пин кнопки вниз
#define LED_PIN 5       // пин светодиода

#include <EEPROM.h>
#include <GyverButton.h>

GButton btnUP(BTN_UP_PIN); // кнопка "яркость вверх"
GButton btnDOWN(BTN_DOWN_PIN); // кнопка "яркость вниз"

int LEDbright = 0;

void setup() {
  pinMode(LED_PIN, OUTPUT); // пин светодиода как выход
  EEPROM.get(0, LEDbright); // прочитали яркость из адреса 0
  analogWrite(LED_PIN, LEDbright);  // включили
}

void loop() {
  // опрос кнопок
  btnUP.tick();
  btnDOWN.tick();

  if (btnUP.isClick()) {
    // увеличение по клику
    LEDbright += 5;
    setBright();
  }

  if (btnDOWN.isClick()) {
    // уменьшение по клику
    LEDbright -= 5;
    setBright();
  }
}

void setBright() {
  LEDbright = constrain(LEDbright, 0, 255); // ограничили
  EEPROM.put(0, LEDbright);           // записали по адресу 0
  analogWrite(LED_PIN, LEDbright);    // изменили яркость
}

Итак, теперь при запуске у нас восстанавливается последняя настроенная яркость, и при изменении она записывается. Напомню, что EEPROM изнашивается от перезаписи. Конечно для того, чтобы “накликать” яркость несколько миллионов раз и убить ячейку, у вас уйдёт очень много времени, но процесс записи нового значения можно и нужно оптимизировать, особенно в более серьёзных проектах, ниже поговорим об этом подробнее.

Также в нашем коде есть ещё один неприятный момент: при самом первом запуске после прошивки EEPROM не инициализирована, каждая ячейка хранит в себе число 255, и именно такое значение примет переменная LEDbright после первого запуска, при так называемом “первом чтении”. Здесь это не имеет значения, но в более серьёзном устройстве нужно будет задать нужные значения по умолчанию в EEPROM при первом запуске, об этом мы тоже поговорим ниже. Иначе представьте, какие “настройки по умолчанию” получит ваше устройство для яркости/скорости/громкости/номера режима/прочее!

Особенности работы с «Ардуино Мини»

Работа с Arduino Mini следует тем же правилам, что и с другими платами, за исключением некоторых моментов:

  • подключение Arduino Mini к ПК сложнее, чем у стандартных моделей;
  • в настройках IDE необходимо указать вручную тип платы из меню Tools | Board и выбрать «Arduino Mini»;
  • прошивка нового скетча в Arduino Mini начинается с физического нажатия кнопки сброса на плате прямо перед началом операции.

Научиться программировать и работать с этим контроллером под силу даже детям. Интегрированная среда предоставляет простой и логический интерфейс.

Краткие сведения об Arduino Mini

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

  1. Микрочип в Arduino Mini (применяется ATmega328) меньше по размерам.
  2. Имеет 2 дополнительных аналоговых входа, всего 8. Однако 4 из них не имеют выводов на плате. Для них нужно самостоятельно припаивать штыри вывода. 2 вывода используются для интерфейса I2C и библиотекой Wire.
  3. Прочность Arduino Mini меньше других плат производителя.
  4. ATmega328 впаян в плату и потому не съемный, замене подлежит весь микроконтроллер.
  5. Не выдерживает перегрузок по напряжению на входах выше 9 В.

Ошибки загрузки

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

  • USB кабель, которым подключается Arduino, должен быть Data-кабелем, а не кабелем только для зарядки. Нужным нам кабелем подключаются к компьютеру плееры и смартфоны.
  • Причиной ошибки загрузки являются не установленные/криво установленные драйвера CH340, если у вас китайская NANO.
  • Также будет ошибка avrdude: ser_open(): can’t open device, если не выбран COM порт, к которому подключена Arduino. Если кроме COM1 других портов нет – читай два пункта выше, либо попробуй другой USB порт, или вообще другой компьютер.
  • Большинство проблем при загрузке, вызванных “зависанием” ардуины или загрузчика, лечатся полным отключением ардуины от питания. Потом вставляем USB и по новой прошиваем.
  • Причиной ошибки загрузки может быть неправильно выбранная плата в “Инструменты/Плата”, а также неправильно выбранный процессор в “Инструменты/Процессор”. Также в свежих версиях IDE нужно выбирать ATmega328P (Old Bootloader) для китайских плат NANO.
  • Если у вас открыт монитор COM порта в другом окне Arduino IDE или плата общается через СОМ порт с другой программой (Ambibox, HWmonitor, SerialPortPlotter и т.д.), то вы получите ошибку загрузки, потому что порт занят. Отключитесь от порта или закройте другие окна и программы.
  • Если у вас задействованы пины RX или TX – отключите от них всё! По этим пинам Arduino общается с компьютером, в том числе для загрузки прошивки.
  • Если в описании ошибки встречается bootloader is not responding и not in sync, а все предыдущие пункты этого списка проверены – с вероятностью 95% сдох загрузчик. Второй неприятный исход – загрузчик “слетел”, и его можно прошить заново.

Перечисления (Pro)

Перечисления ( – enumeration) – тип данных, представляющий собой набор именованных констант, нужен в первую очередь для удобства программиста. Сразу пример из опыта: допустим у нас есть переменная mode, отвечающая за номер режима работы устройства. Мы для себя запоминаем, какому значению переменной какой режим будет соответствовать, и где-нибудь себе записываем, например 0 – обычный режим, 1 – режим ожидания, 2 – режим настройки_1, 3 – режим настройки_2, 4 – калибровка, 5 – аварийный режим, ошибка. При написании или чтении программы часто придётся обращаться к этому списку, чтобы не запутаться. Можно сделать первый шаг по оптимизации: обозвать каждый режим при помощи дефайна:

#define NORMAL 0
#define WAITING 1
#define SETTINGS_1 2
#define SETTINGS_2 3
#define CALIBRATION 4
#define ERROR_MODE 5

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

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

enum ярлык {имя1, имя2, имя3, имя4, имя5};

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

ярлык имя_перечисления;

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

enum {имя1, имя2, имя3, имя4, имя5} имя перечисления;

Созданное таким образом перечисление является переменной, которая может принимать указанные для неё имена, также с этими именами её можно сравнивать. Теперь самое главное: имена для программы являются числами, начиная с 0 и далее по порядку увеличиваясь на 1. В абстрактном примере выше имя1 равно 0, имя2 равно 1, имя3 равно 2, и так далее. Помимо указанных имён, перечислению можно приравнять и число напрямую, но как бы зачем. Рассмотрим пример!

// создаём перечисление modes
// не создавая ярлык
enum {
  NORMAL,
  WAITING,
  SETTINGS_1,
  SETTINGS_2,
  CALIBRATION,
  ERROR_MODE,
} modes;

void setup() {
  Serial.begin(9600);   // для отладки
  modes = CALIBRATION;  // присваивание значения

  // можем сравнивать
  if (modes == CALIBRATION) {
    Serial.println("calibr");
  } else if (modes == ERROR_MODE) {
    Serial.println("error");
  }

  // присваиваем числом
  modes = 3;  // по нашему порядку это будет SETTINGS_2
}

Также порядок автонумерации перечислений можно изменить, задав начальное значение. От него всё будет и дальше изменяться на единицу:

enum {SET1 = 1, SET2, SET3, SET4, SET5} settings;

Таким образом имеет значение 1, будет 2 и так далее по порядку.

Важные страницы

  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макро, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
  • Поддержать автора за работу над уроками
  • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту (alex@alexgyver.ru)

AlexGyver

Сайт для любителей техники предоставляет бесплатные текстовые уроки — максимально подробные уроки по программированию Arduino с разбором всех тонкостей и особенностей языка.

Есть также бесплатные видеоуроки. Цикл охватывает все стандартные операторы и функции Ардуино и построен таким образом, что от выпуска к выпуску у зрителя идёт плавное формирование “базы”, каждый последующий урок (видео урок) содержит в себе информацию из предыдущих, то есть уроки усложняются и становятся комплексными.

Что узнает ребенок:

  • Что такое Ардуино и зачем она нужна?
  • Что умеет Ардуино и что можно сделать на её основе?
  • Подключение датчиков к Ардуино
  • Питание Arduino от различных источников электричества
  • Математические операторы для работы с переменными
  • Особенности переменных и констант
  • Общение между компьютером и Arduino Через COM порт
  • Какие существуют типы реле? В чём достоинства и недостатки?
  • Как подключить реле и как им управлять?

И это еще не все. 16 видеоуроков расскажут все нюансы о программировании на Arduino.

Simulator for Arduino

Продукт, разработанный virtronics, является полнофункциональным симулятором, доступным для студентов и начинающих в мире электроники, всех тек, кто ищет отличный симулятор Arduino. Это кросс-платформенный симулятор, который поддерживается как операционными системами Linux, так и Windows.

Особенности этого симулятора и некоторые его преимущества включают: учебное пособие, освещающее основы скетчей Ардуино; тестирование набросков идей, чтобы увидеть рабочие шаблоны, отладить ваши соединения и разработать виртуальные презентации для новых клиентов

Также важно отметить, что Simulator for Arduino — это не приложение с открытым исходным кодом, но оно бесплатно

ISP программатор

USBasp

Дешёвые ISP программаторы также есть в ассортименте у китайцев, рекомендую брать USBasp как самый распространенный. Поискать на алиэкспресс, мне нравится версия в корпусе. USBasp имеет не очень удобный выход 10-пин на шлейфе, поэтому рекомендуется купить также переходник 10-пин на 6-пин, который позволяет сразу подключаться к ISP header’у, который есть на большинстве плат Arduino

Внимание! Очень часто встречается брак в виде непропая контактов, поэтому во избежание проблем рекомендуется пропаять переходник и отмыть флюс (зубная щётка + бензин калоша).Быстрый старт:

  • Подключить usbasp к компьютеру
  • Скачать и установить драйвера на usbasp (скачать с моего сайта, скачать с Яндекс диска, ещё есть тут и тут)
  • Открыть диспетчер устройств и убедиться, что программатор определился системой
  • Открыть Arduino IDE
  • Выбрать usbasp в Инструменты > Программатор

Решение проблем

Решение большинства проблем с загрузкой через программатор (независимо от того, что написано в логе ошибки):

  • Вытащить и обратно вставить usbasp в usb порт
  • Вставить в другой usb порт
  • Переустановить драйвер на usbasp
  • Проверить качество соединения USBasp с МК
  • Перепаять переходник и отмыть флюс

Для прошивки микроконтроллера, тактирующегося низкой частотой (менее 1 МГц внутренний клок):

USBasp: на плате есть перемычка JP3, которая включает режим низкой скорости загрузки. В новых версиях прошивки для USBasp скорость выбирается автоматически, но китайцы продают старую версию. Как прошить новую – ищите в интернете.

Основные ошибки в логе Arduino IDE

Причина – компьютер не видит USB ASP

  • Проверить и сменить USB порт
  • Попытаться переустановить драйвер
  • Проверить пайку USB разъема на плате программатора
  • Проверить наличие и целостность элементов вблизи usb разъема программатора, кварцевый резонатор
  • Возможно программатор криво прошит – при возможности попытаться перепрошить
  • Возможно микроконтроллер на плате программатора – брак или же мертв, попытаться заменить и прошить

Причина – usbasp не видит подключаемый микроконтроллер

  • Проверить правильность и целостность соединения с МК
  • Попытаться снизить частоту прошивки, джампером или же указав более низкую скорость в среде программирования
  • Проверить пайку разъема 10 pin и переходника 10 pin – 6 pin
  • Возможно прошиваемый микроконтроллер попался с браком, или же мертв.

Arduino as ISP

Почти любая другая плата Arduino может стать ISP программатором, для этого нужно просто загрузить в неё скетч ArduinoISP:

  • Открыть скетч Файл > Примеры > 11. ArduinoISP > ArduinoISP
  • Всё! Ваша Arduino теперь стала ISP программатором
  • Подключаем к ней другую Arduino или голый чип по схеме ниже
  • Выбираем Arduino as ISP в Инструменты > Программатор
  • И можем писать загрузчики, фьюзы или загружать прошивку напрямую во Flash

ISP программатор подключается к четырем пинам микроконтроллера, не считая питания, один из пинов передает сброс, остальные служат для передачи данных. В случае с Ардуино в роли программатора, на плату-программатор рекомендуется поставить конденсатор ёмкостью ~10 мкФ на пин RST.

Решение проблем

Для прошивки микроконтроллера, тактирующегося низкой частотой (менее 1 МГц внутренний клок):

Arduino ISP: нужно изменить частоту загрузки прошивки в скетче Arduino ISP и снова прошить его в ардуино-программатор (см. строку в скетче 45 и ниже);

Математика, вычисления


// ========= МАТЕМАТИКА =========
// полный урок тут: https://alexgyver.ru/lessons/compute/

+ , — , * , / , % ; // сложить, вычесть, умножить, разделить, остаток от деления
a = b + c / d;

++ , — , += , -= , *= , /= ; // прибавить 1, вычесть 1, прибавить, вычесть, умножить, разделить
a++; // ~ a = a + 1;
a /= 10; // ~ a = a / 10;

// === БОЛЬШИЕ ВЫЧИСЛЕНИЯ ===
// ВАЖНО! Для арифметических вычислений по умолчанию используется ячейка long (4 байта)
// но при умножении и делении используется int (2 байта)
// Если при умножении чисел результат превышает 32’768, он будет посчитан некорректно.
// Для исправления ситуации нужно писать (long) перед умножением, что заставит МК выделить дополнительную память
long val;
val = 2000000000 + 6000000; // посчитает корректно (т.к. сложение)
val = 25 * 1000; // посчитает корректно (умножение, меньше 32’768)
val = 35 * 1000; // посчитает НЕКОРРЕКТНО! (умножение, больше 32’768)
val = (long)35 * 1000; // посчитает корректно (выделяем память (long) )
val = 1000 + 35 * 10 * 100; // посчитает НЕКОРРЕКТНО! (в умножении больше 32’768)
val = 1000 + 35 * 10 * 100L; // посчитает корректно! (модификатор L)
val = (long)35 * 1000 + 35 * 1000; // посчитает НЕКОРРЕКТНО! Второе умножение всё портит
val = (long)35 * 1000 + (long)35 * 1000; // посчитает корректно (выделяем память (long) )

// === ВЫЧИСЛЕНИЯ FLOAT ===
// если при вычислении двух целочисленных нужен дробный результат — пишем (float)
float val;
val = 100 / 3; // посчитает НЕПРАВИЛЬНО (результат 3.0)
val = (float)100 / 3; // посчитает правильно (указываем (float))
val = 100.0 / 3; // посчитает правильно (есть число float)

// при присваивании float числа целочисленному типу данных дробная часть отсекается
int val;
val = 3.25; // val принимает 3
val
= 3.92; // val принимает 3
val = round(3.25); // val принимает 3
val = round(3.92); // val принимает 4

// === МАТЕМАТИЧЕСКИЕ ФУНКЦИИ ===
// Ограничить диапазон числа val между low и high
val = constrain(val, low, high);

// Перевести диапазон числа val (от inMin до inMax) в новый диапазон (от outMin до outMax)
val = map(val, inMin, inMax, outMin, outMax);

min(a, b); // Возвращает меньшее из чисел a и b
max(a, b); // Возвращает большее из чисел
abs(x); // Модуль числа
round(x); // Математическое округление
radians(deg); // Перевод градусов в радианы
degrees(rad); // Перевод радиан в градусы
sq(x); // Квадрат числа
cos(x) // Косинус (радианы)
sin(x) // Синус (радианы)
tan(x) // Тангенс (радианы)
fabs(x) // Модуль для float чисел
fmod(x, y) // Остаток деления x на у для float
sqrt(x) // Корень квадратный
sqrtf(x) // Корень квадратный для float чисел
cbrt(x) // Кубический корень
hypot(x, y) // Гипотенуза ( корень(x*x + y*y) )
square(x) // Квадрат ( x*x )
floor(x) // Округление до целого вниз
ceil(x) // Округление до целого вверх
exp(x) // Экспонента (e^x)
cosh(x) // Косинус гиперболический (радианы)
sinh(x) // Синус гиперболический (радианы)
tanh(x) // Тангенс гиперболический (радианы)
acos(x) // Арккосинус (радианы)
asin(x) // Арксинус (радианы)
atan(x) // Арктангенс (радианы)
atan2(y, x) // Арктангенс (y / x) (позволяет найти квадрант, в котором находится точка)
log(x) // Натуральный логарифм х ( ln(x) )
log10(x) // Десятичный логарифм x ( log_10 x)
pow(x, y) // Степень ( x^y )
fma(x, y, z) // Возвращает x*y + z
fmax(x, y) // Возвращает большее из чисел
fmin(x, y) // Возвращает меньшее из чисел
trunc(x) // Возвращает целую часть числа с дробной точкой
round(x) // Математическое округление

// === КОНСТАНТЫ ===
F_CPU // частота тактирования в Гц (16000000 для 16 МГц)
INT8_MAX // 127 Максимальное значение для char, int8_t
UINT8_MAX // 255 Максимальное значение для byte, uint8_t
INT16_MAX // 32767 Максимальное значение для int, int16_t
UINT16_MAX // 65535 Максимальное значение для unsigned int, uint16_t
INT32_MAX // 2147483647 Максимальное значение для long, int32_t
UINT32_MAX // 4294967295 Максимальное значение для unsigned long, uint32_t
M_E // 2.718281828 Число e
M_LOG2E // 1.442695041 log_2 e
M_LOG10E // 0.434294482 log_10 e
M_LN2 // 0.693147181 log_e 2
M_LN10 // 2.302585093 log_e 10
M_PI // 3.141592654 pi
M_PI_2 // 1.570796327 pi/2
M_PI_4 // 0.785398163 pi/4
M_1_PI // 0.318309886 1/pi
M_2_PI // 0.636619772 2/pi
M_2_SQRTPI // 1.128379167 2/корень(pi)
M_SQRT2 // 1.414213562 корень(2)
M_SQRT1_2 // 0.707106781 1/корень(2)
PI // 3.141592654 Пи
HALF_PI // 1.570796326 пол Пи
TWO_PI // 6.283185307 два Пи
EULER // 2.718281828 Число Эйлера е
DEG_TO_RAD // 0.01745329 Константа перевода град в рад
RAD_TO_DEG // 57.2957786

Существуют ли еще программы, работающие с Ардуино?

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

Аналогичный набор функций нам может предоставить программа, которая называется Processing. Она очень схожа с Arduino IDE, так как обе сделаны на одном движке. Processing имеет обширный набор функций, который мало уступает оригинальной программе. С помощью загружаемой библиотеки Serial пользователь может создать связь между передачей данных, которые передают друг другу плата и Processing.При этом мы можем заставить плату выполнять программы прямо с нашего ПК.

Существует еще одна интересная версия исходной программы. Называется она B4R, и главным ее отличием является использование в качестве основы не языка си, а другой язык программирования – Basic. Данный программный продукт является бесплатным. Для работы с ним существуют хорошие самоучители, в том числе и написанные создателями данного продукта.

Есть и платные варианты Arduino IDE. Одним из таких является программа PROGROMINO. Главным ее достоинством считается возможность автодополнения кода. При составлении программы вам больше не нужно будет искать информацию в справочниках. Программа сама предложит вам возможные варианты использования той или иной процедуры. В ее набор входит еще множество интересных функций, отсутствующих в оригинальной программе и способных облегчить вам работу с платами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector