Processing является языком программирования для создания визуализаций с помощью платформы Java Virtual Machine и позволяет быстро создавать интерактивные программы отображения изображений и анимации.
Processing использовался для создания некоторых реклам, клипов, инсталляций, а также входит в учебные курсы некоторых вузов США.
официальный сайт:
http://processing.org
скачать версию IDE для Windows (версия 1.2.1 (65 Mb))
Итак, Processing:
— простой язык программирования для создания интерактивных визуальных эффектов.
— базируется на графических возможностях языка Java и использует его упрощённый синтаксис.
— лёгкий и быстрый инструментарий для людей, которые хотят программировать изображения, анимацию и интерфейсы.
— используется студентами, художниками, дизайнерами, исследователями и любителями, для изучения, прототипирования и производства.
— создан для изучения основ компьютерного программирования в визуальном контексте.
— это открытый проект, он абсолютно бесплатен, а исходный код доступен для всех желающих.
Если скачать и запустить PDE (Processing Development Evironment), то сразу обнаружится абсолютное сходство с Arduino IDE. В это нет ничего удивительного, так как именно от IDE Processing-а была унаследована Arduino IDE.
Программы Processing-а, так же называются скетчами. Однократно выполняемая часть оформляется в функции setup(), повторяемая циклически — в функции draw() (аналог ардуиновского loop()).
Меню Sketch -> Run запускает компиляцию скетча в полноценное Java-приложение и его запуск в отдельном окне.
После окончательной отладки можно нажать Export (соответствует пиктограмме Upload для ArduinoIDE) — и тогда создается html-код страницы с java-апплетом, который можно разместить на своём сайте (согласитесь — очень удобно).
Быстро ознакомиться с различиями Processing и Wiring можно здесь:
www.arduino.cc/en/Reference/Comparison
Фактически, всё сводится к отличиям C++ от Java.
А теперь самое интересное:
из Processing-а можно общаться с Arduino, при помощи протокола Firmata!
Замечательная возможность! Используя Arduino/CraftDuino, как шлюз во внешний мир, ваш Processing-й скетч может стать по-настоящему интерактивным!
Что для этого потребуется:
* потребуется скачать библиотеку для Processing-а и распаковать её в папку libraries/arduino в каталоге для скетчей Processing (при необходимости, каталоги нужно создать);
* запустите Arduino IDE, откройте скетч из Examples -> Firmata -> StandardFirmata, откомпилируйте и загрузите его в свой контроллер Arduino/CraftDuino;
* запустите Processing, откройте пример из папки libraries/arduino/examples/arduio_output через меню File -> Open;
* запустите скетч на выполнение.
Результатом работы скетча является окно состояния цифровых выходов ардуины:
Каждый квадратик обозначает один цифровой выход от 13 до 0. Щелкая по нему, мы переключаем состояние межу HIGH и LOW.
Как помним, на плате Arduino/CraftDuino уже есть сигнальный светодиод L, подключённый к 13 порту — так что для того чтобы посмотреть работу данного примера дополнительные светодиоды необязательны.
Вот как это выглядит внутри скетча Processing:
import processing.serial.*;
import cc.arduino.*;
Arduino arduino;
color off = color(4, 79, 111);
color on = color(84, 145, 158);
int[] values = { Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW,
Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW,
Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW };
void setup() {
size(470, 200);
println(Arduino.list());
arduino = new Arduino(this, Arduino.list()[0], 57600);
for (int i = 0; i <= 13; i++)
arduino.pinMode(i, Arduino.OUTPUT);
}
void draw() {
background(off);
stroke(on);
for (int i = 0; i <= 13; i++) {
if (values[i] == Arduino.HIGH)
fill(on);
else
fill(off);
rect(420 - i * 30, 30, 20, 20);
}
}
void mousePressed()
{
int pin = (450 - mouseX) / 30;
if (values[pin] == Arduino.LOW) {
arduino.digitalWrite(pin, Arduino.HIGH);
values[pin] = Arduino.HIGH;
} else {
arduino.digitalWrite(pin, Arduino.LOW);
values[pin] = Arduino.LOW;
}
}
Как и в Wiring-е, сначала выполняется функция setup(), в которой создаётся объект Arduino:
arduino = new Arduino(this, Arduino.list()[0], 57600);
Первым аргументом в списке параметров конструктора идет this.
Вторым аргументом указывается порт, к которому подключен Arduino. Для его получения существует функция Arduino.list() — статическая (можно использовать без привязки к экземпляру объекта), возвращающая список портов. В данном примере, скетч будет подключаться к первому порту из этого списка (номер 0).
Последний — третий аргумент — скорость порта; скорость должна совпадать со скоростью установленной в скетче StandardFirmata, которая составляет 57600.
Далее, объект Arduino позволяет вызывать знакомые по Wiring-у методы.
Пример — перевод всех цифровых пинов в режим вывода:
for (int i = 0; i <= 13; i++)
arduino.pinMode(i, Arduino.OUTPUT);
Как уже упоминалось выше, Processing вместо знакомой функции loop(), для циклической работы использует функцию draw().
В данном примере, draw() выполняет перерисовку квадратиков по текущему состоянию значений выходов ардуины, которые хранятся в массиве values (массив инициализируется вверху скетча, значениями константы Arduino.LOW).
Функция mousePressed() — это обработчик событий от мыши. В ней, по координатам клика, вычисляется нужный квадрат, и инвертируется значение соответсвующей ячейки массива values, а затем вызывается метод digitalWrite(), чтобы изменить состояние выхода подключённого контроллера Arduino.
Лично для меня, единственным минусом Processing-а является программирование на Java. С/С++ для меня ближе, поэтому я смотрю в сторону OpenFrameworks
Ссылки:
http://processing.org
http://ru.wikipedia.org/wiki/Processing
Знакомство с Processing 1.0
Руководства по изучению:
http://processing.org/learning/
Различные примеры скетчей Processing-а:
http://www.openprocessing.org
Книга про Proсessing от издательства O'Relly
«Getting Started With Proсessing»
— обратите внимание, как она похожа на "Getting Started With Arduino";)
Прямо и хочется сказать: «Proсessing и Arduino — близнецы-братья...»:)
Полный список книг про Proсessing на сайте processing.org:
http://processing.org/learning/books/
Статья Ильи Данилова: Processing vs Arduino
Про Processing мы уже упоминали в статьях:
* Практическое программирование Arduino/Freeduino — Аналоговый ввод – осциллограф
* Платформа балансирующая шариком
Нельзя обойти вниманием факт, что для Processing-а существует библиотека для интеграции OpenCV:
http://ubaa.net/shared/processing/opencv/
- Processing,
- Arduino,
- Firmata,
- Java
http://robocraft.ru/blog/arduino/336.html
Научно-исследовательский центр
«Российские моторы»