Я заметил одну проблему: port = new Serial(this, 9600);
, которая должна быть port = new Serial(this, Serial.list()[0], 9600);
.Вы пропустили (важный) аргумент в конструкторе Serial .Всегда проверяйте наличие ошибок в Консоли обработки (ниже вашего кода), особенно если код не работает :)
Я бы начал с примера SimpleWrite, который поставляется с Processing, чтобы вы понимали, как происходит связь между Processing / Arduino.сначала работает, затем двигайтесь дальше и используйте знания, полученные в вашем проекте.
Базовая настройка: При обработке вы инициализируете экземпляр Serial в setup (), а при рисовании вы отправляете значения с помощью write () Serial.метод.В Arduino в setup () вы инициализируете Serial (Serial.begin (yourBaudRate))), а в loop () вы проверяете, доступны ли данные, и read () значения. ОЧЕНЬ важно использовать одинаковую скорость передачи данных как в обработке, так и в Arduino, иначе вы не сможете разобрать большую часть передаваемых данных.
Кроме того, вы неЗастряв в отправке строк, вы также можете отправлять целые числа, байты и т. д. Если вы хотите отобразить их, не забудьте добавить тип в качестве второго аргумента Serial.print () или Serial.println () (например,Serial.,Кроме того, входящие данные печатаются в Serial Monitor: int input = 0; // это будет хранить значение из Serial
void setup(){
pinMode(13,OUTPUT);//add an LED on PIN 13 for kicks
Serial.begin(9600);//init Serial library (make sure Processing is sending data at the same baud rate)
}
void loop(){
if(Serial.available() > 0){//look for Serial data
incoming = Serial.read();//read and store teh value
Serial.print(incoming,DEC);//print it to the Serial monitor, change DEC to the type of variable you're using
if(incoming == 1){//if it's a 1 blink once
digitalWrite(13,HIGH);
delay(500);
digitalWrite(13,LOW);
delay(500);
}
}
}
И я настроил, что вы немного обрабатываете эскиз:
boolean squareVisible = true;
int x = 50;
int y = 50;
int w = 100;
int h = 100;
import processing.serial.*;
Serial port;
int val;
void setup() {
size(200, 200);
noStroke();
fill(255, 0, 0);
rect(x, y, w, h);
String portName = Serial.list()[0];
port = new Serial(this, portName, 9600);
}
void draw() {
background(255);
if (squareVisible) {
fill(40, 80, 90);
} else {
fill(255, 0, 0);
}
rect(x, y, w, h); // Draw a square
}
void mousePressed() {
if (((mouseX > x) && (mouseX < x + w) &&
(mouseY > y) && (mouseY < y + h))) {
// if mouse clicked inside square
squareVisible = !squareVisible; // toggle square visibility
if(squareVisible) port.write(0);
else port.write(1);
}
}
/*
void mouseMoved() {
if (((mouseX > x) && (mouseX < x + w) &&
(mouseY > y) && (mouseY < y + h))) {
port.write(2);
}
}*/
Удачи!