Arduino无法足够快地处理串行

时间:2017-03-25 21:43:04

标签: c# performance arduino serial-port

所以我的Arduino需要花费近200ms处理总共128个字节。无需通过串口写入的整个过程只需要25ms。 为什么我的Arduino瓶颈如此之多?

Arduino的

setColor只是使用FastLED库设置ledstrip的颜色。

void loop() {
  if(Serial.available() == 4){
    int led = Serial.read();
    int r = Serial.read();
    int g = Serial.read();
    int b = Serial.read();

    setColor(led, r, g, b);
    Serial.write(1);

    if(Serial.available() > 0) Serial.read();
  }
}

C#

在循环中,我正在执行以下操作来编写数据:

attempt:
if (Port.isReady) {
  strip.Send(new byte[] { id, c.R, c.G, c.B });
  Port.isReady = false;
} else {
    goto attempt;
}
public void Send(byte[] bytes) {
  port.Write(bytes, 0, bytes.Length);
}

我使用以下方式阅读Arduino回复:

private const int DONE = 1;
public void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e) {
    Console.WriteLine("- Serial port data received -");
    Console.WriteLine("Nr. of bytes: {0}", port.BytesToRead);
    if (port.ReadByte() == DONE) {
        isReady = true;
    }
    port.DiscardInBuffer();
}

1 个答案:

答案 0 :(得分:2)

这一切都取决于你的波特率。如果您的波特率是9600,则可以接收每秒9600位,即1200字节。

因此128/1200 = 0.1066 = 107 ms用于接收128个字节。

更高的波特率会缩短读取时间。

那么为什么然后花200毫秒然后问?

我的猜测是,这是因为对setColor()的多次调用 你每4个字节调用一次这样就是32次。 我不知道该函数的执行时间,但是如果它像2-3ms那样你会快速达到200ms。