Сегодня познакомимся с такой штукой как Processing.
Processing — это среда программирования, созданная для легкого и быстрого создания различных визуальных элементов. Зачем она нужна в курсе Arduino? За тем, что с помощью Processing можно легко связать Arduino с компьютером и осуществлять обмен информации между ними. Кроме того, Processing позволит визуально представить данные, получаемые с Arduino.
Скачать среду программирования можно бесплатно с официального сайта processing.org. Там же вы найдете всю необходимую информацию и примеры для работы.
Запустив Processing вы увидите, что эта среда очень похожа на Arduino IDE, что неудивительно, ведь Arduino IDE создавалась на основе Processing.
Для начала научимся передавать данные из Arduino в Processing. В этом нам поможет уже знакомый набор Serial. Пусть Arduino отправляет сообщение Hello, Processing!, а Processing, соответственно, будет принимать это сообщение.
На Arduino будет стандартный код отправки сообщения в последовательный порт раз в секунду:
1 2 3 4 5 6 7 8 9 |
void setup() { Serial.begin(9600); } void loop() { //отправляем сообщение Serial.println("Hello, Processing!"); delay(1000); } |
Загрузите код в плату.
Теперь настало время написать прием сообщения на Processing. Сначала нужно импортировать библиотеку Serial. Для этого в верхнем меню выберите Sketch -> Import Library -> Serial.
В коде появится строка
1 |
import processing.serial.*; |
Для работы с Serial нужен объект типа Serial. Создадим его и назовем port.
Также, нам понадобится переменная для хранения принятого сообщения. Создадим строковую переменную message.
Как и в Arduino, в Processing существуют стандартные функции для однократного исполнения — void setup(), и для циклического повторения — void draw() (аналог void loop() в Arduino).
В setup() определим порт, по которому будут общаться Arduino и Processing.
1 |
port = new Serial(this, Serial.list()[1],9600); |
Здесь нужно правильно указать ваш COM-порт. В диспетчере устройств (можете найти его нажав правой кнопкой мыши на Мой компьютер и выбрав Свойства) посмотрите задействованные COM-порты.
В моем случае есть 2 COM-порта. Arduino подключена к COM4. По счету это второй из занятых портов, но в Java (как и во многих других средах) нумерация начинается с 0, т.е. COM1 — это нулевой порт, COM4 — первый. Поэтому в Serial.list() я указываю номер 1. Если у вас только один COM-порт, то вы поставите Serial.list()[0].
Теперь в объект port будут передаваться сообщения. Мы же будем их считывать. Для считывания воспользуемся командой readString(). Так как считывать сообщения мы должны все время, то поместим эту часть в функцию void draw(). Принимаемое сообщение будем записывать в переменную message. Также, перед тем, как считать данные, убедимся, что в порт что-то приходило с помощью функции port.available().
1 2 3 |
if (port.available()>0) { message = port.readString(); } |
В случае принятия сообщения выведем это сообщение в консоль с помощью функции println().
Код программы целиком:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import processing.serial.*; Serial port; // объект типа Serial для дальнейшего использования String message; void setup() { port = new Serial(this, Serial.list()[1], 9600); } void draw() { if (port.available()>0) { // если в порт пришли данные message = port.readString(); // считываем сообщение и записываем в переменную message println(message); // выводим message в консоль } } |
Запустим написанную программу и, если все сделано правильно, увидим в нижней части Processing надпись Hello, Processing!, которая выводится каждую секунду.
А теперь выведем это сообщение не в консоль, а на экран. Для начала зададим размеры рабочего экрана, например, 400х400. Делается это командой size(400, 400) в функции setup(). Также, нам нужно создать шрифт, которым будет написан текст. Объявим объект типа PFont:
1 |
PFont f; |
В блоке setup создадим необходимый шрифт, например, Arial размером 25пт.
1 |
f = createFont("Arial",25,true); |
В блоке draw() сначала зададим цвет фона командой background(). Чтобы фон был черным напишем background(0).
Дальше укажем, что текст должен выводиться шрифтом f, который мы подготовили заранее, командой textFont(f).
После этого останется вывести текст на экран командой text(message, 10, 50), где message — принятое сообщение, а 10 и 50 — координаты вывода текста.
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import processing.serial.*; Serial port; // объект типа Serial для дальнейшего использования String message; PFont f; void setup() { size(400,400); port = new Serial(this, Serial.list()[1], 9600); f = createFont("Arial",25,true); } void draw() { if (port.available()>0) { // если в порт пришли данные message = port.readString(); // считываем сообщение и записываем в переменную message println(message); // выводим message в консоль background(0); // черный фон экрана textFont(f); // задаем шрифт текста text(message, 10, 50); // выводим сообщение } } |
Если все сделано верно, при запуске у вас появится такое окно:
У нас получилось передать данные из Arduino в Processing и вывести их на экран. В следующий раз обработаем данные, полученные с датчиков с помощью Arduino.
Замечательно.
Давно хочу сделать связь ардуино с компьютером для построения графиков с данными с датчиков.
Ждем следующей статьи.
Ваше обещание: «В следующий раз обработаем данные, полученные с датчиков с помощью Arduino.»
Вопрос: «Следующий раз» — это когда?
С уважением
Алексей
e-mail: sihi13@yandex.com
можно ли эту связь провести не через сом порт, а дистанционно? через блютуз например.