05.06.2009

ArduinoIDE 0016

Вчера вышла новая ArduinoIDE версии 0016. Можно качать.

Что новенького?

Новые примеры в разделе Communications (с соответствующими частями для Processing и MAX/MSP) by Tom Igoe.
  • SerialCallResponse - посылает через Serial-порт данные от сенсоров + код для отрисовки на PC
  • SerialCallResponseASCII - тоже самое, но данные передаются в десятичном виде через запятую.

Это для тех, кто пишет обработку поступающих от Arduino данных на Processing.

Поддержка Arduino Pro, Pro Mini 3.3V/8 MHz, а также LilyPad Arduino на ATmega328.

Все прогрессивное человечество уже перешло на ATmega328! А вы? ;) Кстати, одно время в DIP-корпусе этот МК отсутствовал на Маузере и Дижикее - не понимаю, неужели раскупили любители Arduino?...

Добавлены члены write(str) и write(str,buf) в классы Print, Serial и Ethernet Client/Server.

Ну наконец-то! Я испытал это неудобство на собственной "шкуре", когда модифицировал Ethernet Library под UDP. Действительно, базовый родительский класс для вывода - Print, поддерживающий богатое разнообразие входных форматов данных через функцию-член print - число, строка, массив, разные длины целых, разные системы счисления. Но в конечном-то итоге вызывается виртуальный write - именно его и должна перекрывать библиотека-потомок, реализующая вывод данных в определенное устройство. При этом write всегда принимал один-единственный символ - то есть, вывод шел побайтный. Приемлемо в LiquidCrystal, но в Ethernet эта концепция вписалась только по причине исключительной поддержки TCP. Для UDP мне пришлось заводить write_block, но теперь этого делать не надо! Bravissimo!

Улучшено подключение и отключение в классах Ethernet, что позволило сократить число неуспешных соединений и длительных таймаутов.

Например, в Client.connect(): более аккуратная работа с номером сокета, проверка состояния полузакрытия сокета SOCK_FIN_WAIT, дополнительная задержка 1 мс между окончанием установления соединения и проверкой, что оно еще живое... Я-то думал, что там уже нечего вычищать - но нет, работа по повышению стабильности продолжается!

Оптимизировано переполнение timer0, который используется в функциях millis() и micros()

Код стал чуть короче, в сумме это дало экономию 80 байт! Поскольку этот фрагмент кода включается в каждый скетч, "похудение" отразится на результатах компиляции всех скетчей. И - как знать, может кто-то не может втиснуться в размер памяти программ своей ATmega8/168 и не хватает ему для счастья 30-40 байт... Вы же знаете, как на C быстро память расходуется... ;)

Пофикшен макрос bits(), работавший не более, чем для 15 бит.

Бывает.

Добавлена константа ARDUINO с номером версии.

Я считаю - давно пора. Как бы не старалось сообщество, все равно от версии к версии происходят порой жесткие изменения (pulsein в версии 0013), которые хотелось бы контроллировать при написании кода.

Посортировали пункты в меню Tools > Boards.

Да они же целую кучу плат добавили (см. выше) - вот наверное оно распухло... Ну-ка, взглянем:


Ну просто красота. Нет предела совершенству!

Добавили "Copy to HTML".

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

/*
* Blink
*
* The basic Arduino example. Turns on an LED on for one second,
* then off for one second, and so on... We use pin 13 because,
* depending on your Arduino board, it has either a built-in LED
* or a built-in resistor so that you need only an LED.
*
* http://www.arduino.cc/en/Tutorial/Blink
*/

int ledPin = 13; // LED connected to digital pin 13

void setup() // run once, when the sketch starts
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}

void loop() // run over and over again
{
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1000); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000); // waits for a second
}

(напрямую вставил в блог из ArduinoIDE, ничего не менял).

Пофикшено (вроде бы) "Couldn't determine program size".

У меня такое бывало, периодически. С чем связано - так и не смог установить со 100%-ой точностью.

Автоматическая генерация зависимостей для Makefile.

Этого тоже недоставало, когда шла работа над библиотеками... Когда один скетч - не актуально, но стоит добавить файлов - и Arduino могла просто не компильнуть нужный исходник. Приходилось сносить объектный файл вручную.

1 комментарий:

  1. Спасибо за обзор, скачал для Ubuntu 9.04, заработало с полпинка. При условии, что все либы стояли.

    ОтветитьУдалить