2013-12-16 3 views
0

오늘이 질문을 던졌지 만 코드를 수정하여 여기에 새로운 질문을 던지고 있습니다. 내가 onButton, offButton 및 textboxInterface와 C# 프로그램을Arduino to C# 데이터 수신

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#에서 가지고있는 코드입니다.

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

죄송합니다. 나는 그것을 수정하기에 충분한 코드가 있다고 생각했다. 앞으로는하지 않을 것입니다. –

+0

귀하의 textboxInterface에 문제가 있습니다. 새로운 가짜 winform 프로젝트를 만들고 텍스트 상자를 만들고 텍스트 속성에 액세스 할 수있는 코드를 시뮬레이트하고 해당 직렬 포트 내용을 코드와 비교하십시오. 텍스트 상자가 제대로 구성되지 않은 것과 같습니다 (직접 코드를 작성합니까? 복사 - 붙여 넣기?) – Kelmen

답변

0

먼저 serialPort1_DataReceived 선언에서 static을 제거하십시오. 폼의 인스턴스 필드에 액세스해야 static이 될 수 없습니다.

둘째,이 이벤트는 백그라운드 스레드에서 발생하며 해당 스레드에서 UI를 업데이트 할 수 없습니다. 텍스트 상자를 업데이트하려면 UI 스레드 호출을 마샬링해야합니다. 다음과 같은 내용 :

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