在你提供的代码中,有几个小问题需要修正,特别是在 LED_Init
函数定义和使用方面。以下是已修正的完整代码:
修正后的代码
#define BLINKER_PRINT Serial
#define BLINKER_BLE
#include <Blinker.h>
#define led1 3 // 定义 LED1 引脚
#define led2 4 // 定义 LED2 引脚
// 新建组件对象
BlinkerButton Button1("btn-abc");
BlinkerNumber Number1("num-abc");
int counter = 0;
// 按下按键即会执行该函数
void button1_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
digitalWrite(led1, !digitalRead(led1)); // 控制第一个 LED 的状态切换
}
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
counter++;
Number1.print(counter); // 打印计数器到 Blinker 应用程序
// 根据接收到的数据控制 LED 状态
if (data == "abc") {
digitalWrite(led1, HIGH); // 打开 LED1
digitalWrite(led2, LOW); // 确保 LED2 是关闭的
} else if (data == "abd") {
digitalWrite(led2, HIGH); // 打开 LED2
digitalWrite(led1, LOW); // 确保 LED1 是关闭的
}
}
void setup() {
// 初始化串口
Serial.begin(115200);
#if defined(BLINKER_PRINT)
BLINKER_DEBUG.stream(BLINKER_PRINT);
#endif
// 初始化有LED的IO并设置引脚模式
LED_Init();
// 初始化 blinker
Blinker.begin();
Blinker.attachData(dataRead); // 附加数据读取回调函数
Button1.attach(button1_callback); // 附加按钮回调函数
}
void loop() {
Blinker.run(); // 保持与 Blink 应用程序连接运行
}
void LED_Init() { // 正确地定义了此函数,并添加括号 ()
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
}
改动和注意事项:
LED_Init()
:- 在原始代码中,您忘记了在
LED_Init
函数后加上括号,这将导致编译错误。我已添加了括号以确保正确声明这个函数。
- 在原始代码中,您忘记了在
控制LED:
- 我修改了
button1_callback
中对内置LED(如果想用外部引脚,请替换为对应引脚)进行切换,以确保它能与设备相应。
- 我修改了
蓝牙命令处理:
dataRead
函数中根据传入的数据"abc"
和"abd"
来打开不同的 LEDs,你可以根据实际需要调整这些逻辑。
引脚初始化:
- 添加了对两个 LEDs 的初始化,以确保它们开始时处于关闭状态。
使用说明:
- 请将以上代码上传到您的 ESP32-C3 开发板。
- 使用 Blinker 应用来控制 LEDs,发送
"abc"
打开连接到 GPIO 3 的 LED(即led1
),发送"abd"
打开连接到 GPIO 4 的 LED(即led2
)。 - 每次调用未绑定的数据时,它都会增加计数并显示在应用程序中。
内容由零声教学AI助手提供,问题来源于学员提问