繁体   English   中英

C#与arduino的串行通讯

[英]C# Serial communcation with arduino

我试图将字符串从arduino(leonardo)发送到C#程序。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;

namespace ConsoleApplication2
{
class Program
{

    static void Main(string[] args)
    {
        SerialPort mySerialPort = new SerialPort("COM7");

        mySerialPort.BaudRate = 9600;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.None;


        mySerialPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);

        mySerialPort.Open();

        Console.WriteLine("Press any key to continue...");
        Console.WriteLine();
        Console.ReadKey();
        mySerialPort.Close();
    }

    static void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
        Console.WriteLine("Data Received:");
        Console.Write(indata);
    }
}
}

这是我从msdn示例中复制的代码,以尝试了解它的作用。 我下面的arduino代码只是通过com端口发送hello世界,延迟为1000。

void setup ()
{

 Serial.begin(9600);

 }


void loop(){

 Serial.println("Hello World");
 delay(1000);
}

我的arduino正在使用C7程序中定义的COM7。 当我运行机器人程序时,C#程序永远不会进入数据接收事件处理程序。 因此没有收到任何数据。 我真的想让tis工作:)

亲切的问候

我将代码切换到Windows窗体应用程序,但仍无法正常工作。 然后,我发现了一个关于串行通信话题C#关于Arduino的莱昂纳多这里

我必须这样做:

        serial.DtrEnable = true;
        serial.RtsEnable = true;

我认为我的问题已经解决。

控制台应用程序没有消息循环,因此自然不会响应事件。 您只有一个线程,它将被阻塞在Console.ReadKey() 可以使用从串行端口进行的同步读取,或者,如果您希望使用基于事件的模型,请将此代码移至基于Windows的应用程序。

有关同步示例, 请参见以下MSDN示例

while (_continue)
{
    try
    {
        string message = _serialPort.ReadLine();
        Console.WriteLine(message);
    }
    catch (TimeoutException) { }
}

以上仅是摘录-完整示例演示了设置超时值等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM