ZBLOG

减小延时不让串口产生冗余数据

为了减小延时并防止串口产生冗余数据,可以采取以下几种方法:

  1. 减少调用 jdySerial.available():你可以在接收到第一个字符后立即读取并处理,而不是多次调用 available()

  2. 增加缓冲区管理:通过将接收到的数据存储在缓冲区中,然后进行批量处理,而不是每次都单独处理。

  3. 使用非阻塞方式:通过使用时间戳或定时器来确保不会因为等待串口而产生冗余数据。

以下是调整后的代码示例:

  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 = 50; // 去抖动延迟,单位毫秒
  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. break;
  29. case 'x':
  30. digitalWrite(ledpin, LOW); // 关闭LED
  31. break;
  32. }
  33. }

改动说明:

  1. 去抖动机制:添加了 debounceDelaylastReadTime,用于控制函数的调用频率,从而避免短时间内重复执行同一命令造成的冗余数据。

  2. 传递参数到 turn() 函数:直接把接收到的字符作为参数传递给 turn() 函数,这样只需读取一次数据即可。

  3. 更改默认状态:在 setup() 中设置 LED 为关闭状态(如果这是你想要的)。

通过这样的改进,你可以显著降低由于快速连续发送数据造成的冗余响应,提高程序的效率。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?