2013-12-12 78 views
0

我想要通过我的C#程序联系Arduino上的代码来打开和关闭板载(引脚13)LED。这是我已经加载到Arduino的代码:打开Arduino LED

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的工作! (Hooray!)

我试图用简单的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

多少次,你实际上是建立,你是不是终止连接? –

+0

糟糕,忘记在那里输入Terminate行。我正在测试有没有它。 –

+0

我刚添加完整的代码,包括terminateConnection(); –

回答

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

There有几件事你可能要考虑。

每当数据到达相应的串口,该功能被称为(用于Arduino的米加和由于还有其他的功能,如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例如,这一个你拥有的一切设置,能够通过串口与硬件进行通信。这样你可以从你C#应用的firmata例如部署到您的Arduino和配置的一切(设置pinModes,阅读和书面方式值的数字和模拟引脚等)