ZBLOG

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

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

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

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

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

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

#include <SoftwareSerial.h>

char serial_data;
#define ledpin 13

SoftwareSerial jdySerial(2, 3); // RX, TX
unsigned long lastReadTime = 0;  // 上一次读取的时间
const unsigned long debounceDelay = 50; // 去抖动延迟,单位毫秒

void setup() {
    Serial.begin(38400);
    jdySerial.begin(38400);
    pinMode(ledpin, OUTPUT);
    digitalWrite(ledpin, LOW); // 默认关闭LED
}

void loop() {
    if (jdySerial.available()) {
        char receivedChar = jdySerial.read();
        Serial.print("Received: ");
        Serial.println(receivedChar);

        if (millis() - lastReadTime > debounceDelay) { 
            turn(receivedChar); // 调用 turn 函数处理接收到的数据
            lastReadTime = millis(); // 更新最后读取时间
        }
    }
}

void turn(char data) {  
    switch (data) {  
        case 'o': 
            digitalWrite(ledpin, HIGH); // 打开LED
            break;

        case 'x': 
            digitalWrite(ledpin, LOW); // 关闭LED
            break;
    }        
}

改动说明:

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

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

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?