我正在编写一个相当基本的应用程序,其中一项任务是与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();
}
}
}
您是否看到任何原因导致事件处理程序无法触发? 非常感谢您的帮助。
最诚挚的问候, 彼得