2013-12-12 2 views
0

Я пытаюсь получить код на Arduino для связи с моей программой на C#, чтобы включить и выключить встроенный светодиод (контакт 13). Это код, который я загрузил в 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 и получил светодиод работать! (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(); 
} 

Любая помощь была бы принята с благодарностью. Я вижу, когда я нажимаю кнопки C#, на которые Ardiuno получает какую-то команду, и он работает с кодом, который я загрузил в ссылке выше ... Я вытягиваю свои волосы ...

+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

это несколько вещей, которые вы можете рассмотреть.

Эта функция вызывается всякий раз, когда данные поступают в соответствующий последовательный порт (для Arduino Mega и должная существуют другие функции, такие как 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, чтение и значения Writting на цифровые и аналоговые контакты и т.д. ...) от C# Применение

Смежные вопросы