ZBLOG

#include char serial_data; #define ledpin 13 SoftwareSerial jdySerial(2, 3); // RX, TX unsigned long lastReadTime = 0; // 上一次读取的时间 const unsigned long debounceDelay = 1; // 去抖动延迟,单位毫秒 void setup() { Serial.begin(38400); ...

如果你希望在接收到数据后执行相应的操作(例如打开或关闭LED),然后立即恢复到之前的状态,你可以在 turn 函数中执行相应的操作,然后使用 delay 来控制恢复状态的时间。以下是修改后的代码示例:

修改后的代码

  1. #include <SoftwareSerial.h>
  2. char serial_data;
  3. #define ledpin 13
  4. SoftwareSerial jdySerial(2, 3); // RX, TX
  5. unsigned long lastReadTime = 0; // 上一次读取的时间
  6. const unsigned long debounceDelay = 1; // 去抖动延迟,单位毫秒
  7. void setup() {
  8. Serial.begin(38400);
  9. jdySerial.begin(38400);
  10. pinMode(ledpin, OUTPUT);
  11. digitalWrite(ledpin, LOW); // 默认关闭LED
  12. }
  13. void loop() {
  14. if (jdySerial.available()) {
  15. char receivedChar = jdySerial.read();
  16. Serial.print("Received: ");
  17. Serial.println(receivedChar);
  18. if (millis() - lastReadTime > debounceDelay) {
  19. turn(receivedChar); // 调用 turn 函数处理接收到的数据
  20. lastReadTime = millis(); // 更新最后读取时间
  21. }
  22. }
  23. }
  24. void turn(char data) {
  25. switch (data) {
  26. case 'o':
  27. digitalWrite(ledpin, HIGH); // 打开LED
  28. delay(500); // 保持500毫秒
  29. digitalWrite(ledpin, LOW); // 然后关闭LED
  30. break;
  31. case 'x':
  32. digitalWrite(ledpin, LOW); // 直接关闭LED(如果需要)
  33. break;
  34. }
  35. }

代码说明:

  1. 保持 LED 开启

    • turn 函数中,当接收到 'o' 时,先将 LED 打开,然后使用 delay(500) 保持打开状态 500 毫秒。
    • 随后,将 LED 设置为低电平,关闭它。
  2. 关于 'x' 的处理

    • 如果只需直接关闭 LED,则不需要延迟。如果希望同样也加入一个短暂的开灯显示,可以增加类似 'o' 的逻辑。

注意事项:

  • 使用 delay() 会阻塞程序的其他操作,因此在实际项目中,如果有多个功能需要同时进行(如监听串口、响应按钮等),最好使用非阻塞的方法,如基于定时器的实现。
  • 如果不想影响其他循环中的任务,可以考虑改用 millis() 方法控制 LED 的开启和关闭,而不是使用 delay()


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?