【欧时RS x Arduino】 离线语音识别添加MCU互动
前面也提到了可以独立做python和mcu的arduino 交互,所以在离线语音识别的基础上呢,再添加一个arduino互动效果。板载的点阵不够显示汉字,但整个简单的动态效果还是比较容易的。LED矩阵分布如下
亮与不两就是01变换,不停的刷就行了。示例如下
#include "Arduino_LED_Matrix.h"
#include "Arduino_RouterBridge.h"
ArduinoLEDMatrix matrix;
byte frame;
volatile bool gotMessage = false;
bool showingSuccess = false;
int scanCol = 0;
int successBlink = 0;
// ============ 工具 ============
void clearFrame() {
for (int r = 0; r < 8; r++)
for (int c = 0; c < 12; c++)
frame = 0;
}
void setLED(int c, int r, bool on) {
if (c >= 0 && c < 12 && r >= 0 && r < 8)
frame = on ? 1 : 0;
}
void flushFrame() {
matrix.renderBitmap(frame, 8, 12);
}
// ============ 待机:逐列扫描 ============
void animScan(int col) {
clearFrame();
// 当前列全亮
for (int r = 0; r < 8; r++) {
setLED(col, r, true);
}
// 前一列暗一点(留个尾巴,视觉上有拖尾感)
int prev = col - 1;
if (prev < 0) prev = 11;
for (int r = 1; r < 7; r++) {
setLED(prev, r, true);
}
flushFrame();
}
// ============ 成功:全亮闪烁 ============
void animBlink(int count) {
clearFrame();
if (count % 2 == 0) {
// 全亮
for (int r = 0; r < 8; r++)
for (int c = 0; c < 12; c++)
frame = 1;
}
// 奇数次 = 全灭(闪烁效果)
flushFrame();
}
// ============ RPC 回调 ============
void onShowText(String msg) {
gotMessage = true;
}
void onShowFace(int on) {
if (on == 1) gotMessage = true;
}
// ============ setup / loop ============
void setup() {
matrix.begin();
clearFrame();
flushFrame();
Bridge.begin();
Bridge.provide_safe("show_text", onShowText);
Bridge.provide_safe("show_face", onShowFace);
}
void loop() {
if (!showingSuccess) {
// 逐列扫描
animScan(scanCol);
scanCol = (scanCol + 1) % 12;
delay(120);
if (gotMessage) {
showingSuccess = true;
successBlink = 0;
gotMessage = false;
}
} else {
// 闪烁 6 次(3亮3灭)
animBlink(successBlink);
successBlink++;
delay(150);
if (successBlink >= 6) {
showingSuccess = false;
scanCol = 0;
}
}
} 然后运行Linux侧的程序,悄悄的做一下语音识别,MCU这边收到识别成功的消息后就会全部点亮闪一闪。有交互才有灵魂。下面放上视频真相
https://www.bilibili.com/video/BV144HT6WEP8/?vd_source=7b4aa8f76cb0ff7f703bdeec27b20add
页:
[1]