簡體   English   中英

Arduino至C#數據接收

[英]Arduino to C# Data Receive

我今天早些時候已經問過這個問題,但是已經完善了我的代碼,所以在這里提出了一個新問題。

這是我目前的代碼:

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

我有一個帶有onButton,offButton和textboxInterface的C#程序。 這是我在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'*

有人可以告訴我我在做什么愚蠢的事...

首先,從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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM