通过前面的内容已经可以正常的进行电机状态检测了,大佬们都是检测四种状态,小弟就精简一下,完成电机转动和电机停止就好了。
主要就是采集满256个样本进行一次判断,然后推理输出neai_label。
LIS3DH FIFO
│ 每次 ai_samples_poll() 读出一批原始样本
▼
NeaiApp_PushSample(x, y, z) ← 每来 1 个样本调用 1 次
│ 攒满 256 个时间点(768 个 float)
▼
neai_classification()
│
▼
"AI: id=1 run stop=0% run=100%" → 串口
void NeaiApp_PushSample(int16_t x, int16_t y, int16_t z)
{
float probabilities[NEAI_NUMBER_OF_CLASSES];
char msg[160];
size_t n;
int id_class = 0;
int k;
uint16_t idx;
if (s_ready == 0U)
{
return;
}
idx = (uint16_t)(s_count * NEAI_INPUT_AXIS_NUMBER);
s_signal[idx + 0U] = (float)x;
s_signal[idx + 1U] = (float)y;
s_signal[idx + 2U] = (float)z;
s_count++;
if (s_count < NEAI_INPUT_SIGNAL_LENGTH)
{
return;
}
s_count = 0U;
if (neai_classification(s_signal, probabilities, &id_class) != NEAI_OK)
{
neai_print("NEAI: classification error\r\n");
return;
}
n = (size_t)snprintf(msg, sizeof(msg), "AI: id=%d %s", id_class,
neai_label(id_class));
for (k = 0; k < NEAI_NUMBER_OF_CLASSES; k++)
{
n += (size_t)snprintf(&msg[n], sizeof(msg) - n, " %s=%d%%",
neai_label(k),
(int)((probabilities[k] * 100.0f) + 0.5f));
}
(void)snprintf(&msg[n], sizeof(msg) - n, "\r\n");
neai_print(msg);
}最终演示如下:
我要赚赏金
