我使用Processing(java)通过串口与Arduino进行通信,Arduino控制着两个伺服器和一个激光器。一切都是独立工作的,但是当我使用Processing打开激光器时,我无法控制舵机,直到我关闭激光器。 疑难排解我试过了:
这是我的处理程序:
90,90\n
50,50\n
-1\n
它有一点可视化来监控电机位置,基本上只需发送“mot_x_pos,mot_y_pos \ n”和“-1 \ n”来切换激光器。 示例输出串行流:
#include <Servo.h>
bool laser = true;
// true sets the value high (off for my transistor)
char val = 0;
const int laser_pin = 7;
int out1 = 9; //servo pins
int out2 = 11;
boolean newData= true;
Servo servo_x;
Servo servo_y;
int pos_x =0;
int pos_y =0;
int x_prev = 90;
int y_prev = 90;
void setup() {
Serial.begin(9600);
Serial.println("<Arduino is ready>");
servo_x.attach(out1);
servo_y.attach(out2);
pinMode(laser_pin, OUTPUT);
digitalWrite(laser_pin, laser); //turn laser off on startup
}
void loop(){
while(Serial.available()>0){
pos_x = Serial.parseInt();
pos_y = Serial.parseInt();
val = Serial.read(); // this catches the newline escape characters
if ( (pos_x<0) || (pos_y<0) ){
//toggle laser
if(laser){
laser = false;
}
else {laser = true;}
digitalWrite(laser_pin, laser);
}
else if( (val == '\n') || (val == '\r') ){
if(pos_x != x_prev){ //only write to the motors if something has changed
servo_x.write(pos_x);
x_prev = pos_x;
}
if(pos_y != y_prev){
servo_y.write(pos_y);
y_prev = pos_y;
}
}
}
}
Arduino代码解析流并控制电机/激光器:
{{1}}
任何建议都将不胜感激,谢谢。
答案 0 :(得分:1)
如果您提供的命令序列无效,将会有所帮助。
你的Arduino代码尝试读取两个int,但你只是用laser命令发送一个。那会不同步(parseInt并不关心行的结尾,它很乐意去下一行)
尝试