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。这是你修改后的代码:

  1. #include <SoftwareSerial.h>
  2. char serial_data;
  3. #define ledpin 13
  4. SoftwareSerial jdySerial(2, 3); // RX, TX
  5. void setup() {
  6. Serial.begin(38400);
  7. jdySerial.begin(38400);
  8. pinMode(ledpin, OUTPUT);
  9. digitalWrite(ledpin, 1);
  10. }
  11. void loop() {
  12. if (jdySerial.available()) {
  13. char receivedChar = jdySerial.read();
  14. Serial.print("Received: ");
  15. Serial.println(receivedChar);
  16. turn(); // 调用 turn 函数处理接收到的数据
  17. }
  18. }
  19. void turn() {
  20. // 处理来自蓝牙的数据
  21. if (jdySerial.available()) {
  22. serial_data = jdySerial.read();
  23. switch (serial_data) {
  24. case 'o':
  25. digitalWrite(ledpin, HIGH); // 打开LED
  26. break; // 添加 break,以避免落入下一个 case
  27. case 'x':
  28. digitalWrite(ledpin, LOW); // 关闭LED
  29. break; // 添加 break,以避免落入下一个 case
  30. }
  31. }
  32. }

改动说明:

  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

注册

已经有帐号?