我正在使用Arduino Mega 2560主板来控制一条LED灯条。我试图使用一个简短的C#控制台程序向我的Arduino程序发送串行命令。在Arduino中,我有一个名为SerialCommand的库,我可以在其中读取一个串行字符串并使用它来执行一个函数,并传递类似的参数:" functionName arg1 arg2 arg3"。我通过终端发送串行命令对此进行了测试,效果很好!我通过从C#程序发送串行命令来运行Arduino函数,但前提是该串行字符串不包含任何空格。
这是我的C#代码:
class Program
{
public static System.IO.Ports.SerialPort serialPort1;
private void establishConnection()
{
serialPort1 = new System.IO.Ports.SerialPort("COM4");
serialPort1.BaudRate = 115200;
serialPort1.Open();
}
static void Main(string[] args)
{
Program p = new Program();
p.establishConnection();
string i;
while (true)
{
Console.Write("Enter command: ");
i = Console.ReadLine();
if (i == "exit")
{
serialPort1.Close();
break;
}
else if (i == "1")
{
// Turn LED's on and pass argument "test"
serialPort1.Write("ON test\n");
}
}
}
}
我知道我的连接正常并且我的命令正在发送,因为如果我将Arduino中的ON函数编程为没有参数的工作,那么它的工作效果很好。但是,如果我发送" ON"命令并在空格后包含参数,或者一般使用空格,Arduino不能正确读取它。
你知道为什么空间在C#中搞乱了我的串口命令吗?谢谢你的帮助。
以下是我在Arduino中所做的一个简单示例:
#include "SerialCommand.h"
#include <Adafruit_NeoPixel.h>
SerialCommand sCmd;
#define PIN7 7
// Strip of LED's
Adafruit_NeoPixel testStrip = Adafruit_NeoPixel(10, PIN7, NEO_GRB + NEO_KHZ800);
uint32_t testStripColor = 0xFFFFFF;
void setup() {
Serial.begin(115200);
sCmd.addCommand("ON", lightsOn);
sCmd.addCommand("OFF", lightsOff);
testStrip.begin();
testStrip.show();
}
void loop() {
sCmd.readSerial();
}
void lightsOn() {
char *lightSet;
lightSet = sCmd.next(); // Read argument
if (strcmp(lightSet, "test") == 0) {
for (int i=0; i < testStrip.numPixels(); i++)
{
testStrip.setPixelColor(i, testStripColor);
}
testStrip.show();
}
}
void lightsOff() {
char *lightSet;
lightSet = sCmd.next(); // Read argument
if (strcmp(lightSet, "test") == 0) {
testStrip.clear();
testStrip.show();
}
}
答案 0 :(得分:0)
请尝试:
serialPort1.WriteLine("ON test");