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 можно здесь:
http://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/
По теме
Программирование Arduino - библиотека Firmata
Практическое программирование Arduino- программирование работы с COM-портом
Arduino и Matlab
Arduino и LabVIEW
openFrameworks и Arduino
0 комментариев на «“Processing и Arduino”»
Machine, а не Mashine как написано у вас.
никакой он не скриптовый.
частично. В основном вся реальная работа авторов заключалась в написании своих реализаций алгоритмов 2d — 3d растеризации. Можно так же для растеризации использовать opengl (ну и java2D по умолчанию)
Из найденных мною упрощений синтаксиса всего одно — синтаксический сахар в виде автоматического добавления «f» к каждой вещественной константе, потому что в java «3.2» автоматически считается типом double
Всё остальное — дополнительные классы и методы, некоторые из них являются переименованными библиотечными java.
лучше бы они ерунды не делали, а почитали документацию eclipse или netbeans. В случаи использования последнего было бы совсем не трудно сделать полноценную IDE (ну может были бы сложности только из-за их переделки в виде «float по умолчанию для вещественных констант»)
Всё что представляет собой PDE это текстовый редактор с разукрашенным синтаксисом. Я им не пользуюсь.
но по сути являются java аплетами.
этот «this» в конструкторе пример дырявой абстракции в api, this нужен 1 раз для вызова метода registerDispose который имеет пустое тело 😉 ( это я в исходниках данной библиотеки и processing’а посмотрел)
в общем то она существует в первую очередь для java, ну в processing’е ею можно соответственно пользоваться.
code.google.com/hosting/search?q=opencv+java&projectsearch=Search+projects
Только то на что вы дали ссылку старовато: последние изменения датируются 2008-ым годом.
здесь более современные реализации.
а для меня самым главным плюсом 🙂 Минус в ограничениях на производительность, что для мультимедийного приложения очень критично. «Привязка» OpenGl может решить проблему только частично.
В OpenFrameworks проблем с производительностью должно быть куда меньше (или вообще не быть), всё таки C/С++ изначально полностью компилируемый язык.
Зато в нём нельзя делать «скетчей» которые работают в браузере и на win и на mac (на котором сидит наверно половина адептов processing’а: ) )
По-моему следовало дать ссылку на книгу "Processing: A Programming Handbook
for Visual Designers and Artists" от авторов разработки.
Большое спасибо за замечания!
это да 🙂
Книгу «Getting Started With Proсessing» можно скачать отсюда
gfxdaily.com/2010/08/02/getting-started-with-processing-by-casey-reas-ben-fry/
Помогите малость кто разобрался в Proсessing:
Часть кода Ардуино выводящего температуру
lcd.begin(16, 2);
lcd.print(«Temp. OUT: „);
lcd.print(Whole);
lcd.setCursor(0, 1);
lcd.print(“Temp. IN: „);
Serial.print(Whole); вывожу температуру в ком порт
На дисплее все нормально (-14) и в com порте Ардуино IDE (-14)
Код Proсessing:
import processing.serial.*;
Serial myPort; // Create object from Serial class
int val; // Data received from the serial port
PFont f;
void setup() {
size(200,200);
String portName = Serial.list()[2]; здесь я подбирал номер ком порта
myPort = new Serial(this, portName, 9600);
// Step 3: Load Font
f = loadFont( “ArialMT-16.vlw» );
}
void draw() {
if ( myPort.available() > 0) { // If data is available,
val = myPort.read(); // read it and store it in val
}
background(255);
textFont(f,16); // Step 4: Specify font to be used
fill(0); // Step 5: Specify font color
// Step 6: Display Text
text ( val ,10,100);
delay(10000);
}
Высвечивается белибирда, менял com порт, ничего не выходит
на одном не те цифры, на другом 0, на других ошибка Proсessing IDE
Помогите, пожалуйста, разобраться с этим примером:
При попытки выполнить указаный тут скетч для Processing`а выдает ошибку:
В чем дело?
помогите, только только начал изучать
сделал все как в примере, только вместо StandardFirmata загрузил в контроллер OldStandardFirmata
так как у меня атмега8, еще там в коментах к коду написано что скорость порта 115200, а не как у обычной StandardFirmata, в processing изменил скорость на 115200 и все равно не работает.
нажимаешь по квадратикам диоды не горят
странная штука перекомпилировал все еще раз и заработало