Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Arduino可以';t处理串行数据足够快_C#_Performance_Arduino_Serial Port_Fastled - Fatal编程技术网

C# Arduino可以';t处理串行数据足够快

C# Arduino可以';t处理串行数据足够快,c#,performance,arduino,serial-port,fastled,C#,Performance,Arduino,Serial Port,Fastled,因此,我的Arduino需要将近200毫秒的时间来处理总共128个字节。整个过程无需通过串行端口写入,只需25毫秒。 为什么我的Arduino瓶颈这么大 Arduino setColor只是使用FastLED库设置LED条的颜色 void循环(){ if(Serial.available()==4){ int led=Serial.read(); int r=Serial.read(); int g=Serial.read(); int b=串行.read(); 设置颜色(led、r、g、b);

因此,我的Arduino需要将近200毫秒的时间来处理总共128个字节。整个过程无需通过串行端口写入,只需25毫秒。 为什么我的Arduino瓶颈这么大

Arduino

setColor
只是使用FastLED库设置LED条的颜色

void循环(){
if(Serial.available()==4){
int led=Serial.read();
int r=Serial.read();
int g=Serial.read();
int b=串行.read();
设置颜色(led、r、g、b);
串行写入(1);
如果(Serial.available()>0)Serial.read();
}
}
C#

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

尝试:
如果(端口isReady){
发送(新字节[]{id,c.R,c.G,c.B});
Port.isReady=false;
}否则{
转投企图;
}
public void发送(字节[]字节){
端口写入(字节,0,字节长度);
}
我通过以下方式阅读Arduino的反应:

private const int DONE=1;
public void SerialPortDataReceived(对象发送方,SerialDataReceivedEventArgs e){
Console.WriteLine(“-接收到串行端口数据-”);
WriteLine(“字节数:{0}”,port.BytesToRead);
if(port.ReadByte()==完成){
isReady=真;
}
port.DiscardInBuffer();
}

这完全取决于您的波特率。如果波特率为9600,则每秒可以接收9600位,即1200字节

因此,128/1200=0.1066=107毫秒用于接收128字节

波特率越高,读取时间越短


那你为什么要花200毫秒呢? 我的猜测是,这是因为对
setColor()
每4个字节调用一次,即32次。
我不知道该函数的执行时间,但是如果是2-3毫秒,那么你的速度就是200毫秒。

你说的“不写序列号”是什么意思?我也做了很多计算,但这些只需要25毫秒。如果我在Arduino上加上一行文字,那么整个过程需要250毫秒。如果没有整个程序,我们无法知道您使用的波特率,也无法知道您控制的LED数量。这些(也许还有其他看不见的东西)会影响时间安排。