人脸跟踪arduino代码的优化

时间:2020-07-10 18:33:01

标签: c++ optimization arduino

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

1 个答案:

答案 0 :(得分:-1)

1990年代初,波特率达到9600。

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

无论如何,通过串行端口发送数据都很慢-因此,发送的数据更少。

在PC端执行map(),将坐标打包为二进制整数格式,然后发送。如果要将其保留为“文本”协议,请将值转换为4个字符。