Анонсирована новая версия популярной библиотеки компьютерного зрения — OpenCV 4.0-alpha.
Первый промежуточный релиз OpenCV 4.0 gold ожидается в конце октября.
Что нового:
* все последние улучшения, оптимизации и исправления ошибок из ветки 3.4.
* в модуль DNN, добавлен парсер ONNX. Он поддерживает различные нейронные сети, такие как AlexNet, Inception v2, Resnet, VGG и т. д.
Программирование Arduino даёт не только огромный простор для фантазии и возможностей, но, как и любой фреймворк, одновременно навязывает свой стиль и ограничивает возможности.
Поэтому, если чувствуется, что Arduino становится тесноват — можно не только перейти на 32-битные контроллеры (например, STM32), но и попробовать более низкоуровневое программирование контроллеров.
Уходя ближе «к железу» — программировать придётся на более близком к железу уровне — и если это не ассемблер, то уж язык программирования Си — точно.
Пример подобного программирования уже приводился в статье Arduino/CraftDuino и WinAVR — программируем на чистом С.
У такого стандартного программирования микроконтроллеров есть существенное преимущество перед использованием Arduino-вских скетчей.
Однако, за низкоуровневый полный контроль и возможность использовать все ресурсы микроконтроллера, приходится расплачиваться долгим и внимательным изучением документации (datasheet-а) на микроконтроллер.
Т.е., если у вас ещё не было опыта работы с конкретным микроконтроллером — то вместо быстренького набрасывания скетча для решения своей задачи — вам придётся потратить дополнительное время на изучение мат. части.
Разумеется, не всегда это может быть оправдано и если задачу нужно и можно быстро решить при помощи Arduino — то почему бы и нет?
Однако, если решение задачи на Arduino невозможно, то придётся потратить время на получение ценных опыта и знаний, которые помогут открыть все возможности, которые под силу микроконтроллеру.
Для примера, возьмём меленький, простой и дешёвый контроллер ATtiny13.
Мне всегда нравилась идея объектно-ориентированного программирования. Это очень удобно и легко, особенно, когда программа раздувается до больших размеров, или есть несколько очень похожих элементов, но с разными настройками. И меня всегда интересовали нестандартные, красивые решения и новинки языка — шаблоны, лямбда-функции, тернарные операторы… К сожалению, я все никак не мог к ним подобраться — то времени не было, то мозг был не готов. В общих чертах знал, что это, но сам никогда не пробовал. Но вдруг в одной из программ для AVR я увидел интересное использование шаблона, которое очень сильно облегчало работу. Мне стало интересно — и время нашлось, и желание… И вот родилась идея этой статьи. Результат — родительский класс для легкой работы с устройствами на базе SPI (сдвиговые регистры, трансиверы, Ethernet etc), в Hardware и Software реализации. Интересно — просьба под кат.
tl;dr — в конце все ссылки из статьи, в том числе готовый код и примеры.
WARNING 1: под катом много букв и о ужас ни одной картинки, а также огромная куча низкокачественноголапшеобразного замечательного кода. WARNING 2: автор не крут в шаблонах, поэтому извиняется, если что-то реализовано ужасно. WARNING 3: пока что — только Master, Slave-версия будет через год некоторое время. WARNING 4: автор обожает варнинги и тег s неправда!!
Здесь упоминалось, что Arduino/CraftDuino/Freeduino можно программировать не только на Wiring-е, но и на других языках программирования.
Попробуем разобраться как это можно сделать — написать программу на обычном С/C++.
Для этого воспользуемся компилятором WinAVR.
WinAVR — это интегрированная среда разработки; она включает мощные компиляторы Си и ассемблера, программатор AVRDUDE, отладчик, симулятор и множество других вспомогательных программ и утилит.
Скачать WinAVR можно на странице проекта: http://sourceforge.net/projects/winavr/
однако, в комплекте Arduino IDE уже идёт WinAVR (\hardware\tools\avr\), поэтому можно воспользоваться им.
На примере библиотеки для работы с PS/2-устройствами можно оценить как здорово работать через библиотеку :)
Раз подключил и готово :)
Разумеется, нужно ещё разобраться что к чему, но главное – библиотека – это очень удобно :) Поэтому, давайте научимся создавать собственную библиотеку для ардуино :)