1
我想创建一个Arduino Leonardo和C#之间的通信。Arduino和C#串行端口“崩溃”
刚才,Arduino的软件发送一个简单的消息(环路)串行端口:
void setup() {
Serial.begin(9600);
analogReference(INTERNAL);
}
void loop() {
Serial.println("test");
delay(500);
}
C#只尝试读取这些信息,并打印出来的外壳:
public class Program
{
private SerialPort mySerialPort;
static void Main(string[] args)
{
Program p = new Program();
Console.WriteLine("PORTS: " + String.Join(" ", p.getSerialPortsList())+ ", enter to start.");
Console.Read();
p.SerialRead("COM6");
}
public String[] getSerialPortsList()
{
string[] ports = SerialPort.GetPortNames();
return ports;
}
public void SerialRead(String com)
{
mySerialPort = new SerialPort(com, 9600, Parity.None, 8, StopBits.One);
Console.Read();
Console.WriteLine("Incoming Data:");
SerialRead sr = new SerialRead();
Thread rs = new Thread(sr.StartRead);
sr.SetMySerialPort(mySerialPort);
rs.Start();
while (!rs.IsAlive);
Console.Read();
sr.SetSuspendThread(true);
rs.Join();
}
}
public class SerialRead
{
private Boolean suspendThread = false;
SerialPort mySerialPort;
public void StartRead()
{
mySerialPort.Open();
Thread.Sleep(500);
int i = 0;
while (!suspendThread)
{
i++;
Console.WriteLine(i + ": " + mySerialPort.ReadLine());
Thread.Sleep(500);
}
}
public void SetMySerialPort(SerialPort mysp){ mySerialPort = mysp; }
public void SetSuspendThread(Boolean a){ suspendThread = a; }
}
这个C#软件的输出取决于。如果我在Arduino IDE上使用串行监视器,那么我会正确接收字符串的流(每个500毫秒一个)。否则,C#软件会冻结。有时候,我会收到一些字符串,我们可以看到this figure;但几乎所有的时间,软件不给任何字符串,我们可以看到here。之后,软件冻结(因此,如果我按下输入shell不响应)。
您能否建议一个解决方案以获得流畅的字符串流,并且 - 从而读取Arduino在串行端口上发送的每条消息?
我使用Window 10 x64作为操作系统和COM6(它是一个USB 2.0)。