如何通过串行端口可靠地向Arduino发送大弦

How to reliably send large strings via serial port to arduino

本文关键字:Arduino 何通过 串行端口      更新时间:2023-10-16

我试图尽可能稳定地向Arduino发送一个大字符串,但是无论我尝试什么,它都不可靠,在C#我有:

private void OnTimedEvent(Object myObject, EventArgs myEventArgs)
{
    string start = "0:" + 255 * (l / 100) + ":0;";
    start = string.Concat(Enumerable.Repeat(start, 24));
    start += ".";
    char[] end = start.ToCharArray();
    port.Write(new string(end));
    Invalidate();
}

,在arduino上我有:

#include <FTRGBLED.h>
#include <Vect3d.h>
int clockPin = 13;
int dataPin = 11;
Tinker::Vect3d<float> recCol(0,0,0);
RGBLEDChain led(25, clockPin, dataPin);
int count = 0, ledc = 0;
void setup() {
  led.begin();
  Serial.begin(19200);
}
void loop() {
  if(Serial.available() > 0){
    char c = Serial.read();
    if(c == '.')
    {    
      ledc = 0;  
      recCol[0] = 0;
      recCol[1] = 0;
      recCol[2] = 0;
      led.update();
    }
    else
    {
      if(c == ';')
      { 
        FTLEDColour col = { recCol[0] , recCol[1] , recCol[2] };
        led.setLED(ledc, col);
        recCol[0] = 0;
        recCol[1] = 0;
        recCol[2] = 0;
        ledc++;
        count = 0;
      }
      if(c == ':')
      { 
        count++; 
      }
      else 
      {
        switch(count){
          case 0:
            recCol[0] = recCol[0] * 10 + (c - '0');
            break; 
          case 1:
            recCol[1] = recCol[1] * 10 + (c - '0');
            break;
          case 2:
            recCol[2] = recCol[1] * 10 + (c - '0');
            break;
        }
      }
    } 
  }
}

当我尝试添加一些非静态位,例如255 * var时,在C#中创建字符串完全静态时,它突然只适用于第一个LED并闪烁随机颜色,而不是Greenfrom 0--255。

首先,您是否确认正在发送的字符串是您期望的?

我会首先将其写入debug.writeline以验证。

第二,如果您使用Arduino终端并输入字符串,它是否按预期做出响应?