void loop() if (Serial.available() > 0) str_in = Serial.read(); Serial.print("key in chart is : "); Serial.println(str_in); delay(1000); Serial.printl

Similar documents
PowerPoint 簡報

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

1

¬¬

投影片 1

The golden pins of the PCI card can be oxidized after months or years

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

投影片 1


<30312E20B9EFB7C5AF66BEC7A4A4A175A5CDAC7ABE69B3B1A176AABABDD7AA522E706466>

Microsoft PowerPoint - VB14.ppt

3. 企 业 债 券 : 公 司 债 券 : 5. 证 券 公 司 债 券 : 6. 企 业 短 期 融 资 券 : 7. 中 期 票 据 : 8. 资 产 支 持 证 券 : 9. 国 际 开 发 机 构 人 民 币 债 券 : 10. 中 小 非 金 融 企 业 集 合 票 据 例 题? 判 断


優質居所 攜手共建


用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

AN INTRODUCTION TO PHYSICAL COMPUTING USING ARDUINO, GRASSHOPPER, AND FIREFLY (CHINESE EDITION ) INTERACTIVE PROTOTYPING


回 到 旅 館 上 網 查 了 一 下, 這 部 三 輪 機 車 是 義 大 利 比 雅 久 的 MP3, 是 比 雅 久 在 2005 年 5 月 發 表 的 創 新 設 計,2006 年 正 式 上 市 後 來 也 有 幾 家 重 機 車 廠 跟 進 開 發 這 種 前 兩 輪 後 一 輪 的



多媒體應用 13 新增專案並完成版面配置 <ExMusic01> <activity_main.xml> ImageView ID imgplay ImageView ID imgstop ImageView ID imgfront TextView ID txtsong TextView ID t

書面

教 务 信 息 教 学 日 常 运 行 工 作 4 月 6 日, 教 务 部 高 丽 琴 老 师 参 加 南 昌 市 教 育 局 2016 年 中 小 学 教 师 资 格 认 定 工 作 培 训 会 2016 年 教 师 资 格 认 定 工 作 是 从 省 考 向 国 考 过 渡 后 的 第 一 次

计算机网络与经济(二).doc

Microsoft PowerPoint ?????????3 [Compatibility Mode]

省政协委员陈志实:知识产权市场化须以法治方式推:大奖娱乐官方网站 进

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

1

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

* 2

試卷一

Photoshop CS3 影像創造力 基礎講堂 8 學習流程 學習重要性 學習難度 必學指令工具 實作應用範例 創造舞台燈光的漸層繪圖 延伸學習 雜訊與半透明漸層 8-1 Photoshop Photoshop 8 136

<33352E20C0B3A5CEB2D5BEC7A7DEB34EB5FBBBF9A4A4C3C4B5C7AC72A9CAAABAACE3A873B669AE692E706466>

汽 車 設 計 要 能 容 許 方 便 高 齡 者 進 出, 先 天 上 必 須 要 有 較 高 的 車 頂 較 低 的 底 盤 寬 敞 的 座 位, 這 對 講 究 流 線 造 型 的 汽 車 外 型 的 設 計 來 說, 本 來 就 是 一 個 很 困 難 的 問 題 然 而 汽 車 設 計 或

FETnet - Acer Iconia Tab  (A500 Wi-Fi 版) 平板電腦操作指南

<32372E20B077A8EBABE1B7CBA5DEA4A3A650B260ABD7B9EFAA76C0F8AFABB867AEDAABACC056B4D5AF66AABAC0F8AEC4B1B4AFC12E706466>

China Academic Journal Electronic Publishing House. All rights reserved.

China Academic Journal Electronic Publishing House. All rights reserved.


幻灯片 1


MVB-1001.DOC

Microsoft Word - 12 hhg doc

Microsoft Word - HHG 10 Page 001.doc

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

如何將 WinCE5.0 程式昇級為 WEC7.0 程式 平台比較 CPU PXA270 CPU AM335x CPU 型號 WP-8x3x/WP-8x4x WP-514x/WP-515x VP-25Wx WP-8x2x/WP-9x2x WP-523x VP-x23x 作業系統版本 WinCE 5.

黃 花 崗 讀 者 子 日 先 生 在 大 陸 遙 祝 雜 誌 同 仁 中 秋 好! 參 加 過 八 年 抗 戰 的 國 民 革 命 軍 前 中 將 羅 澄 先 生 告 訴 黃 花 崗 雜 誌 主 編 說 : 你 們 做 的 就 是 在 歷 史 和 文 化 上 正 本 清 源 繼 往 開 來 的 大


CC213

untitled


導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式

Microsoft Word - HHG 14 Page 001.doc

Microsoft Office SharePoint Server MOSS Web SharePoint Web SharePoint 22 Web SharePoint Web Web SharePoint Web Web f Lists.asmx Web Web CAML f

Java 程式設計初階 第 5 章:基本輸出入 & 流程控制

Chapter 16 集合

Microsoft Word - Page doc

Microsoft Word - ACI chapter00-1ed.docx

AutoCAD 用戶如何使用 ArchiCAD

( ) (1) (2) (3) (4) 2

目錄 目錄 關於手冊 NModbus API 函數 Master API CreateRtu CreateIp CreateAscii WriteSin

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4

ActiveX Control

PaPaGO! PaPaGO! PaPaGO! PaPaGO! PaPaGO! PaPaGO!


Process Data flow Data store External entity 6-10 Context diagram Level 0 diagram Level 1 diagram Level 2 diagram

<4D F736F F D B0D3B77EC3FEA7DEC3C0C476C1C9A5BFA6A1B8D5C3442DB57BA6A1B35DAD702DBEC7ACEC2E646F6378>

鬆 建 立 強 制 遵 循 法 規 的 有 效 與 彈 性 政 策, 並 防 止 資 料 外 洩 Messaging Gateway 硬 體 裝 置 整 合 了 Symantec Data Loss Prevention 精 密 的 結 構 化 資 料 比 對 技 術, 該 技 術 能 分 析 您

Outlook 2007 設定說明 Offic 企業郵件 / 虛擬主機郵件 / Office 365

投影片 1

概述

封面-12

untitled

<4D F736F F D20BABAC0A4D7A8B5DD20B5DA3635C6DAA3A C4EAB5DA37C6DAA3A9A3A8D6D0CEC4A3A9>

Microsoft Word - Sable User's Manual.doc

untitled

Autodesk Product Design Suite Standard 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

Transcription:

Copyright@2010, YZU Optimal Design Laboratory. All rights reserved. 作者 : 林怡錦 (2012-05-04); 推薦 : 徐業良 (2012-05-05) 附註 : 本文為元智大學機械系自動化機械設計課程 Arduino 使用教材 於 Visual Studio C# 2010 使用 COM port 通訊 本文將說明如何於 Visual Studio C# 2010(VC#) 的 Windows Form 應用程式專案中 使用 COM port 通訊並以 Arduino Uno 進行實作 1. 基本輸入 / 輸出範例 COM port 又稱為 Serial Port( 序列埠 ), 為在裝置及微處理器之間傳送資料所使用的通道, 依其序列傳輸協議的不同可以區分為 RS-232 RS-422 RS-485 Univeral Serial Bus(USB) 以及 RJ-45 COM port 可以用於連接印表機 舊式序列埠滑鼠以及行動裝置等裝置至電腦 本節將使用具有簡單輸入 / 輸出的 Arduino 程式, 說明如何編寫 VC# 以進行如在 Arduino Serial Monitor 上所見的簡單輸入, 並以手動觸發讀取事件 1.1 Arduino Uno 程式 以下為一具有簡單輸入輸出 Arduino 程式之程式碼, 其鮑率設定為 9600, 而當使 用者輸入字元並傳送時,Arduino 將會回傳 key in chart is : 你所輸入的字元, 並以 間隔時間一秒回傳數字 1~5 如圖 1 char str_in; void setup() Serial.begin(9600); 1

void loop() if (Serial.available() > 0) str_in = Serial.read(); Serial.print("key in chart is : "); Serial.println(str_in); delay(1000); Serial.println ('1', BYTE); delay(1000); Serial.println ('2', BYTE); delay(1000); Serial.println ('3', BYTE); delay(1000); Serial.println ('4', BYTE); delay(1000); Serial.println ('5', BYTE); delay(1000); 2

圖 1. Arduino Serial Monitor 視窗 1.2 VC# 程式實作 本節將說明如何編寫 VC# 程式, 以進行簡單輸入與按鍵觸發讀取事件 程式開始運行後, 首先設定程式中會使用到的 COM port 名稱再開啟該連線, 於命令區輸入指令, 按下傳送鍵將指令經由 COM port 連線傳給 Arduino, 再按接收鍵觸發讀取事件, 程式結束時將關閉該 COM port, 程式流程如圖 2 3

開始 於 TextBox 中輸入指令 按下傳送按鍵 於 TextBox 中輸入欲使用的 COM port 名稱 傳送指令至 Arduino SerialPort.Write() 按下開啟 COM port 按鍵 開啟 COM port SerialPort.Open() 按下接收按鍵 接收 Arduino 回傳的訊息 SerialPort.Read() 按下關閉 COM port 按鍵 關閉 COM port SerialPort.Close() 圖 2. 程式流程圖 (1) VC# 新建專案與介面設置 先於 VC# 中建立新的 Windows Form 應用程式專案, 如圖 3 以滑鼠快速點擊兩下或拖曳工具箱中的 SerialPort 元件圖示, 如圖 4, 至 Form1 圖形視窗畫面中, 即可在 Form1 中新增 SerialPort 元件 以滑鼠單擊 Form1 圖形視窗中的 SerialPort 元件, 即可於屬性欄中檢視與編輯其基本屬性, 若畫面中並無屬性欄可點選上排工具列圖示以加入屬性欄, 如圖 5 基本常用 SerialPort 屬性有 Name BaudRate 以及 PortName Name 為 SerialPort 於程式內部的變數名稱 ;BaudRate 即鮑率, 用以表示 COM port 傳輸速率其單位為單位時間內傳輸的信號數, 傳送與接收裝置需使用相同鮑率, 才能正確地接收訊號, 本文中之 Arduino 程式已設定鮑率為 9600, 故此欄位也應填入 9600 PortName 為用來通訊的 COM port 名稱 4

圖 3. 新增 Windows Form 應用程式專案畫面 圖 4. 工具箱中的 SerialPort 元件 5

圖 5. 屬性視窗圖示位置 由於每次使用的 COM port 名稱並不完全相同, 所以加入 TextBox 元件以填入該次使用的 COM port 名稱, 再加入一個 TextBox 元件以填入欲傳送給 Arduino 的指令, 加入 4 個 Button 元件以觸發開啟 COM port 傳送指令 讀取訊息以及關閉 COM port 事件 元件類型 本文程式碼中的名稱以及用途於表 1, 參考程式介面如圖 6 表 1. 視窗介面元件說明 元件類型 程式碼中名稱 用途 TextBox txbcom 填入該次使用的 COM port 名稱 Button btnopen 點選以開啟 COM port 連線 TextBox txbwrite 填入欲傳送的指令 Button btnwrite 點選以傳送 txbwrite 內的指令給 Arduino Button btnread 點選以讀取 Arduino 的輸出 Button btnclose 點選以關閉 COM port 連線 6

圖 6. 參考程式介面 (2) VC# 程式編寫 接下來開始編寫程式碼的部分, 首先加入 System.IO.Ports 命名空間, 才能使用 COM port 的相關功能, 程式碼如下 : using System.IO.Ports; 快速連續點擊兩下編輯視窗介面中的 btnopen 元件,VC# 將會自動產生按鍵觸發 事件 當 btnopen_click 事件被觸發,SerialPort1 的 PortName 將被 txbcom 中的文字 取代, 再開啟該 COM port 連線供應用程式使用, 程式碼如下 : private void btnopen_click(object sender, EventArgs e) serialport1.portname = txbcom.text; serialport1.open(); 快速連續點擊兩下編輯視窗介面中的 btnwrite 元件, 以產生按鍵觸發事件 當 btnwrite_click 事件被觸發, 將會藉由 COM port 傳送 txbwrite 元件中的文字指令, 相 當於點擊 Arduino Serial Monitor 中的 Send 按鍵, 程式碼如下 : private void btnwrite_click(object sender, EventArgs e) 7

serialport1.write(txbwrite.text); 快速連續點擊兩下編輯視窗介面中的 btnread 元件, 以產生按鍵觸發事件 當 btnread_click 事件被觸發, 將會讀取輸入緩衝區中, 在換行符號 (\n) 前之內容, 並於 輸出視窗中顯示, 程式碼如下 : private void btnread_click(object sender, EventArgs e) Console.Write(serialPort1.ReadLine()); 快速連續點擊兩下編輯視窗介面中的 btnclose 元件, 以產生按鍵觸發事件 當 btnclose_click 事件被觸發, 將會關閉使用中的 COM port 連線, 程式碼如下 : private void btnclose_click(object sender, EventArgs e) serialport1.close(); 1.3 透過 VC# 與 Arduino 通訊 完成上述 Arduino 與 VC# 程式後, 先於裝置管理員中查看 Arduino 所用的 COM port 名稱, 如圖 7 可以看到圖中 Arduino 使用的 COM port 名稱為 COM7 8

圖 7. 裝置管理員查看 COM port 名稱 執行 VC# 程式, 於 txtcom 元件中填入 COM7, 點選 btnopen 以開啟該 COM port 連線供應用程式使用 再於 txtwrite 中填入指令後, 點選 btnwrite, 傳送指令給 Arduino 點選數次 btnread, 可在輸出區看到 VC# 依序輸出所接收到的一行一行輸入, 最後結果會和在 Aruino Serial Monitor 上所看到的一樣, 如圖 8 9

圖 8. 程式運行的結果 2. 進階範例 上述範例程式在讀取 COM port 回傳資料的時候, 需手動觸發讀取事件, 但有時會希望程式可以在一有輸入時便自動讀取與顯示 而且每次所使用的 COM port 名稱皆不完全相同, 所以如果可以在程式開始執行時便自動搜尋 COM port 名稱, 以選擇取代手動輸入的方式將會更方便使用 接下來說明如何改寫 VC# 以達成這兩項功能 2.1 VC# 程式改寫 (1) 自動讀取與顯示功能 若想要可以自動讀取與顯示, 需要在 Form1 中新增 DataReceived 事件, 當有新 的訊息傳入時, 執行 serialport1_datareceived 函數將收到的訊息讀取與顯示, 程式碼 如下 : 10

public Form1() InitializeComponent(); serialport1.datareceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); void serialport1_datareceived(object sender, SerialDataReceivedEventArgs e) String data = serialport1.readline(); Console.Write("datareceived: " + data); (2) 自動搜尋所有 COM port 名稱 若要可以在開啟時搜尋電腦所有 COM port 名稱, 可將 txtcom 由 TextBox 元件改成可顯示選項的 ComboBox 元件並命名為 cbbcom 再快速連續點擊視窗介面, 產生 Form1_Load 事件 當 Form1 開啟時, 會先搜尋電腦所有 COM port 名稱, 並將其名稱儲存在 serialports 陣列中, 再逐一加入 cbbcom 元件的項目中, 程式碼如下 : private void Form1_Load(object sender, EventArgs e) string[] serialports = SerialPort.GetPortNames(); foreach (string serialport in serialports) cbbcom.items.add(serialport); if (cbbcom.items.count > 0) cbbcom.selectedindex = 0; 而在開啟 COM port 時, 由於不再是使用 txtcom 元件提供 COM port 名稱, 而 是使用 cbbcom 中被選中的項目名稱, 所以程式碼需改寫成 : private void btnopen_click(object sender, EventArgs e) 11

serialport1.portname = (string)cbbcom.selecteditem; serialport1.open(); 完成上述更改後, 即可自動搜尋 COM port 名稱以及自動顯示接收到的訊息 2.2 透過 VC# 與 Arduino 通訊 修改後的程式運作如圖 9, 可以經 ComboBox 元件選擇 COM port 名稱, 並且自 動跳出回傳之訊息, 在使用上將方便許多 圖 9. 修改後程式運作 參考資料 : MSDN: http://msdn.microsoft.com/zh-tw/library/system.io.ports.serialport.aspx 12