Image processing Arduino处理通信重复动作

Image processing Arduino处理通信重复动作,image-processing,arduino,processing,Image Processing,Arduino,Processing,我做了一个机械臂。我需要它来捕获视频和检测蓝色和红色。然后将蓝色对象向左移动,将红色对象向右移动。但问题是,每当它找到一种颜色时,它都应该向串行端口发送一个字符“1”(表示蓝色)和一个字符“2”(表示红色)。我的问题是, 1.首先,反应需要很多时间。 2.如果它检测到红色。将“2”发送到串行端口。但它重复了这个动作。即使我更改了对象。 3.或者如果它检测到红色。将“1”发送到串行端口。但它重复了这个动作。即使我改变了目标 正在成功检测颜色。 请有人帮帮我。我被困了很长时间 我的处理代码: 导入处

我做了一个机械臂。我需要它来捕获视频和检测蓝色和红色。然后将蓝色对象向左移动,将红色对象向右移动。但问题是,每当它找到一种颜色时,它都应该向串行端口发送一个字符“1”(表示蓝色)和一个字符“2”(表示红色)。我的问题是, 1.首先,反应需要很多时间。 2.如果它检测到红色。将“2”发送到串行端口。但它重复了这个动作。即使我更改了对象。
3.或者如果它检测到红色。将“1”发送到串行端口。但它重复了这个动作。即使我改变了目标

正在成功检测颜色。 请有人帮帮我。我被困了很长时间

我的处理代码:

导入处理。视频。*;
输入处理。串行。*;
串行myPort;//从串行类创建对象
字符串端口名;
捕获视频;
颜色trackColorgreen、trackColorblue、trackColoryellow;
浮动阈值=20;
浮动阈值=75;
ArrayList blobgreen=新的ArrayList();
ArrayList blobblue=新的ArrayList();
ArrayList blobyellow=新的ArrayList();
void findcolorgreen()
{
用于(int x=0;x800){
b、 show();
myPort.write('1');
延迟(2000年);
println(“蓝色”);
}
}
for(Blob:blobgreen){
如果(b.尺寸()>800){
b、 show();
myPort.write('2');
延迟(2000年);
println(“绿色”);
}
}
}
浮子DISSQ(浮子x1、浮子y1、浮子x2、浮子y2){
浮点数d=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
返回d;
}
浮子DISSQ(浮子x1、浮子y1、浮子z1、浮子x2、浮子y2、浮子z2){
浮点数d=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1);
返回d;
}
void mousePressed(){
//在trackColor变量中单击鼠标的位置保存颜色
int loc=mouseX+mouseY*video.width;
color trackColor=video.pixels[loc];
}
类Blob{
浮貂;
浮肉;
浮点最大值;
浮动最大值;
水滴(浮动x,浮动y){
minx=x;
miny=y;
maxx=x;
maxy=y;
}
无效显示(){
冲程(0);
填充(255);
冲程重量(2);
矩形模式(拐角);
rect(minx,miny,maxx,maxy);
}
无效添加(浮动x、浮动y){
minx=min(minx,x);
miny=min(miny,y);
maxx=最大值(maxx,x);
最大值=最大值(最大值,y);
}
浮动大小(){
返回(最大最小)*(最大最小);
}
布尔isNear(浮点x,浮点y){
浮点cx=(最小+最大)/2;
float cy=(miny+maxy)/2;
浮点数d=distSq(cx,cy,x,y);
if(d
Arduino代码:

#包括
伺服s2、s3、s4、s5、s6;
int pos;
char-val;
无效设置(){
s2.附上(3);
s3.附上(4);
s4.附上(5);
s5.连接(6);
s6.附上(7);
s2.写(90);
s3.写(10);
s4.写入(100);
s5.写入(70);
s6.写作(15);
}
空抓斗()
{
对于(pos=15;pos=10;pos-=1){
s3.写(pos);
延迟(20);
}
延迟(20);
//前进
对于(pos=80;pos=0;pos-=1){
s2.写入(pos);
延迟(50);
}
延迟(50);
延迟(50);
//向前迈进
对于(pos=10;pos=70;pos-=1){
s4.写入(pos);
延迟(50);
}
延迟(50);
//向前迈进

对于(pos=60;pos),如果代码性能不好,则对其进行基准测试