ZBLOG

#include 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); }...

在你的代码中,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
        }        
    }
}

改动说明:

  1. 添加了 break;:在每个 case 后面都加上了 break;,以防止 “fall-through”(意为没有结束的行为,即执行完当前 case 后继续到下一个 case)。

  2. 调整了结构:在主循环中,当有可用数据时,不仅打印接收的字符,还调用了 turn() 函数来处理它。

现在,每次发送 'o''x' 时,程序应该只执行对应的操作,而不会持续切换状态。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20317

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?