使用單片機搭配 HC-06 藍牙模組與手機通訊時,若第一次發送「ab」LED 會亮,第二次卻沒反應,通常與串列埠緩衝區處理與邏輯狀態有關。
中斷服務常式將接收到的字元存入 rec[2],但 handle() 函數在判斷後並未清除緩衝區。因此第二次收到相同資料時,程式邏輯可能因狀態未重置而不再執行切換動作。
void handle() {
if(rec[0]=='a' && rec[1]=='b') lamp = ~lamp;
if(rec[0]=='c' && rec[1]=='d') fan = ~fan;
rec[0] = rec[1] = 0; // 清除緩衝區
i = 0;
}
妥善管理接收緩衝區與狀態,即可解決多次發送指令無反應的問題。