Первый кандидат в релизы на звание ArduinoIDE 1.0 стал доступен для широкого скачивания еще 17.09.2011. Возможно, существенных изменений уже и не будет, поэтому я решил забежать немного вперед и полюбоваться на наше ближайшее будущее ;)
Итак, начиная с версии 1.0 файлы со скетчами получили новое расширение .ino. Не знаю, как у вас, а у меня сразу стойкая ассоциация с Брайаном Ино ;) Смысл перехода на новое расширение - еще раз подчеркнуть, что это не скетчи processing-а (а стало быть, и расширение у них своё собственное). Означает ли это, что надо бросаться и судорожно переименовывать все скетчи? Естественно, нет ;) Скетчи со старым расширением будут по-прежнему загружаться без проблем, и только при сохранении ArduinoIDE вежливо поинтересуется:
(этот робкий вопрос, кстати, можно отключить в настройках, если хотите).
Второе значимое изменение: теперь для Arduino-совместимой платы можно определять разные варианты расположения пинов. Определения пинов вынесены в отдельные файлы в общей структуре каталогов, а в синтаксис описания плат (boards.txt) добавили строку .build.variant, указывающую, какое определение пинов подключать при компиляции.
Появились интересные макросы, помогающие сделать скетч более универсальным. Например, чтобы выяснить прямо по ходу программы, поддерживает ли пин PWM, можно использовать digitalPinHasPWM(номер). Или, если надо понять максимальное число цифровых пинов - теперь оно описано константой NUM_DIGITAL_PINS. Спору нет, повышение универсальности скетчей налицо, но они-то, как правило, намертво привязаны к конкретной схеме - вот и получается, что эта фича для библиотек. В этом 1.0rc1 мне удалось найти определения вышеописанных макросов только для плат класса Uno и Mega.
Библиотеки
Кстати, писателям библиотек придется потрудиться - например, WProgram.h отныне переименован в Arduino.h. Я уже просто повсеместно наблюдаю, как люди бренчуют код своих библиотек в ветки "arduino-1.0-compatible". Так что если вы написали и поддерживаете библиотеку - самое время задуматься об обновлении.
Лайма Фрай (известная также в качестве ladyada) усовершенствовала библиотеку для карт SD - теперь можно открывать несколько файлов одновременно и ходить по подкаталогам.
В основную библиотеку Ethernet добавлена поддержка DNS и DHCP, переименованы классы для сервера и клиента TCP, а также для UDP. Уже одно это повлечет за собой неизбежные правки в скетчах, использующих Ethernet library, но это еще не всё! В "серверном" скетче теперь нельзя проверять подключился ли клиент конструкцией if (client != NULL) - надо писать if (!client).
Проведена также и "идеологическая" работа по правильному наследованию - код для работы UDP и библиотека Wire наследуют потоковому классу Stream. Это позволяет прозрачно использовать для обмена его функции read(), write(), print() и println(). Опять-таки - теоретически - меньше причин менять код, например, при переходе от обмена по Serial к обмену по UDP. Да и сам Stream расширен дополнительными функциями, помогающими в парсинге входного потока информации - find(), findUntil(), parseInt(), parseFloat(), readBytes(), readBytesUntil() и setTimeout().
Библиотека Serial теперь не блокируется вызовом write - это значит, что данные кладутся в передающий буфер и работа скетча продолжается, а непосредственная передача происходит по мере освобождения буфера, по прерыванию. Изменился смысл Serial.flush() - теперь он не уничтожает лежащие в приемном буфере данные, а будет ждать, пока не опустошится передающий! (прямо скажу, я бы интуитивно не догадался). Serial.print(byte) печатает символьное представление числа - теперь Serial.print(65) выведет на печать '65', а не 'A'. Чтобы было именно 'A' - надо использовать Serial.write(). Появилась возможность определить callback по приходу данных в приемный буфер: serialEvent(). Ура, теперь скетчу теперь не надо "тупо" пуллить входной буфер через Serial.available() в ожидании данных, а можно заниматься чем-то более полезным.
Произошло переключение со старой реализации софтварного последовательного порта SoftwareSerial на давно существующую более продвинутую NewSoftwareSerial от Mikal Hart.
Обновлена Firmata до версии 2.3 - теперь аналоговые пины в цифровом применении нумеруются как в Arduino - с цифры 14.
ArduinoIDE
Нас ждут традиционные украшательства - типа новых иконок, цветовой схемы и окошка about.
Есть и более полезные нововведения: URL-и в комментах стали кликабельны, компиляция и загрузка обзавелись собственным прогресс-баром, в строке статуса пишется тип платы и текущий порт.
Подробный вывод при компиляции теперь не надо включать при помощи текстового редактирования preferences.txt, он заслужил собственный чек-бокс в окне настроек:
(по этому поводу как раз сегодня в форуме спрашивали, кстати).
И, наконец, самое важное - если удерживать клавишу Shift при нажатии на иконку кнопки Upload, скетч будет заливаться не обычным образом - через bootload-ер - а через программатор (надо предварительно выбрать тип программатора в меню Tools -> Programmer).
Ну и напоследок - в список стандартных программаторов добавлен USBasp, а в состав пакета включена последняя версия "дудки" - 5.11 (та самая, где для него добавили поддержку TPI), а в качестве имени программатора ему теперь сообщается "-c arduino". Это, наверное, самое ожидаемое изменение - для меня лично ;)
Спасибо за такие интересные и подробные статьи. Прочитал почти все и с огромным удовольствием. Всегда жду каждый новый пост.
ОтветитьУдалить