如何通过串行端口可靠地向Arduino发送大弦
How to reliably send large strings via serial port to arduino
我试图尽可能稳定地向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终端并输入字符串,它是否按预期做出响应?
相关文章:
- 当我尝试通过 arduino 上的引用传递布尔数组时出现问题
- Arduino Nano:A4988 使用串行输入时通过定时器进行步进控制不稳定
- 通过USB在PC和Arduino之间进行串行通信
- POST Arduino 传感器值通过 Flask API 发送到本地 Sqlite db
- 通过蓝牙将数据从Arduino 从Arduino发送到Android
- 随机字符,从强制转换 Arduino 字符串到 Excel BSTR 通过 c++ DLL
- Arduino在通过Serial读取utf8时表现奇怪
- Arduino / C++:通过引用将对象传递给构造函数
- 通过串行通信将数据从Arduino发送到Pi
- ARDUINO LCD:通过读取数组生成导航菜单
- 为什么我的串行串行在Arduino IDE上通过串行显示器进行两次打印
- 在 Python 中通过串行发送 JSON 到 Arduino
- 如何通过串行端口可靠地向Arduino发送大弦
- 通过Arduino上的gprs屏蔽接收短信
- 在c++中通过串行发送一个带符号的整数作为字节,Arduino读取它
- C++03 12.4/12对通过指针显式调用基类析构函数有何说明
- 使用并集通过SPI将浮点从一个arduino发送到另一个ardduino
- 使用 Objective-c 通过串行向 Arduino 发送颜色
- Arduino-Uno通过I2C从树莓派接收1或2个字节
- 控制两个直流电机(在arduino上)通过c++源代码