Меню на ардуино: Страница не найдена — Ардуино РоботоТехника

Список библиотек Arduino


Вы уже знаете, что комьюнити Ардуино очень большое и ежедневно растёт. За время своего существования оно родило огромное количество библиотек. Я решил составить список самых необычных, интересных и полезных, ссылки ведут на гитхаб или сайт разработчика. Полного набора специализированных библиотек для работы с модулями и шилдами здесь нет! Ищутся в гугле по названию чипа, здесь я оставлял только универсальные. Библиотеки, помеченные как стандартные, скачивать не нужно!

Список составлен для библиотек, подходящих для UNO, NANO, MEGA, то есть тут нет мощных библиотек для DUE и ZERO подобных плат. Источники:

avr-libs


В состав компилятора Arduino IDE входит набор стандартных библиотек под микроконтроллеры AVR (т.н. toolchain – набор инструментов), их можно просто подключить и использовать их возможности. Полный список и документация на все либы находится здесь. Тут перечислю самые полезные и интересные (название будет ссылкой на документацию):

  • math.h – библиотека с кучей математических функций. Подключена по умолчанию
  • time.h – библиотека для работы с временем. Счёт, конвертация, временные зоны и прочее
  • avr/eeprom.h – родная библиотека для работы с EEPROM. Подробно разбирали в этом уроке
  • avr/power.h – библиотека управления потреблением МК: делитель системной частоты и включение/выключение периферии
  • avr/sleep.h – библиотека для управления режимом энергопотребления МК
  • avr/wdt.h – управление сторожевым таймером
  • util/delay.h – библиотека с задержками на базе тактов процессора (работает без таймера 0)

Время, таймеры


  • Time – счётчик времени для Ардуино, считает часы-минуты-месяцы и всё такое. Описание
  • RTCTimer – таймер для работы в паре с RTC модулем
  • GyverTimer – моя версия таймера с миллис, рекомендую! Есть мс и мкс таймеры, режим периода и таймаута, улучшенный алгоритм счёта периодов.
  • Chrono – ещё библиотека “таймера с millis()” для эффективного построения логики своего кода
  • elapsedMillis – ещё один простой таймер с millis()
  • buildTime – библиотека для получения даты и времени компиляции в явном виде
  • TimeLord – библиотека, позволяющая узнать время восхода/заката Солнца и Луны, лунные фазы, звёздное время и проч.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника на основе географического положения
  • GyverTimer012 – лёгкая библиотека для управления прерываниями на всех трёх таймерах ATmega328. Заменена библиотекой GyverTimers
  • GyverTimers – библиотека для управления прерываниями по всем таймерам на ATmega328 и ATmega2560 с возможностью отдельной настройки каналов. Объективно лучше следующих трёх библиотек.
  • TimerOne – библиотека для удобного ручного контроля за Таймером 1 (прерывания, ШИМ, и.т.д.)
  • MsTimer2 – библиотека для удобного ручного контроля за Таймером 2. Есть версия FlexiTimer2, которая чем-то лучше.
  • TimerThree – библиотека для удобного ручного контроля за Таймером 3

Коммуникация, интерфейсы


  • GyverBus – общение по протоколу GBUS. Двухсторонняя связь сети Ардуинок по одному проводу. Описание
  • Firmata – стандартная библиотека для общения с компьютером по протоколу Firmata. Описание
  • SoftwareSerial – стандартная библиотека для создания TTL Serial на любых двух пинах, позволяет создать дополнительный порт для общения с Bluetooth/GPS/GSM и прочими модулями с Serial коммуникацией.
  • AltSoftSerial – самая лучшая версия софтварного Serial, использует системный таймер
  • SerialCommand – лёгкая библиотека для общения через порт при помощи команд
  • CmdMessenger – мощная библиотека для общения через Serial порт, со своим парсером и кучей приколюх. Описание
  • EasyTransfer – библиотека для общения двух Ардуинок через последовательный порт
  • Streaming – вывод в порт “в стиле C++” при помощи оператора <<
  • OneWire – библиотека для общения по протоколу one wire, например с датчиками температуры DHT18b20. Ардуино может быть “slave” для общения, читать тут
  • SerialControl – набор примеров для управления состояниями пинов при помощи Serial команд. Описание
  • MiniPirate – более мощная версия SerialControl, позволяет командами в порт крутить серво, сканировать i2c и многое другое!
  • MIDI_library – библиотека для работы с музыкальными устройствами по протоколу MIDI (через Serial, подходит любая Ардуина)
  • MIDI – MIDI библиотека от великого PaulStoffregen (через Serial, подходит любая Ардуина)
  • arcore – ещё одна библиотека для MIDI (USB-MIDI, только для Леонардо/Микро)
  • MIDIUSB – ещё одна библиотека для MIDI (USB-MIDI, только для Леонардо/Микро)
  • HIDUINO – набор инструментов для создания USB MIDI устройства
  • HID – очень мощная библиотека для создания HID устройств (мыши, клавиатуры, геймпады и другие USB контроллеры)
  • ArduinoJoystickLibrary – ещё одна библиотека для создания полноценного HID геймпада на Leonardo/Micro (ATmega32U4)
  • CPPM – библиотека для организации связи по протоколу CPPM (например RC приёмник Orange R615X)
  • PPMEncoder – декодирование и генерация PPM сигнала для RC моделей
  • PWMread – статья + библиотека для чтения PWM сигнала с приёмников RC моделей
  • TVout – библиотека для вывода графики на экран телевизора через вход AV.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Описание
  • X10 – библиотека для общения по протоколу X10 по линии питания 220V. Описание тут
  • NicoHoodProtocol – универсальный протокол связи по проводу

Некоторое железо


  • GyverStepper – высокопроизводительная библиотека для управления шаговым мотором
  • AccelStepper – более интересная и качественная замена стандартной библиотеке Stepper для контроля шаговых моторчиков. Скачать можно со страницы разработчика, или вот прямая ссылка на архив.
  • AccelMotor – моя библиотека для управления мотором с энкодером (превращает обычный мотор в “шаговый” или сервомотор)
  • ServoSmooth – моё дополнение к стандартной библиотеке Servo, позволяющее управлять сервоприводом с настройкой максимальной скорости движения и разгона/торможения (как в AccelStepper, только для серво). Must have любого любителя серво манипуляторов!
  • CapacitiveSensor – библиотека для создания сенсорных кнопок (из пары компонентов рассыпухи). Описание
  • ADCTouchSensor – ещё одна версия библиотеки для создания сенсорных кнопок. Есть ещё одна, так, на всякий случай
  • TouchWheel – библиотека для создания сенсорных слайдеров и колец
  • Buzz – детектор присутствия на основе всего лишь одного провода! (измеряет ЭМ волны)
  • Bounce – библиотека антидребезга для кнопок и всего такого. Сомнительная полезность, но почитайте описание
  • oneButton – библиотека для расширенной работы с кнопкой. На мой взгляд неудобная
  • GyverButton – моя библиотека для расширенной работы с кнопкой. Очень много возможностей!
  • AdaEncoder – библиотека для работы с энкодерами
  • GyverEncoder – моя библиотека для энкодеров с кучей возможностей, поддерживает разные типы энкодеров
  • RTCLib – лёгкая библиотека, поддерживающая большинство RTC модулей
  • OV7670 – библиотека для работы с камерой на OV7670
  • IRremote – базовая библиотека для работы с ИК пультами и излучателями
  • IRLib – более расширенная версия для работы с ИК устройствами
  • IRLremote – самая чёткая библиотека для ИК пультов, работает через прерывания.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника 100% отработка пульта
  • keySweeper – почти готовый проект для перехвата нажатий с беспроводных клавиатур
  • USB_Host_Shield – позволяет Ардуине работать с геймпадами (PS, XBOX) и другими USB устройствами
  • Brain – библиотека для работы с NeuroSky ЭЭГ модулями
  • TinyGPS – шустрая библиотека для работы с GPS модулями
  • GyverRGB – моя библиотека для работы с RGB светодиодами и лентами
  • FadeLED – библиотека для плавного (ШИМ) мигания светодиодами с разными периодами
  • CurrentTransformer – измерение силы тока при помощи трансформатора (катушки) на проводе. Читай: токовые клещи
  • LiquidCrystal-I2C – библиотека для LCD дисплеев с I2C контроллером. Разработчик – fdebrabander
  • LiquidCrystal-I2C – библиотека для LCD дисплеев с I2C контроллером. Разработчик – johnrickman. Предыдущая вроде бы лучше
  • LiquidTWI2 – быстрая библиотека для LCD дисплеев на контроллерах MCP23008 или MCP23017
  • LCD_1602_RUS – библиотека русского шрифта для LCD дисплеев
  • LCD_1602_RUS_ALL – новая версия предыдущей библиотеки с поддержкой украинского языка
  • u8glib – библиотека для работы с монохромными LCD и OLED дисплеями
  • ucglib – библиотека для работы с цветными LCD и OLED дисплеями
  • Adafruit_SSD1306 – ещё одна библиотека для OLED дисплеев
  • Adafruit-GFX-Library – дополнение для adafruit библиотек дисплеев, позволяет выводить графику
  • SSD1306Ascii – самодостаточная и очень лёгкая библиотека для вывода текста на OLEDы
  • NeoPixelBus – библиотека для работы с адресной светодиодной лентой, адаптированная под esp8266 (NodeMCU, Wemos и др.).
  • microLED – лёгкая и простая библиотека для работы с адресной лентой
  • Gyver433 – лёгкая библиотека для отправки любых данных через радио модули 433 МГц
  • rc-switch – библиотека для работы с радио модулями 433 МГц и разными протоколами связи

Работа с данными, фильтры


  • FFT – быстрое преобразование Фурье (раскладывание звука в спектр)
  • fix_FFT – говорят пофикшенная библиотека FFT
  • FHT – быстрое преобразование Хартли (как Фурье, только ещё быстрее)
  • GyverFilters – несколько очень эффективных фильтров данных (бегущее среднее, медиана, упрощённый одномерный Калман, AB фильтр
  • TinyEKF – быстрый облегчённый вариант фильтра Калмана
  • filtering-library – несколько фильтров данных
  • Gaussian – фильтр Гаусса
  • aJson – работа с данными в формате JSON.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Есть ещё Arduino JSON библиотека, и парсер потока JSON данных
  • PID – самая известная библиотека ПИД регулятора. Для неё есть дополнение – автонастройка (автотюн) параметров регулятора
  • GyverPID – моя версия PID регулятора, на мой взгляд более компактная и удобная в использовании
  • GyverRelay – библиотека релейного регулятора с гистерезисом и обратной связью по производной
  • CryptoSuite – несколько примеров шифрования данных известными шифрами
  • AESlib – библиотека для работы с AES шифрованием
  • LinkedList – работа с типом данных “связанный список”, читайте на Хабре
  • FixedPointsArduino – работа с типом данных “с фиксированной точкой” (десятичные дроби, но быстрее вычисляются)

Системные штуки

Работа с памятью


  • EEPROM – стандартная библиотека для работы с EEPROM. Рекомендую использовать более удобную EEPROMex
  • EEPROMex – более удобная библиотека для работы с EEPROM памятью. Описание
  • EEPROMWearLevel – “менеджер” EEPROM памяти, следит за количеством перезаписи ячеек
  • MemoryFree – библиотека для изучения текущей занятости SRAM памяти. Описание
  • EEWrap – библиотека позволяет использовать EEPROM как оперативную память (SRAM), т.е. для хранения переменных
  • Flash – библиотека позволяет удобно хранить/читать любые данные во Flash памяти микроконтроллера (массивы, строки с текстом…)
  • PGMWrap – ещё одна мощная библиотека для записи/чтения данных во Flash память
  • optiboot_flash – модифицированный загрузчик OptiBoot, в который добавлена возможность работать с Flash памятью во время выполнения кода (считай расширение SRAM за счёт Flash!)

Работа с пинами


  • DirectIO – более быстрая альтернатива стандартных функций чтения/записи состояния пина
  • AnalogReadFast – быстрый вариант чтения аналогового пина (21 мкс)
  • CyberLib – крутой сборник быстрых аналогов функциям Ардуино, читайте описание. Примечание: автор этой открытой библиотеки не любит, когда ей пользуются в своих проектах, так что аккуратнее.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника
  • GyverHacks – сборник быстрых аналогов функций Ардуино, не таких быстрых, как у CyberLib, но более привычный в использовании. Изменение частоты/разрядности ШИМ
  • SoftPWM – делаем софтверный ШИМ на разных пинах
  • PWM – библиотека, позволяющая задавать частоту ШИМ
  • GyverPWM – мощная библиотека для расширенной генерации ШИМ (только для ATmega328)
  • PinChangeInt – делаем прерывания на любом пине. Как так? Есть описание
  • PinChangeInterrupt – ещё одна библиотека (лучше), позволяющая ловить прерывания на любом пине
  • analogComp – работа с аналоговым компаратором микроконтроллера

Глубинные настройки


  • GyverHacks – помимо описанного выше, тут есть некоторые глубинные настройки, измерение опорного напряжения и температуры ядра (для ATmega328)
  • GyverTimer012 – лёгкая библиотека для управления прерываниями на всех трёх таймерах ATmega328
  • directTimers – библиотека для расширенного ручного управления таймерами на ATmega328, раскрывает все возможности и настройки таймеров
  • directADC – библиотека для расширенного ручного управления АЦП и компаратором на ATmega328, раскрывает все возможности и настройки АЦП
  • GyverPower – самая лёгкая и универсальная библиотека для управления сном, периферией и системным клоком
  • Low-Power – мощная библиотека для управления энергосбережением и спящим режимом
  • narcoleptic – ещё одна очень простая в использовании библиотека спящего режима
  • SoftwareReset – доступ к перезагрузке Ардуино “из скетча”
  • WatchDog – библиотека для работы со “сторожевым псом”, перезагружающим МК в случае зависания. Ещё вариант
  • Adafruit-Trinket-USB – библиотека эмуляции USB для ATtiny85 (плата Digispark). Имитирует клавиатуру/мышь
  • TrinketHidCombo_MEGA328 – библиотека эмуляции USB для ATmega328 (платы UNO/Nano/Pro Mini). Имитирует клавиатуру/мышь. Пример есть на форуме. Оригинальный пост на форуме. Скачать с FTP сайта. Скачать с облака Mail.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Скачать с Яндекс Диска.
  • DMBS AVR lib – набор лёгких и быстрых базовых функций для работы с МК без ядра (аналог avr libs)
  • LUFA – лёгкий USB фреймворк для AVR

Ядра и загрузчики


  • megaTinyCore – мой вариант ядра для плат с ATmega168/328 на борту (UNO, Nano, Mini), основан на оригинальном ядре Arduino, стандартные функции многократно ускорены и облегчены. Рекомендуется для тяжёлых и требовательных к скорости проектов.
  • optiBoot – крутой загрузчик для Ардуино, более быстрый, лёгкий и функциональный
  • HoodLoader – загрузчик для МК 16u2 с поддержкой HID (читай: превращает оригинальную UNO в аналог Leonardo с поддержкой HID)
  • ArduinoXInput_AVR – ядро для плат на базе ATmega32U4 (Leonardo, Micro), превращающее плату в контроллер с поддержкой XInput (геймпад от Xbox). Для создания игрового контроллера также понадобится библиотека ArduinoXInput. Есть гайд на английском
  • GyverCore – лёгкое и быстрое ядро для ATmega328 (Arduino NANO), которое разработали мы с коллегой. Лёгкое и быстрое, возможность работы без загрузчика и широкий выбор вариантов тактирования и вообще системных настроек.
  • MiniCore – ядро для поддержки микроконтроллеров ATmega328, ATmega168, ATmega88, ATmega48 и ATmega8, основано на optiBoot. Одна из основных фишек – поддержка внутреннего тактового генератора!
  • MicroCore – ядро для поддержки микроконтроллеров ATtiny13, ATtiny13A and ATtiny13V с выбором частоты внутреннего тактового генератора
  • ATTinyCore – ядро для поддержки микроконтроллеров ATtiny 441/841, 44/84, 45/85, 461/861, 48/88, 828, 1634, 87, 167, опять же на базе крутого OptiBoot.
  • megaTinyCore – ядро для поддержки микроконтроллеров ATtiny 3217, 1617, 817, 417, 3216, 1616, 816, 416, 1614, 814, 414, 214, 412, 212, 1607, 807, 1606, 806, 406, 1604, 804, 404, 204, 402, 202. Новые модели шьются по UPDI, по этой теме читайте отличную статью на русском языке.
  • nanoBoot – лёгкий (512 байт) загрузчик для ATmega32xx4 с поддержкой HID

Менеджеры задач и потоков


  • ArduinoThread – библиотека для создания “потоков” – отдельно выполняемых задач по таймеру или как-то ещё
  • EventManager – библиотека для работы с событиями (опять-же таймер-вашего-кода)
  • Arduino-fsm – ещё один менеджер задач, позволяющий писать чёткий понятный код с кучей задач, выполняющихся по таймеру
  • Automaton – ещё один фреймворк для написания скетчей с задачами и таймерами.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Есть вики
  • FreeRTOS – операционная система реального времени для Ардуино. Задачи, потоки…
  • Arduino_FreeRTOS – ещё одна версия RTOS
  • GyverRTOS – моя простенькая RTOS с режимом сна (на основе библиотеки Low-Power)
  • DeepSleepScheduler – менеджер задач со встроенным режимом сна

Звук и речь


  • Talkie – библиотека синтеза звука речи для создания говорящих девайсов
  • Mozzi – большая библиотека для генерации различных звуков
  • uSpeech – библиотека распознавания речи
  • TMRpcm – библиотека для воспроизведения звуковых файлов .WAV с карты памяти
  • toneAC – более продвинутая версия стандартной tone() для генерации звуковой частоты. Скачать сами файлы можно тут
  • DFPlayer – библиотека для работы с MP3 модулем DFPlayer mini
  • WTV020SD16P – работа со звуковым модулем WTV020SD16P

Разное


  • menusystem – мощный инструмент для создания меню с кучей примеров
  • LCD_Menu – готовый инструмент для создания меню на LCD Дисплеях
  • LiquidMenu – ещё один фреймворк для создания меню на LCD
  • MENWIZ – ещё один готовый вариант меню для LCD
  • MicroDebug – библиотека для удобной отладки кода
  • hoverboard-hack – немного не в тему, но это инструкция по хакингу платы ховерборда для использования её в своих целях

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


4.8
/
5
(
24

голоса
)

Шаг 9. Одноуровневое меню для дисплея MAX7219

         Ну вот, наконец — то мы добрались до такой интересной темы как построение меню для электронного устройства, в данном случае, меню будет построено и адаптировано для наших часов.

         До этого, в каждом шаге, мы описывали подключение различных устройств к плате Arduino, также были приведены тестовые скетчи для испытаний этих самых устройств. И вот теперь, перед тем как собрать всё это воедино, нужно сконструировать меню, листая которое на дисплее, мы будем иметь доступ к управлению и настройке всех подключённых модулей.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Конечно же, в нашей работе не обошлось и без ограничений, очень сильно нас ограничивает семисегментный дисплей на базе драйвера MAX7219. Как вы уже поняли из предыдущих статей, данные типы дисплеев не дают особо разогнаться при генерации каких либо пользовательских символов. Всё упирается именно в эти самые семь сегментов дисплея. Но всё же, наше меню выжмет максимум из данных нам возможностей дисплеями такого типа. Наши основные действующие компоненты — дисплей MAX7219, модуль поворотного энкодера KY-040, модуль часов реального времени DS1302(можно пока и без него, но если вы следовали предыдущим шагам, то он у вас скорее всего подключен). Тип меню — однострочное, чтобы войти в него надо произвести нажатие на центральную ось энкодера, сразу же после этого на дисплее(в левой части) отобразится первый пункт меню. Вращением рукоятки поворотного энкодера, можно изменять значение текущего пункта меню(параметра в правой части дисплея). После установки значения, произведя нажатие на центральную ось энкодера, мы записываем накрученное значение в выбранный параметр и переходим к настройке следующего параметра. Итак, краткая таблица, поясняющая всё вышеописанное:

         Очень важное замечание — построение меню не имеет смысла без основного домашнего экрана. На домашний экран(так называемый Home Screen) нужно выводить всё то, что должно отображаться для работы в штатном режиме, это дата, температура, время, в общем всё то, что является полезной информацией для пользователя. В самом меню, пользователю уже даётся выбор, что и как отображать, и после полного пролистывания меню, устройство возвращается в режим отображения домашнего экрана. В нашем случае, на домашнем экране будет отображаться простая светящаяся полоска. Она будет как бы индикатором режима домашнего экрана. На этом этапе, нам просто нужно показать функционал нашего меню на экране. Но конечно же в конце статьи будет выложено видео, в котором можно будет воочию посмотреть на работу меню.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Далее, ниже приводится таблица с полным списком всех элементов меню:

         Всего в нашем меню 12 элементов(параметров) которые можно настроить, но в первой таблице 12-й параметр не описан, а только лишь приведена ссылка на таблицу №2, и вот почему, 11-й параметр(DISP) меню имеет четыре варианта настройки. Это:

          В зависимости от выбранной настройки, 12-й параметр будет отображен следующим образом, смотрите таблицу:

         Итак, возможно пришло время скетча, но увы, скетч получился слишком большим в формате статьи, и поэтому его было решено выложить в архиве на отдельном ресурсе. Ссылка для скачивания. Библиотеки используемые в скетче — TimerOne.h, LedControl.h, iarduino_RTC.h. Ну и конце — обзорное видео по статье, как работает меню, функционал и настройки.

         А вот так выглядит активация, установка и настройка будильников(в нашем меню их два)

Arduino IDE: разбираемся с меню Tools и некоторыми другими функциями.

Итальянцы молодцы. Запустили в мир DIY настоящего монстра. С появлением экосистемы Arduino весь рынок цифрового DIY получил мощнейший толчок. Тысячи, сотни тысяч, миллионы пользователей принялись покупать оригинальные и совместимые платы для их последующего программирования и использования в своих поделках. Причина такой популярности в первую очередь связывают с низким порогом для входа в эту среду. Вам не нужно тратить много денег на приобретение плат: открытый стандарт дал дорогу на рынок множеству последователей и копировщиков. Вам так же не стоит сильно заморачиваться над программированием: поставляемая «в комплекте» Arduino IDE упрощена настолько, насколько это возможно.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Пользователь просто пишет код и не задумывается о настройках компилятора, о том, что программировать при помощи Arduino IDE можно разными программаторами, а иногда и вообще голые микросхемы.

И вот, наступает момент, когда стандартная Arduino IDE становится тесновата, а ее неудобство начинает просто выбешивать, особенно, если пользователь знаком с более продвинутыми средами разработки по другим платформам и языкам программирования. Кто-то начинает мигрировать на что-то более интересное, например, на Atom или VS.Code в смеси с PlatformIO, а кто-то старается выжать из Arduino IDE все, что только можно.

Сегодня я выступлю как раз в роли подобного «особо интересующегося персонажа» и попробую вместе с читателем разобраться чуть-чуть побольше в тонкостях Arduino IDE. Все ниженаписанное более-менее соответствует версии 1.8.9 Arduino IDE.

Темная тема для Arduino IDE

Очень многих раздражает простенькое оформление Arduino IDE в корпоративных цветах Arduino. Все такое белое и «слепое». Долго работать в таком цветовом решении не всегда комфортно, особенно если это ночь, вокруг темно и все спят.

Вариант темной темы под Mac. Скриншот с GitHub.

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

Меню Sketch

Я, как и большинство других пользователей Arduino IDE, загружаю свои скетчи в платы при помощи панели инструментов. Щелкнул на кнопку загрузки и скетч начал заливать в плату. Удобно. Но, как оказывается, меню Sketch (здесь и далее я буду использовать английский вариант интерфейса Arduino) содержит не мало интересных и полезных новшеств. Итак, кратенько пробежимся по ним.

Меню Sketch Arduino IDE

Пункты меню Very/Compile и Upload стандартны и знакомы всем.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Именно они используются для проверки правильности кода и последующей нормальной загрузки. А вот пункт Upload using programmer для меня до недавнего времени оставался Terra incognita. Как оказалась, данный пункт необходимо применять при загрузки скетча без использования загрузчика (bootloader), но с использованием полноценного программатора. О загрузчиках и программаторах поговорим немного позже, пока же просто запомним этот пункт.

В этом же меню присутствует весьма полезный пункт Export compiled Binary. Применяется он в том же направлении, что и Upload using programmer. По умолчанию Arduino IDE компилирует исходный код в файл, который сохраняется во временную директорию и после завершения загрузки она должна очищаться. Временная директория находится в каких-то дебрях файловой системы, а искать там скомпилированный файл с непонятным наименованием — то еще удовольствие. Так вот функция Export compiled Binary как раз и применяется для того, чтобы сохранить уже откомпилированный скетч в виде бинарных-файлов в папке самого скетча. В дальнейшем скомпилированные скетчи могут быть прошиты при помощи внешнего программатора или же USB-TTL преобразователя.

Кстати, просмотреть папку скетча можно все через тоже самое меню Sketch при помощи пункта Show Sketch Folder. Кстати, при вызове Export compiled Binary компилируется сразу два файла: с и без загрузчика. Для чего это нужно, опять же немного ниже. При компилировании при помощи Export compiled Binary следует учитывать, что примеры из поставки Arduino так откомпилировать не выйдет. Папки, в которых хранятся эти скетчи имеют режим только для чтения, а IDE необходимо куда-то записать скомпилированные файлы (обычно в таком случае возникает ошибка «Export canceled, changes must first be saved.»). Поэтому тренируемся на своих собственных скетчах или же пересохраняем скетч в новую папку.

Меню Tools

Меню Tools в Arduino IDE дает куда больше интересного и полезного, нежели Sketch. Более того, сам вид меню зависит от того, какую платформу вы выбрали в качестве целевой.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника

Меню Tools Arduino IDE с выбранным микроконтроллером семейства AVR.

Начнем с общего и тех пунктов, которые есть в оригинальных платах, построенных на микроконтроллерах Atmel (ее все же купила Microchip).

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

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

Serial Plotter противовес Serial Monitor предназначен для вывода графика из данных выдаваемых в последовательный порт. Все, что от вас требуется для построения графика — выплевывать в порт цифры при помощи Serial.println(). Неплохой пример использования плоттера приведен на страницах проекта wikihandbk.

Приведенные выше пункты стандартны. Их использование, вкупе с Library Manager должны быть известны даже неопытным пользователям. А дальше попробуем погрузиться в чащобы Arduino IDE и мир программирования микроконтроллеров.

WiFi101 / WiFiNINA Firmware Updater

Сетевое взаимодействие для оригинальных плат Arduino всегда было ахиллесовой пятой. Их просто нет в стандартной поставке, а все решения в виде внешних плат настолько ди́ки, что просто пропадает всякое желание их использовать.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника По этой причине многие используют платы на основе ESP8266, которые дешевле, мощнее и сразу с WiFi на борту. Но итальянцы, да и ардуинщики вообще, ребята упорные, поэтому вместо того, чтобы переходить на нормальные платы, продолжают изобретать очередные ужасы, к которым и относятся WiFi101 и WiFiNINA.

WiFi 101 Shield. Взято откуда-то с просторов сети.

Собственно этот пункт меню предназначен для обновления прошивки и сертификатов соответствующих плат.

Arduino Uno с платой WiFi под библиотеку WiFiNINO

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

ESP Exception Decoder

Плагин для Arduino IDE под непонятным названием ESP Exception Decoder предназначен для более легкой отладки программ под платформу ESP8266. Exception или «исключение» обозначает возникновение ошибочной ситуации которая не была корректно обработана кодом. Например, деление на 0 однозначно вызовет исключение, и работа программы будет прервана. В языке, на котором программируют в Arduino IDE нет возможности использовать блоки try {} catch {}, соответственно работа с исключениями невозможна (точнее по синтаксису он есть, но компилятор его отвергнет, по крайней мере для плат на основе AVR). Программист обязан предусматривать и проверять данные и предупреждать возникновение подобных ситуаций. Иначе результат может быть непредсказуемым.

На первоначальной экосистеме Arduino, построенной на Atmel AVR (об этом опять же дальше) нет места исключениям. И даже несмотря на то, что язык, применяемый для программирования в Arduino IDE есть ни что иное как диалект C++, в нем так же нет исключений и они не поддерживаются компилятором, ибо в AVR нет исключений, слишком там мало места для еще и исключений. Сильно жизнь это не осложняет, просто программы пишутся куда более аккуратно.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника А вот в экосистеме ESP, в том числе и под Arduino, исключения присутствуют.

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

Вот такую вот информацию сохраняет esp8266 после перезагрузки. В этом случае произошла перезагрузка по питанию.

Система в чипах ESP более замороченная, чем в AVR и при возникновении нештатной ситуации выплевывает в последовательный порт некий стек адресов, по которым можно добраться до истинной причины возникновения ошибки. Но выдаются адреса в совсем нечитаемом человеком виде. Чтобы сопоставить строчку в исходном коде с конкретным адресом, выданным в стеке, и был придумал ESP Exception Decoder.

Намеренный вызов исключения на WeMos Mini

После возникновения ошибки необходимо перенести стек в декодировщик и он выдаст «путь» по которому можно дойти до строки в годе где и возникла исключительная ситуация. В некоторых случаях функция исключительно удобная. Ознакомиться с подробной инструкцией по применению декодировщика можно на страничке проекта ESP Arduino Core.

Get Board Info

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

Burn Bootloader

Наконец-то мы начинаем подбираться к действительно интересным пунктам меню. Начнем с пункта загрузки загрузчика (Burn Bootloader). Но для начала попытаемся понять, что такое bootloader и для чего он нужен. В старые далекие ламповые времена тоже существовали программируемые микросхемы. Но программировались они весьма жестким способом.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Использовался специальный программатор, в который вставлялась микросхема, происходило таинство, и микросхему можно было использовать в оборудовании.

Сей способ с одной стороны достаточно прост, но с другой он очень неудобен. Ведь чтобы сменить прошивку на уже прошитой микросхеме, если это вообще возможно, ее необходимо вытащить из устройства, установить в программатор и повторить процедуру. Что далеко не всегда возможно, так как микросхема может быть впаянной в плату и без специализированного оборудования достать ее оттуда нельзя или же само устройство летает на спутнике. Именно для этих целей была придумана методика ISP (In-System Programming), что в переводе означает ни что иное как «внутрисхемное программирование». ISP не стоит путать с SPI (Serial Peripheral Interface). ISP это именно внутрисхемная прошивка, а SPI это стандарт взаимодействия между устройствами. И пусть даже вас не вводят в заблуждения сильно похожие разъемы и наименования контактов. ISP и SPI это разные вещи.

В общем случае ISP позволяет программировать микроконтроллер через любой его интерфейс и даже программироваться самостоятельно с изменением своего кода посредством своего собственного же кода. Но для осуществления подобных фокусов требуется некая программа, которая будет сидеть в микроконтроллере и управлять этим программированием. Именно она и называется загрузчиком (bootloader). И именно благодаря ей есть возможность прошивать микроконтроллеры просто подключив их к USB-порту, или же применив простейший программатор на параллельном порту компьютера (у кого они еще остались), а в некоторых случаях обновление прошивки можно загружать вообще по воздуху применяя прием OTA (Over The Air).

Вообще микроконтроллер можно прошить и без загрузчика. Именно для этих целей и предназначен соответствующий пункт в меню Sketch. В этом случае места под ваш скетч в памяти микроконтроллера будет больше. Однако, в последствии уже нельзя будет загрузить обновление прошивки обыкновенным путем.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Придется при помощи программатора либо прошить загрузчик, либо далее прошивать прошивку без загрузчиков.

Для Arduino существует несколько вариантов загрузчиков. Стандартный, который прошивается еще при изготовлении платы Arduino, многие не любят. Дескать он притормаживает при загрузке устройства в ожидании передачи данных для прошивки и только спустя десять секунд запускает ваш прошитый скетч. Дело в том, что некоторые платы Arduino, в которых не реализован механизм DTR (Data Terminal Ready) / RTS (Ready To Send) действительно нужно прошивать очень быстро иначе bootloader просто передаст управление той микропрограмме, что уже находится в микропроцессоре. Вот и начали все, кому не лень, модифицировать штатный загрузчик или же писать свой собственный.

Стандартные загрузчики для плат Arduino

Где брать загрузчики? Вообще стандартный загрузчик можно загрузить прямо из Arduino. Для этих целей и предназначен пункт меню Burn Bootloader. А сами загрузчики из стандартной поставки можно найти в папке с установленным Arduino в поддиректории hardware. Если же вы используете платы отличные от Arduino AVR, например, ESP3288, то все дополнительные загрузчики и прочие инструменты можно найти в личном профиле пользователя (AppData\Local).

Загрузчик для плат семейства ESP

Но если вы скачиваете дополнительные загрузчики и хотите установить их в Arduino IDE, то можно использовать папку hardware в вашем каталоге для скетчей. После перезагрузки IDE загрузчики из этой папки так же будут доступны, однако не следует забывать про файл boards.txt который должен присутствовать в подпапках папки hardware. Если у вас вдруг нет текстового редактора или же вы испытываете трудности с редактированием boards.txt то есть решение. Один энтузиаст создал специальную программу Arduino BOARDS.TXT Editor, которая позволяет с легкостью вносить изменения в указанный файл.

Так, где же брать эти самые альтернативные загрузчики? Искать в сети. Поисковики выдают просто немыслимое количество разнообразных вариантов.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Для начала можно остановиться на OptiBoot, попробовать калькулятор «формирующий» загрузчик под конкретную плату или начать просматривать ссылки с официальной страницы загрузчиков Arduino.

И подводя промежуточный итог, если нам нужно загрузить прошивку без загрузчика (так для нее останется больше места) в микроконтроллер, то подключаем его к программатору и загружаем прошивку через Sketch – Upload Using Programmer. Если же хотим вернуться к обычной и удобной загрузке скетчей через среду Arduino по USB и без прочих танцев африканских народов, то прошиваем загрузчик обратно (или же мы купили микроконтроллер без загрузчика) уже посредством Tools – Burn Bootloader. В обоих случаях незабываем про корректный выбор платы, программатора и прочих настроек.

И еще раз, если в плате установлен загрузчик, то после перезагрузки платы он первым получит управление, послушает немного выделенные порты в надежде если вдруг там кто-то хочет залить прошивку. Если признаков заливания прошивки нет, то он со спокойной душой передает управление основной программе. А если в плате нет загрузчика, то тогда управление после перезагрузки сразу передается основной программе. Все просто, по крайней мере на пальцах.

AVR и прочие

Для лучшего понимания дальнейшей информации я хочу привести некоторые сведения о самих микроконтроллерах с которых пошло-поехало Arduino. Мы уже знаем, что оригинальные Arduino построены на микроконтроллерах (больших интегральных схемах, которые можно программировать и которые могут работать и сами по себе без внешней обвязки, подавай только напряжение) от компании Atmel (нынче Microchip).

У компании Atmel наработано несколько линеек микроконтроллеров, но нас в первую очередь интересует линейка AVR (кстати, аббревиатура AVR официально никак не расшифровывается), так как именно на ней и построены оригинальные Arduino. Линейка появилась аж в 1996 году и, пожалуй, была одна из первых на рынке предложившей решение, где микроконтроллер и память (ОЗУ и ПЗУ) расположены в рамках одного единственного кристалла.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Повторюсь, чтобы система работала достаточно только одной микросхемы AVR на которую подается питание. Все остальное у нее уже есть внутри.

AVR линейка делится на несколько основных групп:

  • tinyAVR – с уменьшенным количеством линий ввода-вывода, уменьшенным количеством памяти всех типов, обозначается как ATtinyxxx.
  • megaAVR – увеличенное количество памяти всех типов, увеличенное количество линий ввода-вывода, расширенный набор для периферии и тому подобное. Обозначается как ATmegaxxx.
  • XMEGA – ко всему увеличенному у megaAVR тут еще увеличили памяти и добавили встроенный контроллер для быстрой работы с памятью. Обозначается как ATxmegaxxx.

Именно микросхемы AVR обеспечивают поддержку таких функций как АЦП, ШИМ, SPI, I2C и прочих. Arduino же просто их использует (хотя с появлением более мощных микроконтроллеров, тех же esp8266, появилась возможность эмуляции вышеназванных функций программным способом).

И вопреки возможности прошивки AVR методом ISP посредством стандарта SPI через установленный загрузчик, для программирования микроконтроллеров применяется великое множество программаторов. Как простых и собираемых на коленке, так и сложных с внешним питанием и обилием всевозможных функций. Но прежде, чем мы перейдем к рассмотрению программаторов следует пояснить еще один момент. При программировании микроконтроллера с использованием внешнего программатора (без использования загрузчика) необходимо четко понимать, что такое fuses или не трогать настройки, связанные с ними, если такого понимания нет. Fuse/фьюзы/предохранительные биты — это настройки внутри микроконтроллера, в частности AVR. Они прошиваются точно так же, при помощи внешнего программатора (без применения ISP). И обычно применяются для настройки самого микроконтроллера, например, можно включить или отключить возможность самопрошивки контроллера, включение или отключение внешнего сброса устройства (и соответственно возможности его прошивки через bootloader), включение и отключение очистки памяти при перепрограммировании чипа и тому подобное.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Подробнее ознакомиться с фьюзами можно (и нужно) в документации к конкретному контроллеру. К чипу ATmega328, одному из самых популярных чипов на Arduino, документация доступна на официальном сайте производителя.

Programmer:

Пожалуй, что пункт меню Tools под кодовым названием Programmer является самым таинственным местом всего Arduino IDE. Информации по данному пункту очень мало, и она настолько скудна что может привести к разочарованию даже самого стойкого прагматика. Очевидно, что данный пункт содержит выбор программаторов для программирования плат. И кажется, что одну и ту же плату можно запрограммировать кучей разных способов и программаторов. Но, а что же нам на этот счет говорит документация к Arduino IDE? А она нам вещает о том, что данный пункт меню Tools имеет смысл только при прошивке загрузчика. Во всех остальных случаях используемый «прошивальщик» зашит в тот самый boards.txt, что обсуждался немного ранее. Причем для микроконтроллеров AVR это всегда avrdude, а для ESP это всегда esptool. Кроме того, для плат AVR может применяться, в штатной поставке, целых два различных протокола «закачки» прошивки в микроконтроллер: avr109 и arduino. Разные протоколы, как не сложно догадаться, применяются для разных загрузчиков, установленных в конкретные микроконтроллеры.

В штатной поставке Arduino IDE с подключенной инфраструктурой ESP для прошивки загрузчика можно применить несколько типов программаторов. Кратко пройдемся по ним всем. По факту все AVR в Arduino IDE прошиваются посредством приблуды AVRDUDE (бывший AVRProg) и различия между «программаторами» только в используемом протоколе и настройках AVRDUDE. На текущий момент AVRDUDE поддерживает 39 программаторов, но в Arduino IDE используется только 14. Ознакомиться с настройками каждого из них можно в файле programmers.txt в той самой директории hardware, где складируется файлик boards.txt. Информация по настройкам для каждого из программатора доступна в файле avrdude.conf (располагается обычно в Arduino\hardware\tools\avr\etc) и в куцей документации к самому AVRDUDE.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника

AVR ISP

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

Отладочная плата Atmel STK500. Фото производителя.

Единственное, что хоть как-то проливает свет на данный программатор, так это то, что он по факту является частью STK500 (такая отладочная плата для AVR от Atmel) версии 1, которая подкачается к компьютеру посредством последовательно порта.

AVRISP mkII

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

Фирменный программатор AVRISP mkII. Фото производителя.

Тем не менее, он так же является частью отладочной платы STK500, но уже версии 2, которая подключается к компьютеру уже по интерфейсу USB. Хотя, по отзывам очевидцев и версия 1 может использовать с USB посредством конвертера COM-USB.

USBtinyISP

Это один из программаторов, который можно собрать своими руками, он прост и дешев, а в качестве «сердца» у него используется чип tinyAVR. Вот только возникает вопрос – как же его прошивать, если он сам и предназначен для прошивки AVR?

Тем не менее, программатор поддерживается Arduino IDE и весьма популярен. Программатор был разработан в Нидерландах, но в настоящее время поддерживается AdaFruit.

ArduinoISP и ArduinoISP.org

Что подразумевали под этими двумя программаторами разработчики Arduino IDE остается только гадать, да угадывать. Сайт ArudinoISP.org дает перенаправление на туториал на сайте Arduino.cc по использованию Arduino as ISP. Единственное отличие этих двух от Arduino as ISP только лишь используемый протокол.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Вероятно, что они были когда-то собраны в качестве поддержки особого загрузчика, а с течением времени исчезли с лица истории. По крайней мере в документации AVRDUDE никакого упоминания ни про arduinoisp ни про arduinoisporg просто нет.

USBasp

Еще один простой программатор, который можно собрать дома на коленке. И он тоже построен на чипе от Atmel. Проект был развернут немецкий программистом, а затем подхвачен всем миром. Как и с USBtinyISP чип от Atmel для программатора необходимо запрограммировать.

Parallel Programmer

Данный тип программатора считается одним из самый простых, если не самым простым. По сути «параллельный программатор» — распиновка параллельного порта компьютера и соответствующее программное обеспечение.

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

Arduino as ISP

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

Для этого в плату Arduino закачивается скетч из примеров под именем ArduinoISP, соединяются проводки (между платой, в которую залит скетч и платой, которую нужно прошить), и прошивается загрузчик (не забываем выбрать программатор Arduino as ISP). Подробная инструкция доступна опять же на странице официального сайта Arduino.

Arduino Gemma

Если подходить формально, то Gemma это не программатор. Это микроскопическая плата от AdaFruit предназначенная для вшивания/встраивания в одежду/обувь. Она лишь частично совместима с Arduino, так как содержит очень мало вводов/выводов. Чтобы подключить ее к USB разработчику пришлось выдумать отдельный загрузчик, и отдельный PID для USB устройства. По этой причине прошивается Gemma как отдельный программатор (в реальности там встроенный USBtiny), имеет отдельный конфиг для AVRDUDE с жестко прописанным bootloader.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Другими словами, прошить этой платой ничего нельзя, но зато ее можно прошить саму загрузчиком.

BusPirate as ISP

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

Atmel STK500 development board

Та самая отладочная плата, что упоминается в AVR ISP и AVR ISP mkII. В Arduino IDE не делается различия между версиями и предполагается, что AVRDUDE самостоятельно определит версию протокола обмена и осуществит самонастройку. Если же этого не происходит, то в programmers.txt нужно четко прописать stk500v1 или stk500v2 в качестве применяемого протокола.

Atmel JTAGICE3 (ISP mode) и Atmel JTAGICE3 (JTAG mode)

JTAGICE3 — современное решение для отладки чипов семейств AVR, SAM и Cortex. Разумеется, только тех чипов, что поддерживают внутричиповую отладку. Попутно эта коробочка еще и программирует их всех.

Atmel JTAGICE3 отладчик/программатор.

Продукт актуальный, у производителя имеется документация. Разница между программаторами только в применяемых протоколах. В ISP режиме применяется протокол JTAG3ISP, а в JTAG просто JTAG3.

Atmel-ICE (AVR)

Так же активный продукт Atmel и его можно купить. Как и JTAGICE3 он позволяет не только производить отладку у чипов, поддерживающих такую функцию, так и программировать их. Для прошивки используется протокол atmelice_isp. В общем использовать программаторы на подобие JTAGICE3 или Atmel-ICE только для прошивки 8-битных микроконтроллеров это как стрелять из пушки по клопам.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Слишком уж мощные и дорогие решения для задачи, которая решается куда проще.

Обширное семейство ESP

Выше мы рассмотрели специфику прошивки контроллеров семейства AVR. Но при этом обойти не менее многочисленное и популярное семейство контроллеров ESP было бы просто некрасиво. Тем более, что при выборе одного из семейства, меню Tools значительно увеличивается в объеме. Пройдемся по меню и попробуем понять, что каждый из пунктов увеличенного меню означает. Здесь и далее я рассматриваю SDK ESP версии 2.5.0.

Меню Tools в Arduino IDE при выборе одной из плат семейства ESP.

Часть меню все же остается тем же самым, что и прежде, поэтому излишне повторяться не будем.

Upload speed

Позволяет выбрать скорость, с которой будет происходить загрузка прошивки и других частей в микроконтроллер. Платы семейства ESP могут комплектоваться мегабайтами памяти (в то время как AVR речь идет в лучшем случае о сотнях килобайт) и загрузка на скорости 9600 может занять непростительно долгий отрезок времени.

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

CPU Frequency

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

Flash Size

Здесь указывается каким образом разделять всю доступную ПЗУ для хранения кода программы и для файлов. Микроконтроллеры ESP поддерживают память SPIFFS (Serial Peripheral Interface Flash File System). По сути, SPIFFS это файловая система для последовательного доступа. И у программиста есть возможность определить, сколько памяти отводить для файловой системы (туда можно записать, например, HTML-файлы или картинки) и сколько для своего скетча. Но тут есть некоторая тонкость. На текущий момент, насколько мне известно, как минимум платы EPS8266 не могут закачать скетч размерностью более 1 мегабайта.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Есть обходные пути, но ведь еще нужно умудриться написать скетч, который в компилированном виде будет занимать более 1 мегабайта. Поэтому рекомендуется использовать как можно больший SPIFF, дабы уменьшить время загрузки скетча.

В тоже самое время есть сведения от потерпевших, что платы ESP32 могут испытывать проблемы связанные с «не хватает места для скетча». Но проблемы эти всего лишь из-за еще сырой поддержки плат EPS32 в инфраструктуре ESP для Arduino.

Debug port

Пункт может принимать значения Disabled, Serial и Serial1. Данная настройка предназначена для вывода отладочной информации в последовательный порт (хотя включить ее можно и программно, например, через Serial.setDebugOutput(true)). Если в скетче инициализируется соответствующий порт (Serial или Serial1), то в него могут выводиться отладочные сообщения, которые не мешают выводу в этот же порт другой информации.

При инициализации и включении вывода отладочной информации рекомендуется устанавливать максимальную скорость работы порта. В противном случае, при большом объеме вывода могут наблюдаться фризы исполнения программы или же сброс буфера вывода. Подробнее о выдаче отладочных сообщений можно прочитать в статье на сайте проекта ESP8266 Core.

У ESP обычно присутствует два последовательных порта. Первый, Serial использует UART0 и GPIO1 (TX) с GPIO3(RX). Второй, Serial1 использует UART1 и только GPIO2 (TX). Соответственно Serial1 не может быть использован на прием. Тем не менее, в обоих случаях есть возможность программного переназначения пинов, как и скорости, четности и прочих характеристик.

Debug Level

Настройка позволяет выделить те отладочные сообщения, которые важны пользователю. Выбор комбинаций оставляют огромное пространство для маневра, но при этом обязательно должна быть включена предыдущая функция.

lwIP Variant

Настройка предназначена для выбора варианта реализации сетевого стека IP. Прошу обратить внимание, тут именно lwIP (lightweight IP), первая буква L, а не i.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника

Вариант выбора IwIP

По умолчанию используется самый верхний вариант, уменьшающий использование памяти. Но если ваш микроконтроллер активно работает с сетью, то можно пожертвовать памятью и получить наивысшую скорость. Аналогично можно включить поддержку IPv6 или вернуться на стек версии 1.4, где такой поддержки не было вообще. Под features тут понимается всякого рода ICMP, IGMP и прочие навороты, без которых можно обойтись. Основная документация по версии ветки 2.х доступна на сайте разработчика. Постоянно растущий Wiki по теме lwIP доступен на страницах проекта FanDom.

VTables

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

  • Flash – постоянное запоминающее устройство, таблицы хранятся в файловой системе. Метод по умолчанию в репозитарии GitHub.
  • Heap – куча, оперативная память предназначенная для динамического выделения памяти.
  • IRAM – внутренняя память микроконтроллера.

Понятно, что самый быстрый способ хранения и обработки виртуальных таблиц это IRAM, а самый медленный Flash. Но тут следует так же смотреть на то, как активно работает программа с объектами, есть ли множественное наследование и как часто объекты создаются и уничтожаются. В обычных применениях такая таблица и вовсе может быть статической и отлично проживать на Flash, с другой стороны, она может быть весьма крупной и просто не влезать в IRAM (область ОЗУ для хранения кода программы).

Exceptions

Пункт меню позволяет включить или отключить использование исключительных ситуаций. О них мы уже рассуждали выше, в том числе и в разделе об ESP Exception Decoder. При включении исключений программист в коде уже может использовать структуры try {} catch {}, что увеличивает потребление памяти, но позволяет легче программировать сложные алгоритмы.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника Напомню, что try-catch будет работать только для плат семейства ESP. Отрадно замечать, что программисты работающие над библиотеками для семейства ESP для Arduino уже начали использовать механизм try {} catch {} в своем коде на GitHub.

Erase Flash

Пункт предлагает стирать внутреннюю память микроконтроллера в следующих пропорциях:

  • Only Sketch – стирает только пространство отведенное под скетч. Остальное остается нетронутым.
  • Sketch + WiFi Settings – пространство для скетча и настройки WiFi. Дело в том, что при подключении к точке доступа микроконтроллер запоминает параметры подключения и в следующий раз подключается к той же точке быстрее.
  • All Flash Contents – стирается все, включая файловую систему.

Прочее по ESP

В заключение статьи хотелось бы добавить, что при прошивке загрузчика в ESP всегда используется прошивальщик esptool. И всегда применяется один и тот же загрузчик eboot. Чтобы пользователь там не выставил в Programmer.

Итог

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

Однако, хочу надеться, что авторы Arduino IDE все же смогут удержать свое творение в приличных рамках и оставить его все таким же легким в освоении инструментом. Заодно хочу им напомнить, что документировать свое творение стоит постоянно иначе получается «не только лишь все, сегодня могут в завтра».

Update: разбираясь глубже с тем как настраивать свои собственные платы или же добавлять новые платы к Arduino IDE, наткнулся на исчерпывающую документацию по этому поводу.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника


Опубликовано автором kvv в следующих категориях:
DIY Soft не только лишь все статья


Поделиться ссылкой:

Коптильный комплекс на базе Arduino. Шаг 1 — Меню

Часть 1. Установка.
Итак, что у нас есть:

  • Arduino Mega2560
  • TFT Display for Arduino 3.95″ (ili9488)

В принципе даже не важно какой у нас контроллер, главное дисплей с разрешением 480×320 точек.

Что нам понадобится еще:

Ну вот собственно и все.

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

А вот с оборудованием (экраном) трудности есть… На мой скромный опыт, что не посылка то геморой…. Китайские братья, которые их продают, как правило ничего толком не понимают… Добиться от них совета по подключению очень трудно…

Но не все так плохо… этот вопрос уже достаточно подробно разжеван на форумах, да и отзывы почитайте на али. Там бывают добрые люди, которые после танцев с бубном напишут о своей победе….

Короче говоря, подключение дисплея это рулетка… как повезет… Работать экран будет, но время которое на это уйдет??? Да, есть варианты купить и не в Китае, пусть дороже но с поддержкой…

Если все прошло удачно, то у нас есть игрушка на которой работают всякие Демо-примеры. Мы их получаем с библиотеками.

Идем дальше:

  • Разместить скетч в папке с проектами Arduino.
    TARNET.RAR (10,44 КБ)

    Скачано: 395
  • Загрузить скетч в контроллер. Готово !!!!!!!!

Часть 2. Описание.

После загрузки скетча появился стартовый экран… Этот экран для режима ожидания.

Кстати, для понимания работы меню, нужно обозначить то, в каких режимах (переменная Status) работает сам комплекс.

Перечислю их:

  • 0-Выбор режима (Выбор программы готовки из 18 вариантов)
  • 1-Работа (Рабочее состояние)
  • 2-Настройка ( Изменения параметров системы и правка режимов приготовления)
  • 3-Готов (Комплекс готов к старту, программа выбрана)
  • 4-Ожидание (После включения питания, Промежуточный между 0 и 2)
  • 5-Ошибка ( Комплекс остановлен по ошибке)
  • 6-Правка (Коррекция параметров выбранной программы готовки)
  • 7-Управление (Прямое(ручное) управление оборудованием, ввод поправок)

Продолжим.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника

Из режима «Ожидание» у нас есть два пути:

  • Выбрать режим и запустить приготовление (с возможной поправкой параметров)
  • Уйти в настройки и ручное управление.

Посмотрим первый путь:

нажав на левую нижнюю кнопку получим экран выбора режимов

У нас есть возможность определить режим (после нажатия он обводится красным) и выбрать его для приготовления или начать его редактировать.

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

После выбора комплекс переходит в состояние «Готов», ну а у нас новый экран

Слева — отмена и возврат к ожиданию. Справа — Пуск. Начала работы
В средней части экрана мы видим температуры , Шапка экрана пока не заполнена, Там выводится наименование выбранного режима готовки. В центре — подробности приготовления, для каждого варианта свои… (пока отключены) Ну и время приготовления… Это обратный таймер, который показывает оставшееся время выполнения программы.

Нажимаем Пуск.

Комплекс перешел в режим «Работа». Пошел отсчет времени, на экране видны дополнительные параметры и иконки включенного в данный момент оборудования

На тестовой сборке они горят все.. но в реальности их 2-3 и смотрится не так насыщенно.

После истечения времени, происходит сброс и комплекс переходит в режим ожидания.

Вот такая «стиральная машина» получилась.. Мне кажется, что подобные манипуляции вполне доступны большинству современных людей. Ничего сложного……

А теперь для «гурманов»

Настройки.

Из состояния «Ожидание» нажав правую кнопку попадаем в список выбора Настроек. Он похож на список режимов, но действия немного иные..

Выбираем нужную нам настройку и жмем «Выбрать». Как видно на картинке, настроек сейчас 2 листа. Возможно этот список со временем увеличится…

Я не буду давать фото всех настроек, покажу несколько разных:

Управление вентиляторами :

Все также, тык на нужную кнопку и «Применить»

Как видно из фото, второй вентилятор отключен.Меню на ардуино: Страница не найдена — Ардуино РоботоТехника

Управление заслонками:

Видим инициализацию «0» положения и установку открытия (шаг 10%)

Установка погрешностей датчиков температуры:

Видим что сохраненные значения не выделяются а вновь измененные — красным… После «Применить» красный цвет пропадет…

Управление «Нагревателями»:

Видим 3 ступени мощности и отключение.. По нагревателям есть еще дополнительная страница с более продвинутым управлением и юстировкой.. Но об этом позже.. Тема объемная…

Ну и простое включение и выключение, таких устройств достаточно….

На этом обзор меню закончу.. Конечно через фотографии плохо воспринимается.. но видео монтировать не умею..

Что еще можно добавить, важного..

Не стоит пугаться разнообразия оборудования… Если есть только датчик температуры и эл. плитка.. Все это тоже будет работать… Просто некоторые элементы будут не доступны… Правда уже после выхода альфа версии прошивки.

Спасибо за внимание…..

P.S. У меня на экране как то странно фото отображаются.. то маленькие, то в скрепке, то большие.. Не приспособился пока еще… Может модераторы помогут.. а то как то это не очень читабельно выглядит…

Arduino часы на LCD TFT 3,5″

Сегодня я хочу поделится инструкцией по изготовления оригинальных часов с датчиком температуры. В качестве контролера Arduino Uno. Для отображения часов, даты и температуры я буду использовать цветной LCD TFT экран. Экран использует много контактов Arduino, поэтому мы обойдемся без модуля RTC.

Для реализации данного проекта нам понадобится:
— Arduino Uno
— LCD TFT 3.5” Shield для подключения к Arduino Uno
— Датчик температуры ds18b20
— Резистор 4.7 Ком 0.25 Вт
— Резистор 62 Ом 2 шт
— Аккумулятор Ni-Mn, 1.2V, 1000mA 6 шт
— Синий светодиод 5мм 4 шт
— Фанера толщиной 10 мм
— Немного тонкого пластика или картона
— Наждачная бумага
— Электролобзик
— Термоклей
— Паяльник
— Припой, канифоль
— Изолента
— Двусторонний скотч
— Соединительные провода
— Акриловая краска
— Красители для акриловой краски
— Дрель
— Сверла по дереву 5 мм и 3 мм
— Саморезы по дереву 3 х 30 мм

Шаг 1 Подготовка экрана.
Для начала возьмем экран, перед установкой его необходимо немного подготовить. В моем случае он выглядит так:

У вас он может немного отличаться, их много разновидностей. Подсветка экрана запитана через стабилизатор на 3.3 вольта и резистор от 5 вольт с Arduino. Это хорошо видно на фото:

Такая схема делает не возможным управление подсветкой, а оно пригодится, делать меньше яркость на ночь, например. Для осуществления возможности контроля яркости разрезаем дорожку около резистора и припаиваем провод соединяющий выход стабилизатора напряжения и резистор. Приклеиваем сверху изоленту, чтобы не было случайных КЗ. Потом мы разрежем этот провод и подключим к Arduino или просто поставим выключатель в разрыв. В итоге должно получится так:

Теперь экран готов к установке

Шаг 2 Подготовка Arduino Uno.
Экран использует много контактов Arduino, кроме этого на плате с экраном часто размещают слот под SD карту. Еще одна проблема заключается в том, что при соединении экрана и Arduino оставшиеся выводы Arduino становятся не доступны. Поэтому надо выбирать аналог Arduino Uno с подготовленными дополнительными посадочными гнездами для выводов. Таким образом мы сможем припаять гребенку к свободным выводам в обратную сторону. Итак, мы откажемся от слота SD карты в пользу свободных выводов. Распаиваем в обратную сторону следующие выводы: D0, D1, D10, D11, D12, D13, A5. Также с обратной стороны нам понадобятся выводы +5 вольт, GND, RES. Для питания будем использовать Ni-Mn аккумуляторы, и будет необходимо их заряжать, для этих целей припаиваем провода к разъему питания Arduino, таким образом мы сможет и заряжать аккумуляторы и питать Arduino во время зарядки. В конечном итоге получаем следующее:

Можно перейти к корпусу.

Шаг 3 Изготовление корпуса.
Начнем с изготовления корпуса для наших часов. За основу возьмем фанеру толщиной 10 мм. Форма может быть разной и, если вам не понравилась выбранная мною форма, вы можете изготовить шаблон и вырезать своей формой. Но если вы решили сделать такой же, как и у меня, тогда распечатываем следующую картинку на любом принтере в масштабе 100%:

Вырезаем распечатанный шаблон по внешнему краю. Прикладываем шаблон к фанере, очерчиваем и вырезаем, на этот раз из фанеры, две такие детали. В первой детали необходимо вырезать прямоугольник размером нашего экрана. Для этого размещаем экран посередине нашей заготовки, обратите внимание, ориентировать по середине надо сам экран, плата на которой находится наш экран не симметрична. Поэтому посередине размещаем сам экран, а очерчивает по размерам платы и вырезаем в заготовке этот прямоугольник:

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

Кладем заготовку из фанеры на ровную поверхность, внутрь кладем экран. Ровная поверхность нужна чтобы экран и передняя часть заготовки находилась в одной плоскости. Обратите внимание чтобы вырезы под USB и разъем питания Arduino совпадали с их фактическим расположением. Используя термоклеевой пистолет приклеиваем экран к фанере, заодно можно приклеить и провода подсветки, чтобы их случайно не выдрать:

С лицевой стороны будет выглядеть так:

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

Теперь переходим ко второй заготовке, в ней необходимо вырезать прямоугольник размером 75 мм на 35 мм, для доступа к выводам Arduino. А также надо сделать пять отверстия диаметром 5 мм для светодиодов. И прорезь для выключателя. И отверстия 3 мм под саморезы. Также, как и первую заготовку красим вторую:

Для соединения этих частей из фанеры той же толщины изготовим два прямоугольники размером 20 мм на 40 мм и один квадрат со стороной 20 мм. И просверливаем в них отверстия 3 мм под саморезы:

Шаг 4 Электрика.
Ставим Arduino на место:

Прикручиваем наши соединительные прямоугольники как показано на фото:

Берем аккумуляторы, спаиваем их последовательно по три штуки, выводим провода и скручиваем изолентой. Размещаем их в нижних частях лицевой заготовки, с обратной стороны и приклеиваем на термоклей. Провод от минусового контакта разъема питания Arduino припаиваем к минусу первой тройки аккумуляторов. Плюс от первой тройки припаиваем к минусу второй тройки аккумуляторов. Плюс от второй тройки паяем к одному из контактов выключателю. Провод от плюсового контакта разъема питания Arduino паяем ко второму контакту выключателя. Проше говоря: все аккумуляторы должны быть соединены последователь, минус от них припаян к минусу разъема питания Arduino, а плюс через выключатель к плюсу разъема питания:

Переходим к задней части. В проделанные отверстия вставляем светодиоды и фиксируем их термоклеем. Спаиваем их параллельно по два светодиода и не забываем про резисторы на плясовой провод. Минус от светодиодов подключаем к GND, плюс к D11 Arduino.

В верхнее отверстие вставляем датчик температуры ds18b20. Он обладает высокой точностью измерения, погрешность не более 0,5 °C. Датчик откалиброван при изготовлении, какой-либо дополнительной настройки не требуется. Диапазон измерения температуры -55 … + 125 °C. Есть два режима работы: с внешним источником питания и «паразитного питания». Мы будем использовать внешнее питание, так как при этом он работает стабильнее. Подключение следующее:

Так же фиксируем его термоклеем. В конечном итоге должно получится следующее:

Контакт DQ датчика температуры подключаем к D10 Arduino. Не забудьте припаять подтягивающий резистор между DQ и +5(VDD).
Перед окончательной сборкой еще раз проверьте чтобы все было припаяно и подключено:

Шаг 5 Собираем все вместе.
Аккуратно, чтобы не порвать провода, переворачивает заднюю часть и кладем ее на лицевую часть. В местах крепления соединительных прямоугольников проделываем отверстия и вкручиваем саморезы, соединяя таким образом обе части:

Теперь из тонкого пластика вырезаем полости толщиной 35 мм. На двусторонний скотч клеим эти полости по кругу на боковины наших часов:

Также из тонкого пластика вырезаем внутренние элементы бумажного шаблона и наклеиваем их на лицевую сторону часов:

Для зарядки аккумуляторов и работы часов во время зарядки необходим блок питания напряжением 7.2 – 8 V, с ограничение тока в 600 mA. Если у вас будут другие аккумуляторы, то и блок питания нужно подбирать другой, главное чтобы ток зарядки не превышал 10% от емкости аккумуляторов.

На этом сборка закончена, осталось только отредактировать и записать скетч.

Шаг 6 Подготовка среды и заливка скетча.
Для редактирования и заливки скетча вначале надо установить Arduino IDE с официального сайта:
www.Arduino.cc.

Затем установить следующие библиотеки. Для работы с экраном библиотека UTFT:

utft.rar

[2.39 Mb] (скачиваний: 827)

Для подключения датчика температуры библиотека OneWire:

Для установки этих библиотек распакуйте архивы и поместите распакованные файлы в папку «libraries», находящуюся в папке с установленной Arduino IDE. Или не распаковывая скачанные архивы, в среде Arduino IDE выберите меню Скетч – Подключить библиотеку. В самом верху выпадающего списка выберите пункт «Добавить .Zip библиотеку». Не забудьте после всего этого перезагрузить Arduino IDE. Скетч для часов:

Датчик температуры работает по протоколу One Wire и имеет уникальный адрес для каждого устройства — 64-разрядный код. Чтобы каждый раз не искать этот адрес, подключаем датчик к Arduino, заливаем в нее скетч находящийся в меню Файл – Примеры – Dallas Temperature – OneWireSearch. Далее запускаем Инструменты — Монитор порта. Arduino должна найти наш датчик, написать его адрес и текущие показания температуры. Копируем или просто записываем адрес вашего датчика. Открываем скетч Ard_LCD_TFT_Term, ищем строку:

byte addr[8]={0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97};//адрес моего датчика

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

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

Библиотека ЖК-меню

Arduino — Простое кодирование меню

Возможно, вы использовали электронное устройство с небольшим жидкокристаллическим дисплеем (ЖКД), которое имеет текстовую иерархическую систему меню для настройки параметров конфигурации устройства. Если вы пробовали писать код меню для своих проектов Arduino, вы поймете, что разработка общей системы меню для открытой платформы прототипирования сопряжена с трудностями. Это связано с тем, что доступно множество устройств ввода и отображения, а общая система меню должна быть независимой от тех устройств ввода и отображения, которые вы хотите использовать.В нашей библиотеке меню Arduino эта независимость достигается за счет того, что код диспетчера меню использует методы обратного вызова для обработки пользовательского ввода и визуализации отображения меню.

Для простоты все примеры кодирования предназначены для работы с R3 Arduino Uno / Leonardo / Mega2560 и экраном ЖК-клавиатуры, аналогичным показанному выше. Существует множество производителей экранов ЖК-клавиатур, которые имеют одинаковые или похожие контакты контактов, и вы должны убедиться, что в примере кода меню используются контакты, подходящие для вашего экрана.Если кнопки клавиатуры вашего щита дают разные аналоговые показания, вам необходимо внести изменения в файл LcdKeypad.h. Имейте в виду, что аналоговые показания не всегда согласованы, что может привести к случайным ошибкам при нажатии кнопки. Как только вы познакомитесь с библиотекой меню, адаптация ее для использования с другими устройствами ввода и отображения должна быть простой.

Зачем использовать эту библиотеку меню Arduino, когда доступно множество библиотек меню? Мы думаем, что его проще использовать благодаря нашему онлайн-генератору кода, и он имеет лучшую эффективность памяти благодаря использованию PROGMEM.Посмотрите короткий видеоролик ниже и убедитесь в этом сами.

Чтобы создать меню на ЖК-дисплее, выполните несколько простых шагов

Шаг 1 — Загрузите образец меню ЖК-дисплея

Загрузите следующий пример проекта Arduino для тестирования своих меню. Вам нужно будет найти и установить библиотеку TimerOne для компиляции кода.

Шаг 2. Использование онлайн-конструктора меню

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

Шаг 3 — Сборка проекта Arduino

Скопируйте сгенерированный код и вставьте его в файл MenuData.h вашего проекта Arduino, перезаписав существующее содержимое. Создайте и загрузите свой проект Arduino.

Шаг 4 — Проверьте свое меню

После успешной загрузки проекта Arduino протестируйте свое меню. Теперь, когда у вас есть меню, вы можете работать с основной логикой вашего приложения. Если в будущем вам потребуется переработать меню, файл MenuData.h имеет копию xml, которая использовалась для его создания, которую вы можете скопировать и вставить в онлайн-конструктор меню.

Использование меню в собственном коде

Вы можете использовать загруженный образец проекта Arduino в качестве отправной точки для собственных требований к кодированию. Вам нужно будет написать свой собственный код в теле метода processMenuCommand (byte cmdId), чтобы определить, что нужно делать при выборе пункта меню. Параметр cmdId — это идентификатор, который вы связываете с элементом меню в вашем XML-файле меню.Метод обратного вызова getNavAction () обрабатывает ввод данных пользователем, а метод обратного вызова refreshMenuDisplay (byte refreshMode) отображает меню. Для работы с другими устройствами ввода и отображения вам потребуется переписать код в этих методах. Некоторые экраны ЖК-клавиатуры не подходят для аппаратного управления подсветкой с ШИМ, и поэтому в примере кодирования используется альтернатива мягкой ШИМ.

Таймер обратного отсчета с ЖК-дисплеем и системой меню

Исходный код таймера обратного отсчета Arduino с несколькими профилями можно скачать по ссылке ниже:

Кнопка Select на ЖК-экране запускает / останавливает таймер, при долгом нажатии таймер сбрасывается.Долгое нажатие кнопки «Вверх» вызывает меню. Кнопки вверх / вниз / вправо предназначены для навигации по меню, а кнопки «Выбрать» — для выбора пункта меню. Когда элемент выбран, кнопки «Вверх» / «Вниз» используются для изменения значений. Когда отображается пункт меню «Сброс», долгое нажатие на «Выбрать» загружает значения конфигурации по умолчанию. Цифровой контакт 2 используется для включения звукового сигнала тревоги. Изучение источника должно дать вам хорошее представление об использовании системы меню в ваших собственных проектах. Если вы найдете это руководство по библиотеке меню Arduino полезным, поделитесь им.

Обновление! Зависимость библиотеки TimerOne удалена. Он больше не нужен для компиляции проекта.

Вы можете помочь!

Все наши проекты hackatronics бесплатны для личного использования, и их ждет еще много. Если вы находите наши проекты полезными или полезными, рассмотрите возможность сделать небольшое пожертвование в наш фонд хакатроники, используя кнопки пожертвований на наших веб-страницах. Спасибо.

Создание меню с кнопками для вашего микроконтроллера

Последняя объявленная нами переменная — это массив, в котором хранится текущее значение экрана.Поскольку всего у нас 4 экрана, мы храним 4 значения, которые можно увеличивать или уменьшать.

После того, как все переменные определены, мы позаботимся о функции настройки, которая будет запускаться только один раз при запуске микроконтроллера. Сначала мы определяем скорость передачи до 9600, что означает, что мы можем видеть значения на последовательном мониторе со скоростью 9600 бит в секунду. Скорость передачи, определенная в функции настройки и в последовательном мониторе, должна быть синхронной.
После установки скорости передачи данных инициализируем ЖК-дисплей и включаем подсветку.
Затем мы инициализируем 4 кнопки с их контактами и включаем внутренний подтягивающий резистор, так что нам не нужен дополнительный резистор для нашей схемы.

Для функции настройки мы хотим написать короткий текст на дисплеях. Сначала мы очищаем весь дисплей и устанавливаем курсор во второй строке на цифру номер 4. Здесь мы печатаем первую часть текста. Затем мы помещаем курсор в следующую строку и, поскольку вторая часть теста длиннее, мы устанавливаем курсор на трехзначное число и печатаем вторую часть текста.Текст отображается 5 секунд, и по истечении этого времени дисплей очищается.

Теперь мы вводим всю функцию цикла, которая, конечно, обрабатывается снова и снова. Первые 4 строки функции цикла предназначены для чтения текущего состояния кнопок. Если кнопка нажата, переменная buttonState имеет значение LOW, и мы реагируем следующим образом реакцией в зависимости от того, какая кнопка была нажата, а затем запускаем функцию printScreen, которая будет объяснена в следующем разделе этого руководства по меню.
Сначала мы обсудим инструкции buttonStateLeft и buttonStateRight. Мы вводим первый if-запрос, если кнопка нажата, и очищаем экран, чтобы отобразить новый экран без старой информации. Для левой кнопки мы уменьшаем указатель, чтобы показать предыдущий экран, но когда указатель уже находится на первом экране (currentScreen == 0), мы хотим отобразить последний экран, чтобы получить бесконечное вращение, которое вы знаете со своего мобильного телефона. Для правой кнопки мы хотим отобразить следующий экран.Поэтому мы увеличиваем переменную currentScreen. Если мы дойдем до последнего экрана, мы покажем первый экран, чтобы получить функциональность бесконечного цикла на экранах.
Теперь мы хотим обсудить, что произойдет, если мы нажмем кнопку вверх или вниз. Сначала мы очищаем экран, а затем либо увеличиваем, либо уменьшаем значение текущего экрана. В соответствующем массиве, который мы определили ранее, хранятся значения изменений. Поэтому для каждого экрана мы можем изменить значение.

Функция printScreen имеет много строк, но довольно проста и понятна.Сначала мы проверяем, находимся ли мы на последнем экране под номером 3. Если да, то мы хотим отображать каждое число и единицу измерения в каждой строке. Поэтому мы устанавливаем курсор в первую строку и печатаем название числа, число и единицу измерения. Мы делаем это построчно, меняя курсор.
Если мы не на последнем экране, мы хотим отобразить заголовок «МЕНЮ ТОТОРИАЛ» в первой строке и использовать последние две строки для отображения имени числа, числа и единицы измерения.

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

Библиотека ArduinoMenu — Библиотеки Arduino

ArduinoMenu_library-4.21.4.zip 2020-09-29 355,26 КБ
ArduinoMenu_library-4.21.1.zip 2020-06-04 354,22 КБ
ArduinoMenu_library-4.20.2.zip 2020-05-17 364,83 КБ
ArduinoMenu_library-4.20.1.zip 2020-05-04 358.65 КБ
ArduinoMenu_library-4.20.0.zip 2020-05-04 358.65 КБ
ArduinoMenu_library-4.19.0.zip 2020-02-20 341.10 КБ
ArduinoMenu_library-4.18.3.zip 2020-02-17 340,99 КБ
ArduinoMenu_library-4.18.2.zip 2019-10-01 337,08 КБ
ArduinoMenu_library-4.18.0.zip 2019-09-02 323,12 КБ
ArduinoMenu_library-4.17.26.zip 2019-07-19 325.05 КБ
ArduinoMenu_library-4.17.25.zip 2019-06-29 323,90 КБ
ArduinoMenu_library-4.17.23.zip 2019-06-17 321,92 КБ
ArduinoMenu_library-4.17.22.zip 2019-05-04 317,87 КБ
ArduinoMenu_library-4.17.20.zip 2019-03-18 335.97 Кбайт
ArduinoMenu_library-4.17.18.zip 2019-03-06 336,34 КБ
ArduinoMenu_library-4.17.17.zip 2019-02-21 334,88 КБ
ArduinoMenu_library-4.17.16.zip 2019-02-13 332.79 КБ
ArduinoMenu_library-4.17.15.zip 2019-02-11 332.76 КБ
ArduinoMenu_library-4.17.12.zip 2019-02-10 332,55 КБ
ArduinoMenu_library-4.17.10.zip 2019-02-10 327,74 КБ
ArduinoMenu_library-4.17.4.zip 2019-02-04 288,99 КБ
ArduinoMenu_library-4.17.3.zip 2019-02-03 288.91 Кбайт
ArduinoMenu_library-4.17.2.zip 2019-02-03 288,48 КБ
ArduinoMenu_library-4.17.1.zip 2019-02-03 288,32 КБ
ArduinoMenu_library-4.17.0.zip 2019-02-02 288,17 КБ
ArduinoMenu_library-4.16.0.zip 2019-02-01 283.67 КБ
ArduinoMenu_library-4.15.11.zip 2019-01-28 280,28 КБ
ArduinoMenu_library-4.15.8.zip 2019-01-21 278,15 КБ
ArduinoMenu_library-4.15.7.zip 2019-01-08 278,06 КБ
ArduinoMenu_library-4.15.0.zip 2019-01-02 255.04 КБ
ArduinoMenu_library-4.14.1.zip 253,49 КБ
ArduinoMenu_library-4.14.0.zip 239,10 КБ
ArduinoMenu_library-4.13.0.zip 234,53 КБ
ArduinoMenu_library-4.12.2.zip 234.19 КБ
ArduinoMenu_library-4.12.1.zip 234,04 КБ
ArduinoMenu_library-4.12.0.zip 233,92 КБ
ArduinoMenu_library-4.11.0.zip 233,85 КБ
ArduinoMenu_library-4.10.4.zip 232.29 КБ
ArduinoMenu_library-4.10.3.zip 232,29 КБ
ArduinoMenu_library-4.10.1.zip 232,26 КБ
ArduinoMenu_library-4.8.2.zip 231,36 КБ
ArduinoMenu_library-4.8.0.zip 224.36 Кбайт
ArduinoMenu_library-4.7.2.zip 224,31 КБ
ArduinoMenu_library-4.7.1.zip 221,90 КБ
ArduinoMenu_library-4.6.3.zip 221,98 КБ
ArduinoMenu_library-4.6.2.zip 221.97 Кбайт
ArduinoMenu_library-4.6.0.zip 218,30 КБ
ArduinoMenu_library-4.5.2.zip 218,30 КБ
ArduinoMenu_library-4.5.0.zip 216,81 КБ
ArduinoMenu_library-4.4.9.zip 216.75 КБ
ArduinoMenu_library-4.4.7.zip 216,33 КБ
ArduinoMenu_library-4.4.6.zip 216,30 КБ
ArduinoMenu_library-4.4.3.zip 214,17 КБ
ArduinoMenu_library-4.4.1.zip 214.05 КБ
ArduinoMenu_library-4.3.0.zip 213,45 КБ
ArduinoMenu_library-4.2.0.zip 213,30 КБ
ArduinoMenu_library-4.1.10.zip 209,19 КБ
ArduinoMenu_library-4.1.8.zip 204.27 Кбайт
ArduinoMenu_library-4.1.7.zip 204,29 КБ
ArduinoMenu_library-4.1.5.zip 204,24 КБ
ArduinoMenu_library-4.1.4.zip 202,11 КБ
ArduinoMenu_library-4.1.3.zip 202.03 КБ
ArduinoMenu_library-4.1.2.zip 198.94 КБ
ArduinoMenu_library-4.0.16.zip 199,12 КБ
ArduinoMenu_library-4.0.15.zip 197.12 КБ
ArduinoMenu_library-4.0.14.zip 197.03 КБ
ArduinoMenu_library-4.0.13.zip 197.02 КБ
ArduinoMenu_library-4.0.12.zip 196.80 КБ
ArduinoMenu_library-4.0.11.zip 196,28 КБ
ArduinoMenu_library-4.0.10.zip 196.26 КБ
ArduinoMenu_library-4.0.9.zip 195.42 КБ
ArduinoMenu_library-4.0.8.zip 195.45 КБ
ArduinoMenu_library-4.0.7.zip 190.01 КБ
ArduinoMenu_library-4.0.6.zip 190.01 КБ
ArduinoMenu_library-4.0.5.zip 189.84 КБ
ArduinoMenu_library-4.0.4.zip 189.75 КБ
ArduinoMenu_library-4.0.3.zip192.11 КБ
ArduinoMenu_library-4.0.1.zip 194.95 КБ
ArduinoMenu_library-4.0.0.zip 194,28 КБ
ArduinoMenu_library-3.1.12.zip 145,19 КБ
ArduinoMenu_library-3.1.11.zip150.97 КБ
ArduinoMenu_library-3.0.2.zip 136.73 КБ

Как разработать интерфейс меню Arduino Nokia 5110? Меню ЖК-дисплея Nokia 5110

В этом проекте я покажу вам, как разработать простую систему графического интерфейса пользователя с помощью ЖК-дисплея Nokia 5110. Я спроектирую минималистичный интерфейс меню Nokia 5110 с помощью Arduino и нескольких кнопок.

Используя этот интерфейс меню ЖК-дисплея Arduino Nokia 5110 в качестве эталона, вы можете проектировать даже сложные системы графического интерфейса пользователя на нескольких графических ЖК-дисплеях, таких как ЖК-дисплей Nokia 5110, графический ЖК-дисплей 128 × 64 и т. Д.

Введение

Если вы помните мой предыдущий проект Arduino, я реализовал базовое руководство по подключению к ЖК-дисплею Nokia 5110 с Arduino. Этот проект был посвящен просто представлению ЖК-модуля и отображению простого текста с помощью Arduino.

Поскольку ЖК-дисплей Nokia 5110 представляет собой графический ЖК-модуль, в котором мы можем управлять отдельными пикселями, мы можем сделать гораздо больше, чем просто отобразить текст. Единственное, что мы можем сделать, — это отобразить изображение в виде растрового изображения.

Но если вы действительно хотите извлечь максимум из разрешения 84 × 48 ЖК-дисплея Nokia 5110, то разработка графического интерфейса пользователя для взаимодействия с Arduino (или любым другим микроконтроллером) — отличный вариант.

Итак, давайте разработаем простую систему меню Nokia 5110, которой мы можем управлять с помощью трех кнопок и более интуитивно взаимодействовать с Arduino.

Целью этого проекта является отображение простого меню на ЖК-дисплее Nokia 5110 и перемещение по пунктам меню с помощью трех кнопок.

Я уже обсуждал важную информацию о ЖК-дисплее Nokia 5110 и о том, как его взаимодействовать с Arduino, в моем предыдущем руководстве. Поэтому я не буду повторять все эти шаги снова, а сосредоточусь в этом руководстве на дизайне интерфейса ЖК-меню Arduino Nokia 5110.

Arduino Nokia 5110 ЖК-меню

Графический интерфейс пользователя или просто GUI — это способ взаимодействия с оборудованием с помощью экрана на дисплее. Графический интерфейс пользователя упрощает взаимодействие с оборудованием, поскольку мы получаем визуальную обратную связь от оборудования.

Например, вы разрабатываете простую систему удаленного мониторинга, чтобы проверить, включен или выключен свет. Если мы спроектируем систему таким образом, чтобы состояние света (который может быть расположен далеко) отображалось на экране рядом с нами, тогда работа станет очень простой.

Цель этого руководства по интерфейсу меню Arduino Nokia 5110 — дать обзор того, насколько легко разработать собственную систему графического интерфейса пользователя с использованием Arduino, Nokia 5110 LCD и трех кнопок.

Мы будем отображать «меню» на ЖК-дисплее Nokia 5110 и перемещаться по нему с помощью кнопок.Используя эту настройку, мы можем взаимодействовать с Arduino через меню Nokia 5110 и управлять различными параметрами (такими как подсветка ЖК-дисплея и контрастность дисплея).

Принципиальная схема

На следующем изображении показана принципиальная схема интерфейсной системы с ЖК-меню Arduino Nokia 5110.

Необходимые компоненты

  • Arduino UNO
  • Nokia 5110 LCD
  • Модуль преобразователя уровня x 2
  • Кнопки x 3
  • Резистор 220 Ом
  • 10 кОм x 3 (дополнительно, для внешнего подтягивания)
  • Макетная плата
  • Макетная плата питания
  • Соединительные провода

Аппаратные соединения

Аппаратные соединения аналогичны базовому интерфейсу Arduino и Nokia 5110 LCD.Но для размещения кнопок и управления подсветкой я немного изменил соединения (точнее, контакты Arduino, если быть точным).

ВАЖНОЕ ПРИМЕЧАНИЕ. ЖК-дисплей Nokia 5110 поддерживает максимальное логическое напряжение 3,6 В. Итак, я использовал несколько модулей преобразователя логического уровня для соединения между Arduino и Nokia 5110. Для получения дополнительной информации и того, как построить схему без преобразователя логического уровня, ознакомьтесь с руководством по ЖК-дисплею Arduino Nokia 5110.

Мы знаем, что коммуникационная модель Nokia 5110 LCD — это последовательный интерфейс типа SPI.Итак, я выбрал аппаратный SPI Arduino для управления ЖК-дисплеем Nokia 5110. В следующей таблице показаны соединения контактов, соответствующие ЖК-модулю Nokia 5110 и Arduino UNO.

Nokia 5110 LCD Arduino UNO
RST Цифровой ввод-вывод 8
CE Цифровой ввод-вывод 10
DC Цифровой ввод-вывод 9
DIN Цифровой IO 11
CLK Цифровой IO 13
VCC 3.3V
BL Digital IO 7
GND GND

Как видно из приведенной выше таблицы, вместо подключения контакта BL (подсветки) ЖК-дисплея к напряжению 3,3 В (или 5 В), я подключил его к выводу 7 цифрового ввода-вывода Arduino (через токоограничивающий резистор 220 Ом). Это позволяет нам управлять подсветкой дисплея по мере необходимости.

Кроме того, нам нужны три кнопки для реализации функций «вверх», «вниз» и «выбор».Один конец кнопок подключен к GND, а другие клеммы подключены к контактам цифрового ввода-вывода 4, 2 и 3 соответственно.

У меня есть плата ввода-вывода, состоящая из группы кнопок и светодиода. Кнопки на плате вытягиваются ВЫСОКОЕ с помощью подтягивающих резисторов 10 кОм. Это означает, что контакты Arduino, к которым подключены кнопки, извне вытянуты ВЫСОКО. Так что мне не нужно ничего делать в коде.

Если вы не используете какие-либо внешние подтягивающие резисторы с кнопками, вы должны использовать внутреннюю функцию подтягивания в коде.

Дизайн меню Nokia 5110

Дизайн системы меню Nokia 5110 очень прост. Первоначально на ЖК-дисплее отображается страница главного меню (назовем эту страницу 1) с заголовком вверху, за которым следуют три пункта меню.

Я дал название «Меню Nokia», а три пункта меню — «Установить контраст», «Подсветка» и «По умолчанию». Пунктам меню присвоены номера 1, 2 и 3 соответственно (внутри кода). По умолчанию первый пункт меню будет выделен при перезагрузке системы (или загрузке).

Навигация по меню

Мы можем перемещаться по меню с помощью трех кнопок, которые имеют соответствующие названия: вверх, вниз и выбор. Итак, если мы находимся на странице 1 и если в данный момент выделен пункт меню 1, то мы можем выделить (или перейти) к другим пунктам меню, нажимая кнопки вверх или вниз.

Очевидно, что если вы нажмете кнопку «вверх», будет выделен следующий элемент, а если вы нажмете кнопку «вниз», будет выделен предыдущий элемент.

Если дойти до крайностей i.е., либо пункт меню 1 или 3 и нажмите вверх или вниз, затем пункты меню будут закруглены (или зациклены) назад. Например, если в данный момент выделен пункт меню 1 и если вы нажмете кнопку «вверх», то будет выделен пункт 3 меню.

Аналогично, если пункт меню 3 в данный момент выделен и если вы нажмете кнопку «вниз», то будет выделен пункт меню 1.

Contrast Adjust

Теперь давайте посмотрим, как устанавливать разные значения. Предположим, вы находитесь на странице 1 и выделен пункт меню 1 (Установить контраст).Если вы нажмете кнопку «Выбрать», то будет активирована страница 2. Эта страница предназначена для настройки контрастности дисплея.

На странице 2 вы можете увеличить или уменьшить контраст, нажимая кнопки вверх или вниз соответственно. Контрастность будет регулироваться «на лету», т. Е. При нажатии кнопок вверх или вниз. В любой момент, если вы нажмете кнопку «Выбрать», вы вернетесь на страницу 1, и пункт меню 1 будет выделен.

Управление подсветкой

Вы можете включить или выключить подсветку ЖК-дисплея Nokia 5110 с помощью пункта меню 2 (Подсветка).По умолчанию подсветка включена. На странице 1 выделите пункт меню 2, нажимая кнопки вверх или вниз.

Когда пункт меню 2 выделен, вы можете нажать кнопку «Выбрать» для переключения подсветки. Текущее состояние подсветки, т.е. ВКЛ или ВЫКЛ, печатается рядом с пунктом меню 2.

Восстановить значения по умолчанию

Третий пункт меню называется «По умолчанию». Эта опция восстановит значения по умолчанию, то есть контрастность дисплея установлена ​​на «60», а подсветка будет включена.

Код

Если вы следовали предыдущему руководству по загрузке библиотек, то нет необходимости повторять эти шаги снова. Но позвольте мне объяснить их еще раз. Чтобы связать ЖК-модуль Nokia 5110 с Arduino, вам необходимо загрузить пару библиотек.

В среде Arduino IDE выберите «Инструменты» -> «Управление библиотеками…». Найдите «PCD8544 Nokia» и установите «Библиотеку ЖК-дисплея Adafruit PCD8544 Nokia 5110». Также установите «Библиотеку Adafruit GFX», выполнив поиск.Мы должны включить обе эти библиотеки в наш код.

Ниже приведен код для отображения меню на ЖК-дисплее Nokia 5110.

Заключение

В этом проекте реализовано руководство по проектированию простой системы GUI (графический интерфейс пользователя) с помощью Nokia 5110 Menu Display на базе Arduino.

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

Древовидное меню Arduino для матричной клавиатуры 4X4

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

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

Я программирую матричную клавиатуру 4X4 и представляю меню с помощью ЖК-дисплея 20X4, здесь я тестирую 4 датчика, температуру, свет, звук и потенциометр.

Я взял сигнал датчика через аналоговые входы Arduino UNO без изменения данных, это означает, что значение, которое дают нам датчики, не изменилось для его отображения, просто прочитайте значение в вольтах, которое дает нам каждый датчик, и покажите на ЖК-дисплее 20X4, поэтому каждый из вас может изменить единицу измерения в зависимости от того, какую единицу измерения вы хотите отображать на значениях каждого датчика.

Как создать древовидное меню Arduino?

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

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

Например, вам нужно запустить цикл «ЕСЛИ» несколько раз с одним и тем же действием, просто вставьте функцию и внутри этого цикла повторения функции, который вам нужен, и просто вызовите функцию, цикл будет выполнен. На следующем изображении показана функция на другом листе, вызываемая из основной программы.

Справа главная программа — это место, где находится вызывающая функция, а слева — вторая страница, на которой построена функция.

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

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

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

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

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

Я надеюсь, что это важно для продолжения создания еще более сложных и увлекательных проектов, спасибо, что посетили эту страницу, и, если вам нравится эта информация, поделитесь.

Меню с голосовым регулятором

0. ВВЕДЕНИЕ

Итак, сегодня мы рассмотрим очень простой, но интересный проект. Мы будем использовать этот поворотный энкодер для прокрутки меню, этот ЖК-дисплей для печати текста с использованием связи i2c, этот модуль DFplayer для воспроизведения звуков и усилитель с динамиком. Вот и все, что нам нужно для этого проекта.
Сначала я покажу вам, как работает такой поворотный энкодер, как использовать его для кодирования позиции меню и использовать его для прокрутки вверх и вниз.Затем мы поговорим о ЖК-экране, управляемом с помощью связи i2c, поэтому нам не понадобится много проводов. Мы поговорим о библиотеке, используемой для этого ЖК-дисплея, а также о том, как создавать специальные символы, такие как, например, стрелка, музыкальная нота и т. Д., Потому что эти специальные символы создать немного сложнее. Наконец, я покажу вам, как использовать этот проигрыватель DF для воспроизведения звуков mp3 и усиления звука с помощью дешевого усилителя звука. Итак, приступим.

1. Список запчастей

У вас есть полный список всех частей, которые вам нужны для этого проекта ниже.Вы можете использовать любой другой тип компонентов, которые работают так же, как этот. К ЖК-экрану припаян модуль i2c, поэтому мы можем управлять им, используя всего 2 провода, SCL и SDA для часов и данных. Плеер DF очень прост в использовании с выводами последовательной связи UART, Tx и Rx. Он может напрямую воспроизводить файлы mp3, поэтому преобразование не требуется. Мы будем использовать библиотеки для этих двух модулей. Поворотный энкодер — это то, что вам больше всего понравится. Для кодирования шагов и положения требуется всего 3 контакта.

Полный список деталей здесь

2.Угловой энкодер

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

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


Вот как это работает. Внутри у нас есть периметр из медных соединений, как показано ниже. Чем больше у нас разъемов, тем выше точность кодировщика. У нас также есть два разъема, которые будут двумя выходами на контакты кодировщика, и мы называем эти часы и данные. Все внутренние разъемы подключены к земле, а к выходам часов и данных мы добавим подтягивающий резистор 10 кОм, подобный этому. Итак, прямо сейчас контакты не касаются внутренних медных разъемов, поэтому напряжение на выходе составляет 5 В, поскольку у нас есть подтяжка, подключенная к этому напряжению.Но когда мы начинаем вращать энкодер вправо, выход тактового сигнала будет касаться одного из разъемов, и выход на выводе тактового сигнала теперь будет заземлен, но вывод данных все еще будет 5В.

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

Чтобы легко мы могли подсчитывать шаги и определять направление вращения, поэтому, когда мы вращаемся вправо, мы увеличиваем шаги, а при вращении влево мы уменьшаем значения шагов.

2.2 Пример поворотного энкодера

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

Итак, теперь, когда мы знаем, как это работает, давайте подключимся к Arduino и запустим первый пример кода этого руководства. Я подключу вывод часов к цифровому выводу 8, а данные — к цифровому выводу 9, как вы можете видеть ниже. Не забудьте добавить два подтягивающих резистора по 10 кОм между каждым выводом и на 5 вольт и подключить заземление к среднему выводу энкодера. В этом примере мы не будем подключать кнопку.

Итак, код более чем прост. Читаем состояние часового штифта.Если обнаруженное состояние не совпадает с последним состоянием, в котором было изменение. Но если состояние такое же, что ж, ничего не делаем. Итак, теперь мы проверяем состояние вывода данных. Если он отличается от часового штифта, то мы вращаемся вправо, а если он такой же, мы вращаемся влево, увеличивая или уменьшая значение счетчика.

Загрузите пример кода поворотного энкодера здесь

Наконец, мы печатаем значения на последовательном мониторе. Окончательный код сделан с прерываниями вывода вместо digitalRead в цикле void, чтобы гарантировать, что мы не потеряем ни одного шага.Загрузите код и откройте монитор последовательного порта. Как видите, я начинаю вращать энкодер и увеличиваю или уменьшаю значение счетчика. Легко, правда?

Переходим к следующей части, ЖК-экран

Визуальная разработка для Arduino от Mitov Software

Пользователи Visuino (Программное обеспечение) должны принять эти условия лицензии. Если вы отказываетесь принять условия лицензии, вы не можете использовать это программное обеспечение и имеете право вернуть его в течение 30 дней с даты покупки и получить обратно свои деньги.Для вашего удобства копия этого лицензионного соглашения будет храниться в вашей системе во время установки.

Эта лицензия предоставляет вам следующие права:

У вас есть неисключительная лицензия на Программное обеспечение. Название и все нематериальные права на Программное обеспечение являются собственностью Mitov Software.

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

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

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

Описание ограничений.

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

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