2013-12-16 2 views
0

Я сегодня задал этот вопрос, но уточнил свой код, поэтому задаю здесь новый вопрос.Arduino to C# Получение данных

Это код, у меня есть на данный момент:

Arduino Код:

void setup() 
{ 
pinMode(13,OUTPUT); 
digitalWrite(13,LOW); 

Serial.begin(9600); 
} 

void loop() 
{ 
if(Serial.available() > 0) 
{ 
    char letter = Serial.read(); 

    if (letter == 'A') 
    { 
    digitalWrite(13,HIGH); 
    Serial.println("THE LED IS ON"); 
    } 
    else if (letter == 'B') 
    { 
    digitalWriter(13,LOW); 
    Serial.println("THE LED IS OFF"); 
    } 
} 
} 

У меня есть C# программы с onButton, offButton и textboxInterface. Это код, который у меня есть на C#.

C# код: (?)

using System.IO.Ports; 

public partial class Form1: Form 
{ 
public static System.IO.Ports.SerialPort serialPort1; 
private delegate void LineReceivedEvent(string line); 

public Form1() 
{ 
    InitizlizeComponent(); 
    System.ComponentModel.IContainer components = new System.ComponentModel.Container(); 
    serialPort1 = new System.IO.Ports.SerialPort(components); 
    serialPort1.PortName = "COM7"; 
    serialPort1.BaudRate = 9600; 
    serialPort1.DtrEnable = true; 
    serialPort1.Open(); 
    serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); 
} 

private static void serialPort1_DataReceived(object sender, SerialDataEventReceivedEventArgs e) 
{ 
    SerialPort sp = (SerialPort)sender; 
    string indata = sp.ReadExisting(); 
    textboxInterface.Text = indata; 
} 

Я думаю, что это в основном правильно, единственная ошибка я получаю как последний textboxInterface с ошибкой придумывают говоря: * Ссылка на объект требуется для нестатических полей, методы или свойства «Arduino_Interface.Form1.textboxInterface» *

Может кто-то пожалуйста, покажи мне, что глупо, что я делаю ...

+0

Не удаляйте свой вопрос, а затем отправляйте то же самое. У вас есть кнопка редактирования. –

+0

Хорошо, извините. Я думал, что в моем коде было достаточно изменений, чтобы merrit его. Не буду делать в будущем. –

+0

что-то не так с вашим текстовым полем. попробуйте создать новый проект-фиктивный winform и создайте текстовое поле, смоделируйте код для доступа к свойству Text, без каких-либо из этих продуктов serialport, сравните его с вашим кодом, это похоже на то, что ваше текстовое поле неправильно сконфигурировано (вы его вручную кодируете или копия-н-вставить?) – Kelmen

ответ

0

Сначала удалите static из декларации serialPort1_DataReceived. Вам нужен доступ к полям экземпляра формы, поэтому он не может быть static.

Во-вторых, это событие будет поднято на фоновом потоке, и вы не сможете обновить пользовательский интерфейс из этого потока. Вам нужно будет маршировать вызов в поток пользовательского интерфейса, чтобы обновить текстовое поле. Что-то вроде этого:

private void serialPort1_DataReceived(object sender, SerialDataEventReceivedEventArgs e) 
{ 
    SerialPort sp = (SerialPort)sender; 
    string indata = sp.ReadExisting(); 
    this.BeginInvoke(new Action(() => textboxInterface.Text = indata)); 
}