打开Arduino LED

时间:2013-12-12 21:17:10

标签: c# arduino

我正在尝试通过我的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#按钮时,它可以使用我在上面的链接中下载的代码......我正在把我的头发拉出来......

2 个答案:

答案 0 :(得分:4)

您可能需要考虑几件事情。

只要数据到达相应的串口,就会调用此函数(对于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图书馆

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);
}