2012年1月5日 星期四

Arduino、RS232 與 C# 傳輸 - Communicates between the Arduino and C# by RS232

‧前言:藉由 How to interface the Arduino with C# 這篇教學範例,記述其操作步驟。
   感謝原作者,Thanks John。

‧目的:由 C# 經 RS-232 傳輸字串至 Arduino,再由 Arduino 回傳到 C# 顯示。

‧主要工具:
   - Arduino UNO x 1
   - Visual C# 2010 Express (Google搜尋下載試用)

‧參考資料:
   - Visual C#2010 精要剖析
   - Interacting with the Arduino with C#  <<原文請點選

‧流程說明:
1. 於Arduino撰寫程式,功能為接收來自 C# 的資料,再回傳出去。

2. 啟動 Visual C# 2010 Express - 新增專案 - Windows Form 應用程式。
3. 新增控制項,包括:
   - Label 控制項 x 2
   - comboBox 控制項 x 2
   - button 控制項 x 4
   - textBox 控制項 x 2
   - serialPort 控制項 x 1

4. 設定各控制項之屬性,如圖:


5. 加入程式碼:
5.1. 提供選取通訊埠和傳輸速率,在 InitializeComponent(); 後加入設定通訊參數之程式碼:

5.2. 在 btnStart "開始" 按鈕上點選兩下,於 Click 事件處理程序中加入啟動通訊之程式碼:

5.3. 在 btnStop "結束" 按鈕上點選兩下,於 Click 事件中加入停止通訊之程式碼:

5.4. 在 btnSend "傳送" 按鈕上點選兩下,於 Click 事件中加入傳送資料之程式碼:

5.5. 先點選 serialPort1,在屬性視窗的事件(閃電圖示)中,DataReceived事件上點選兩下,即在 DataReceived 事件處理程序中,與事件前加入通訊埠處理資料之程式碼:

5.6. 在 btnClear "清除" 按鈕上點選兩下,於 Click 事件中加入清除資料之程式碼:

6. 裝置連線:
7. 預期結果:

4 則留言:

  1. 感謝教學!

    如果想把傳送左既MESSAGE RESET 應該點做


    我想係C# INPUT 1 LED 燈ON 唔係1 LED OFF

    input 第一次 1 LED ON
    但當再INPUT 2 時LED 依然ON

    可以解決嗎????

    int led=13;
    int a=0;


    void setup()
    {
    Serial.begin(9600);

    pinMode(13, OUTPUT); //RS232初始化設定傳輸速率(BaudRate)9600bps
    }

    void loop()
    {
    //當有接收到資料時
    a=Serial.read();
    while(Serial.available())
    { //當有接收到資料時
    Serial.write(Serial.read()); //讀取資料,再回傳寫出去

    a=Serial.read();
    if(a=1)
    {
    digitalWrite(13, HIGH);

    }
    if(a!=1)
    {
    digitalWrite(13, LOW);

    }

    }

    回覆刪除
    回覆
    1. 也有遇過相似的問題,如果把DigitalWrite的第13接腳,接到analog監控,就可發現值會飄移。
      試試把3.3V接AREF看看。

      刪除
  2. 為什麼txtOuput會找不到 沒辦法輸出 發生錯誤

    回覆刪除
  3. 發生 System.UnauthorizedAccessException
    HResult=-2147024891
    Message=拒絕存取通訊埠 'COM5'。
    Source=System
    StackTrace:
    於 System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
    於 System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
    於 System.IO.Ports.SerialPort.Open()
    於 test.Form1.btnStart_Click(Object sender, EventArgs e) 於 c:\users\sugar\documents\visual studio 2015\Projects\test\test\Form1.cs: 行 56
    InnerException:
    請求協助~謝謝您

    回覆刪除