我正在做一个相机可以跟踪你的脸的项目。我的计算机上有一个程序,可通过串行端口将面部坐标发送到Arduino。 Arduino程序驱动两个伺服器。一个用于X坐标,一个用于Y坐标。该代码可以工作,但是非常慢。更新伺服大约需要一秒钟。我如何使这段代码更快?
代码如下:
include <Servo.h>
Servo x_servo;
Servo y_servo;
void setup() {
Serial.begin(9600);
x_servo.attach(9);
y_servo.attach(10);
x_servo.write(90);
y_servo.write(90);
}
void loop() {
if (Serial.available()) {
String data = Serial.readString();
int delimeter = data.indexOf(',');
int x = data.substring(0, delimeter).toInt();
int y = data.substring(delimeter + 1).toInt();
int x_pos = map(x, 0, 640, 0, 180);
int y_pos = map(y, 0, 480, 0, 180);
x_servo.write(x_pos);
y_servo.write(y_pos);
}
}
答案 0 :(得分:-1)
1990年代初,波特率达到9600。
您可以将其设置为115200(快12倍)。轶事证据表明,这是Arduino串行监视器允许的最快速度,但实际硬件可以轻松达到460800,甚至可能更快。
无论如何,通过串行端口发送数据都很慢-因此,发送的数据更少。
在PC端执行map()
,将坐标打包为二进制整数格式,然后发送。如果要将其保留为“文本”协议,请将值转换为4个字符。