Arduino串口读取分类结果
适用产品
拥有串口的摄像头:
SingTown AI Vision Module SC(yes)
SingTown AI Vision Module EC(no)
目的
使用Arduino,通过串口获取 SingTown AI Vision Module 的分类识别结果。
前提条件
模型已上传到摄像头
连接电路
SingTown AI Vision Module RX 不连接
SingTown AI Vision Module TX 连接 Arduino D10
SingTown AI Vision Module GND 连接 Arduino GND
SingTown AI Vision Module VIN 连接 Arduino 5V (可选)
运行Arduino的代码
代码下载:
GitHub: https://github.com/SingTown/singtown-ai-cam-arduino-example/blob/main/read_singtownaicam_cls.ino
直接下载:
download
.
代码介绍:
#define CLASSES_MAX 64 // Max 64 Classes, If you know the exact number, you can change smaller.
uint8_t cls[CLASSES_MAX];
全局变量 cls ,用于存放读取的结果。
int check_crc(unsigned char* payload) {
unsigned char num = payload[0];
unsigned char crc = 0;
int i = 0, j = 0;
for (i = 0; i < num + 2; i++) {
crc ^= payload[i];
for (j = 0; j < 8; j++) {
if (crc & 1)
crc ^= 0x91;
crc >>= 1;
}
}
return crc;
}
check_crc 为校验函数,用于校验数据帧是否正确。
int read_singtownaicam_cls() {
int i;
unsigned char num;
unsigned char payload[CLASSES_MAX + 2];
unsigned char* obj_ptr;
int byte;
while (1) {
if (readByte() != 0xeb) continue;
if (readByte() != 0x90) continue;
num = readByte();
if (num < 0 || num > CLASSES_MAX)
continue;
payload[0] = num;
for (i = 1; i < num + 2; i++) {
byte = readByte();
if (byte == -1) break;
payload[i] = byte;
}
if (check_crc(payload) != 0) continue;
memcpy(cls, &payload[1], num);
return num;
}
}
read_singtownaicam_cls 是读取数据函数,结果存放在 objs 全局变量中。