Processing и Arduino


Processing
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 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”»

  1. Machine, а не Mashine как написано у вас.

    Processing является простым скриптовым языком

    никакой он не скриптовый.

    базируется на графических возможностях языка Java и использует его упрощённый синтаксис.

    частично. В основном вся реальная работа авторов заключалась в написании своих реализаций алгоритмов 2d — 3d растеризации. Можно так же для растеризации использовать opengl (ну и java2D по умолчанию)
    Из найденных мною упрощений синтаксиса всего одно — синтаксический сахар в виде автоматического добавления «f» к каждой вещественной константе, потому что в java «3.2» автоматически считается типом double
    Всё остальное — дополнительные классы и методы, некоторые из них являются переименованными библиотечными java.

    Если скачать и запустить PDE (Processing Development Evironment), то сразу обнаружится абсолютное сходство с Arduino IDE. В это нет ничего удивительного, так как именно от IDE Processing-а была унаследована Arduino IDE.

    лучше бы они ерунды не делали, а почитали документацию eclipse или netbeans. В случаи использования последнего было бы совсем не трудно сделать полноценную IDE (ну может были бы сложности только из-за их переделки в виде «float по умолчанию для вещественных констант»)
    Всё что представляет собой PDE это текстовый редактор с разукрашенным синтаксисом. Я им не пользуюсь.

    Программы Processing-а, так же называются скетчами.

    но по сути являются java аплетами.

    arduino = new Arduino(this, Arduino.list()[0], 57600);

    этот «this» в конструкторе пример дырявой абстракции в api, this нужен 1 раз для вызова метода registerDispose который имеет пустое тело 😉 ( это я в исходниках данной библиотеки и processing’а посмотрел)

    Нельзя обойти вниманием факт, что для Processing-а существует библиотека для интеграции OpenCV:
    ubaa.net/shared/processing/opencv/

    в общем то она существует в первую очередь для java, ну в processing’е ею можно соответственно пользоваться.
    Только то на что вы дали ссылку старовато: последние изменения датируются 2008-ым годом.
    code.google.com/hosting/search?q=opencv+java&projectsearch=Search+projects
    здесь более современные реализации.

    Лично для меня, единственным минусом Processing-а является программирование на Java. С/С++ для меня ближе, поэтому я смотрю в сторону OpenFrameworks

    а для меня самым главным плюсом 🙂 Минус в ограничениях на производительность, что для мультимедийного приложения очень критично. «Привязка» OpenGl может решить проблему только частично.
    В OpenFrameworks проблем с производительностью должно быть куда меньше (или вообще не быть), всё таки C/С++ изначально полностью компилируемый язык.
    Зато в нём нельзя делать «скетчей» которые работают в браузере и на win и на mac (на котором сидит наверно половина адептов processing’а: ) )

    По-моему следовало дать ссылку на книгу "Processing: A Programming Handbook
    for Visual Designers and Artists
    " от авторов разработки.

    • Большое спасибо за замечания!

      Зато в нём нельзя делать «скетчей» которые работают в браузере и на win и на mac (на котором сидит наверно половина адептов processing’а: ) )

      это да 🙂

  2. Помогите малость кто разобрался в 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

  3. Помогите, пожалуйста, разобраться с этим примером:
    При попытки выполнить указаный тут скетч для Processing`а выдает ошибку:

    No library found for cc.arduino
    As of release 1.0, libraries must be installed in a folder named ‘libraries’ inside the ‘sketchbook’ folder

    В чем дело?

  4. помогите, только только начал изучать

    сделал все как в примере, только вместо StandardFirmata загрузил в контроллер OldStandardFirmata
    так как у меня атмега8, еще там в коментах к коду написано что скорость порта 115200, а не как у обычной StandardFirmata, в processing изменил скорость на 115200 и все равно не работает.
    нажимаешь по квадратикам диоды не горят

    • странная штука перекомпилировал все еще раз и заработало

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение