ZBLOG

#include "BluetoothSerial.h" // 检查蓝牙是否启用 #if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED) #error Bluetooth is not enabled! Please run `make menuconfig` to and enable it #endif BluetoothSerial SerialBT; // 定义LED引脚 const in...

您的代码有一些小错误和需要改进的地方。下面是经过修正和优化的版本:

#include "BluetoothSerial.h"

// 检查蓝牙是否启用
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to enable it
#endif
 
BluetoothSerial SerialBT;
 
// 定义LED引脚
const int ledPin1 = 2;  // ESP32的板载LED通常连接到GPIO 2
const int ledPin2 = 3;  // 可以自定义其他引脚
 
void setup() {
  // 初始化串口通信
  Serial.begin(115200);
  
  // 初始化蓝牙
  SerialBT.begin("COME-CAR_001"); // 蓝牙设备名称
  Serial.println("蓝牙已启动,等待连接...");
 
  // 初始化LED引脚
  pinMode(ledPin1, OUTPUT);
  digitalWrite(ledPin1, LOW);   // 初始状态关闭LED
  pinMode(ledPin2, OUTPUT);
  digitalWrite(ledPin2, LOW);   // 初始状态关闭LED
}
 
void loop() {
  // 检查是否有蓝牙数据可读
  if (SerialBT.available()) {
    char command = SerialBT.read();
    Serial.write(command);   // 将接收到的命令发送到串口监视器

    // 根据接收到的命令控制LED
    switch (command) {        // 修复了switch语法错误并正确使用变量名 command
    
      case '0':               // 注意这里的字符比较,需要用单引号包围数字字符(如'0')
        digitalWrite(ledPin1, HIGH);   // 打开第一个LED
        digitalWrite(ledPin2, LOW);     // 确保第二个LED关闭
        SerialBT.println("电动车已打开");
        break;                  // 添加break以防止fall-through
        
      case '1':
        digitalWrite(ledPin1, LOW);
        digitalWrite(ledPin2, HIGH);   // 打开第二个LED
        SerialBT.println("电动车已打开,车灯已打开");
        break;

      case '2':
        digitalWrite(ledPin1, LOW);    // 确保所有LED关闭 
        digitalWrite(ledPin2, LOW);
        SerialBT.println("电动车已关闭");
        break;

      default:
        SerialBT.println("无效命令");   // 添加默认情况处理无效命令的反馈。
    }
    
    delay(100);                    // 可以加一个短暂延迟,避免过于频繁地读取数据。
  }
}

更改说明:

  1. switch语句修正:原来的代码中 switch (cmd): 是错误的,应为 switch (command) 并且 case 后面的条件需要与读取到的字符进行比较。

  2. 字符比较:在 case 中比较字符时,用单引号 '0', '1', 和 '2'

  3. 添加 break:确保在每个 case 完成后退出 switch,防止继续执行下一个 case 的代码(fall-through)。

  4. 添加默认情况处理:对输入其他不符合要求的命令给予反馈。

  5. 延迟:增加一段延迟以避免反复读取导致的数据丢失或异常行为。

这些更改使代码更加健壮和易于维护。如果还有其他问题或需求,请随时告知!


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?