在你的代码中,turn()
函数只会在接收到来自 jdySerial
的数据时执行。为了确保它在接收到指令后执行一次命令,你需要在 switch
语句中的每个 case
后面添加 break;
语句,以防止程序继续执行下一个 case。这是你修改后的代码:
#include <SoftwareSerial.h>
char serial_data;
#define ledpin 13
SoftwareSerial jdySerial(2, 3); // RX, TX
void setup() {
Serial.begin(38400);
jdySerial.begin(38400);
pinMode(ledpin, OUTPUT);
digitalWrite(ledpin, 1);
}
void loop() {
if (jdySerial.available()) {
char receivedChar = jdySerial.read();
Serial.print("Received: ");
Serial.println(receivedChar);
turn(); // 调用 turn 函数处理接收到的数据
}
}
void turn() {
// 处理来自蓝牙的数据
if (jdySerial.available()) {
serial_data = jdySerial.read();
switch (serial_data) {
case 'o':
digitalWrite(ledpin, HIGH); // 打开LED
break; // 添加 break,以避免落入下一个 case
case 'x':
digitalWrite(ledpin, LOW); // 关闭LED
break; // 添加 break,以避免落入下一个 case
}
}
}
改动说明:
添加了
break;
:在每个case
后面都加上了break;
,以防止 “fall-through”(意为没有结束的行为,即执行完当前 case 后继续到下一个 case)。调整了结构:在主循环中,当有可用数据时,不仅打印接收的字符,还调用了
turn()
函数来处理它。
现在,每次发送 'o'
或 'x'
时,程序应该只执行对应的操作,而不会持续切换状态。
内容由零声教学AI助手提供,问题来源于学员提问