C#:DataReceived serialPort未触发的事件处理程序

时间:2016-01-27 07:32:12

标签: c# serial-port

我正在编写一个相当基本的应用程序,其中一项任务是与Arduino Uno卡进行通信 我想将串行通信编写为一个单独的模块,因此表单只需要Arduino的输入,模块将处理serialPort的创建和打开以及从中读取数据。 出于测试目的,我为Arduino编写了一个程序,它将每半秒经过的毫秒数打印到serialPort。
在按下按钮后,我想用Arduino的输出填充我的Form的textBox 我在SerialComm类中创建了serialPort,虽然我附加了一个DataReceived事件处理程序,但它似乎永远不会触发。
以下是SerialComm类的代码:

raiseevent(){
alert('hi');

在表单中我从这样调用Arduino中的文本:(我有一个按钮(Button1),一个用于选择COM端口的组合框(comboBox1)和一个表格上的textBox)

class SerialComm
{
    private List<String> availablePorts;
    private SerialPort arduino;
    private string receivedText;

    public String[] portList
    { get
        {
            EnumPorts();
            return availablePorts.ToArray();
        }
    } 
    public string receivedData
    {
        get
        {
            return receivedText;
        }
    }

    public void InitialiseSerial()
    {
        arduino = new SerialPort();
        arduino.BaudRate = 9600;
        arduino.DtrEnable = true;
        // Add event handler
        arduino.DataReceived += new SerialDataReceivedEventHandler(arduino_DataReceived);
    }

    public void EnumPorts()
    {
        availablePorts = new List<string>();
        foreach (string s in SerialPort.GetPortNames())
        {
            availablePorts.Add(s);
        }
    }

    public void StartMC(SerialPort serialPort, String portName)
    {
        arduino = serialPort;
        if (arduino.IsOpen)
        {
            arduino.Close();
        }
        else
        {
            //Initialise Serial Port
            arduino.PortName = portName;        
            arduino.Open();
        }          
    }

    //This never fires==================
    private void arduino_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        receivedText = arduino.ReadExisting();           
    }

    public void CloseMC()
    {
        if (arduino.IsOpen)
        {
            arduino.Close();
            arduino.Dispose();
        }
    }
}

您是否看到任何原因导致事件处理程序无法触发? 非常感谢您的帮助。

最诚挚的问候, 彼得

0 个答案:

没有答案