Набросал черновик на 5 кнопок (задействованы пока только 2):
PHP код:
import processing.serial.*;
Serial port;
int x,y,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,w,h;
boolean stat0,stat1;
PImage bs,dw;
void setup()
{
port = new Serial(this, "COM5", 115200); // Прописываем COM-порт на котором у вас сидит Carduino
size(800, 500); //размер окна
background(60, 80, 90); //цвет окна
bs = loadImage("base.png"); //загрузить изображение кнопки
dw = loadImage("down.png"); //загрузить изображение нажатой кнопки
w = bs.width; // Размер кнопки по горизонтали
h = bs.height; // Размер кнопки по вертикали
x = 20; // Х начальная координата кнопки
y = 450; // y начальная координата кнопки
x1= w+30;
y1= 450;
x2= x1+w+10;
y2= 450;
x3= x2+w+10;
y3= 450;
x4= 20;
y4= 400;
x5= w+30;
y5= 400;
image(bs, x, y); // Нарисовать в окне 1 кнопку
image(bs, x1, y1); // Нарисовать в окне 2 кнопку
image(bs, x2, y2); // Нарисовать в окне 3 кнопку
image(bs, x3, y3); // Нарисовать в окне 3 кнопку
image(bs, x4, y4); // Нарисовать в окне 4 кнопку
image(bs, x5, y5); // Нарисовать в окне 5 кнопку
}
void draw()
{
if( mousePressed)
{
if ( mouseX >= x && mouseX <= x + w && mouseY >= y && mouseY <= y + h)
{
stat0=!stat0;
if (stat0) {port.write('1'); image(dw, x+1, y+1); } // послать =1 в Carduino нарисовать нажатую кноку
if (!stat0) {port.write('0'); image(bs, x, y);} // послать =0 в Carduino нарисовать кноку
}
if (mouseX >= x1 && mouseX <= x1 + w && mouseY >= y1 && mouseY <= y1 + h)
{
stat1=!stat1;
if (stat1) {port.write('3'); image(dw, x1+1, y1+1); } // послать =3 в Carduino нарисовать нажатую кноку
if (!stat1) {port.write('2'); image(bs, x1, y1);} // послать =2 в Carduino нарисовать кноку
}
delay(200);
}
}
На ардуине залито:
PHP код:
int outputPin1 = 9; //здесь храним номер контакта
int outputPin2 = 11;
int val; //здесь будет храниться принятый символ
void setup()
{
Serial.begin(115200); //установка порта
pinMode(outputPin1, OUTPUT); //устанавливаем 13 контакт в режим вывода
pinMode(outputPin2, OUTPUT);
}
void loop()
{
if (Serial.available() > 2) //если есть принятый символ,
{
val = Serial.read(); // то читаем его и сохраняем в val
if (val == '1') digitalWrite(outputPin1, HIGH);// если=1 то включаем светодиод
if (val == '0') digitalWrite(outputPin1, LOW); // если=0 то выключаем светодиод
if (val == '3') digitalWrite(outputPin2, HIGH);// если=1 то включаем светодиод
if (val == '2') digitalWrite(outputPin2, LOW); // если=0 то выключаем светодиод
Два непонятных косяка:
При первом запуске проекта в процессинге на первое нажатие виртуальной кнопки - реакции никакой. Реагирует только на последующие. Причем тоже странно: команда посылается на один светодиод - загорается второй. Если после нескольких последовательных включений/выключений одного светодиода нажать на кнопку включения второго - сначала загорается предыдущий (не от своей кнопки!), и только потом - управляемый.
Вроде бы по листингу таких смещений быть не должно - но их есть...
Второй косяк - при экспорте папка application.windows с экзешником создается, но тот не запускается:
"Не удается найти javaw.exe"...
И почему-то не прошла запись команды в виде
PHP код:
if (stat1) {port.write('0101'); ...
- хотя так было бы логичнее
__________________________________________________ ____________
БЛИН, какой же я тупой! -
PHP код:
if (Serial.available() > 2)
- первый вопрос снимается...