天天看点

OpenMV 发送色块跟踪的坐标,Arduino 实时接收解析色块坐标值

OpenMV 发送色块跟踪的坐标,Arduino 实时接收解析色块坐标值

OpenMV 发送数据相对来说比较简单,Arduino 的串口接收字符串也比较简单,有专门的字符串读取函数,Serial.readString()。但这个函数的实时性很差,有 1000ms 的延时,包括我前文(Mixly图形化编程的JSON数据收发)中的示例也是这样,为此在这篇文章中给出一个 Arduino 快速实时读取解析 JSON 的示例。

OpenMV 是一个跟踪色块,并将最大色块的坐标值通过串口发送给 Arduino,OpenMV的程序如下图所示:

OpenMV 发送色块跟踪的坐标,Arduino 实时接收解析色块坐标值

Arduino 的串口接收解析程序如下图所示:

OpenMV 发送色块跟踪的坐标,Arduino 实时接收解析色块坐标值

在这个例程中我们没有采用读取字符串的函数

OpenMV 发送色块跟踪的坐标,Arduino 实时接收解析色块坐标值

Serial.readString()

而是采取读一个字节的函数

OpenMV 发送色块跟踪的坐标,Arduino 实时接收解析色块坐标值

Serial.read()

这样就提高了串口读取的实时性!

最后是将 Arduino 串口接收并解析出来的坐标值通过 Arduino 的串口发送端发送到 PC 上,用串口助手观察到的解析结果,如下图所示:

OpenMV 发送色块跟踪的坐标,Arduino 实时接收解析色块坐标值

有问题,参看我的前面几篇相关文章。

Arduino 代码程序:

#include <ArduinoJson.h>

volatile int cx;
volatile int cy;
volatile char c;
String json;

void setup(){
  cx = ;
  cy = ;
  c = ;
  json = "";
  Serial.begin();
}

void loop(){
  if (Serial.available() > ) {
    c = char(Serial.read());
    json = String(json) + String(c);
    if (c == '}') {
      StaticJsonBuffer<> jsonBuffer;
      JsonObject& root = jsonBuffer.parseObject(json);
      if (!root.success()) {
        Serial.println("JSON failed!");
      }
      int cx = root["cx"];
      int cy = root["cy"];
      Serial.print("cx = ");
      Serial.print(cx);
      Serial.print('\t');
      Serial.print("cy = ");
      Serial.println(cy);
      json = "";
    }
  }
}
           

测试硬件连接图如下:

OpenMV 发送色块跟踪的坐标,Arduino 实时接收解析色块坐标值

Mixly_JL图形化开发软件:

https://download.csdn.net/download/qq_27163873/10635766