我正在尝试通过我的C#程序联系Arduino上的代码,以打开和关闭板载(引脚13)LED。这是我加载到Arduino中的代码:
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
if (Serial.available() > 0)
{
int b = Serial.read();
if (b == 1)
{
digitalWrite(13, HIGH);
}
else if (b == 0)
{
digitalWrite(13, LOW);
}
Serial.flush();
}
}
我找到并下载了this code并让LED工作了! (万岁!)
我尝试使用简单的OnButton和OffButton将代码反向工程化,但它不起作用。有人可以看看下面的代码,告诉我是否遗漏了一些明显的东西。
using System.IO;
using System.IO.Ports;
public static System.IO.Ports.SerialPort serialPort1;
private delegate void LineReceivedEvent(string line);
private void establishConnection()
{
System.CompnentModel.IContainer components = new System.ComponentModel.Container();
serialPort1 = new System.IO.Ports.SerialPort(components);
serialPort1.PortName = "COM7";
serialPort1.BaudRate = 9600;
serialPort1.DtrEnable = true;
serialPort1.Open();
}
private void terminateConnection()
{
serialPort1.Close();
}
private void OnButton_Click(object sender, EventArgs e)
{
establishConnection();
serialPort1.Write(new byte[] { Convert.ToByte("1") }, 0, 1);
terminateConnection();
}
private void OffButton_Click(object sender, EventArgs e)
{
establishConnection();
serialPort1.Write(new byte[] {Convert.ToByte("0") }, 0, 1);
terminateConnection();
}
非常感谢任何帮助。我可以看到当我点击Ardiuno正在接收某种命令的C#按钮时,它可以使用我在上面的链接中下载的代码......我正在把我的头发拉出来......
答案 0 :(得分:4)
您可能需要考虑几件事情。
serialEvent()
功能。 只要数据到达相应的串口,就会调用此函数(对于arduino Mega和Due还有其他功能,如serialEvent1()
,serialEvent2()
等等......)
这将是你的arduino的代码:
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
if (inChar == '0')
digitalWrite(13,LOW);
else if(inChar == '1')
digitalWrite(13,HIGH);
}
}
Firmata Library实现了Firmata协议,用于与主机上的软件进行通信。
Arduino IDE附带一个firmata示例,您可以通过串口设置所有设置以便与硬件进行通信。通过这种方式,您可以将firmata示例部署到您的arduino并从pinModes
应用程序
C#
,读取和写入数字和模拟引脚等值......)
答案 1 :(得分:4)
Arduino代码:
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
if (Serial.available() > 0)
{
int b = Serial.read();
if (b == 1)
{
digitalWrite(13, HIGH);
}
else if (b == 0)
{
digitalWrite(13, LOW);
}
Serial.flush();
}
}
C#代码:
using System.IO;
using System.IO.Ports;
public static System.IO.Ports.SerialPort serialPort1;
private delegate void LineReceivedEvent(string line);
public Form1()
{
InitializeComponent();
System.CompnentModel.IContainer components = new System.ComponentModel.Container();
serialPort1 = new System.IO.Ports.SerialPort(components);
serialPort1.PortName = "COM7";
serialPort1.BaudRate = 9600;
serialPort1.DtrEnable = true;
serialPort1.Open();
}
private void OnButton_Click(object sender, EventArgs e)
{
serialPort1.Write(new byte[] { Convert.ToByte("1") }, 0, 1);
}
private void OffButton_Click(object sender, EventArgs e)
{
serialPort1.Write(new byte[] { Convert.ToByte("0") }, 0, 1);
}