人脸跟踪arduino代码的优化

Optimization on face tracking arduino code

本文关键字:优化 代码 arduino 跟踪      更新时间:2023-10-16

我正在做一个项目,用相机跟踪你的脸。我的电脑上有一个程序,通过串行端口将面坐标发送到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);
}
}

9600的波特率在20世纪90年代初很快。

您可以简单地将其设置为115200(快12倍(。轶事证据表明,这是Arduino串行监视器允许的最快速度,但实际硬件可以轻松达到460800,可能更快。

不管怎样,通过串行端口发送数据都很慢,所以发送的数据要少一些

在PC端执行map(),将坐标打包为二进制整数格式,然后发送。如果你想把它作为一个";文本";协议,将值转换为4个字符。