自分用のメモ書きを上回る内容ではありません。 以上

C#でserialportの使いかた


上の画像はトレバというCMOSカメラから画像データをマイコンが受け取ってシリアルポート(俗称らしい)でデータをPC側に送って
さらにそれを簡単な処理を施して表示したものです。

only C#2.0

そもそもRS-232Cはシリアル通信というプロトコルの規格に従っている・・

通信は通信クロック、データプロトコルという2大要素で成り立っている気がします。
しかし232CにはRX、TX、GNDピンしかマイコンでは使わないことが多いです。
通信速度は384,000bpsか、192000bpsがマイコンでは多いです。速度は出ないので気をつけて下さい。
より高速な通信は違う規格で行うのが良いでしょう(例えばUSBとか)。

実際は・・・

クラスはSerialPortを使います。ツールボックスでコンポネートです。
追加するとプロパティで機能を設定できるので重要なのは
BaudRateとPortNameです。
BaudRateは通信速度のことです。単位はbpsですので気をつけてください。
PortNameは使用するポートの番号です。デバイスマネージャで要確認です。

メッソドは

methodには
serialPort1.Open();
serialPort1.Close();
で初期化と、閉じです。

serialPort1.PortName = "COM"+textBox1.Text
テキストBOXからCOMポートを変える1文、コムポートは最初から固定でも任意でも可です。ただし、開いてるときにポートを変えないで下さい

serialPort1.Read(データ、データ量);
を使って受信したデータを読めます。他にもByte単位で読むとか、読む量指定とかできる関数があります。

イベントは

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
を使いました。これはあるデータ量を受け取るたびに割り込みがかかります。
ReceivedBytesThresholdプロパティがDataReceivedを呼び出すデータの量です。
既定値が1だから通信するたびにtrueになるります。なので好きな値に変えておきます。

追記

RTS、CTSについて。二つのピンはフロー制御に使われます。(別に使わなくてもいい)
フロー制御とはデータが目一杯で追いつけないからデータ送ってくんなという制御です。
この二つの線はハードウエアフロー制御に使われ、電気的にHighレベルで受信可、Lowレベルで受信不可です。
マイコンでは専用ピンがないことが多いので外部割り込みかソフトで周期的に確認してあげてください
タグ

このページへのコメント

もちろん出来ますが、どこでowlさんが躓いているのか
分かりませんのでアドバイスをするのは難しいです。
まず最初はハイパーターミナル(ウィンドウズなら)という
通信ソフトを使ってマイコンがデータを送っているか
調べてみたらどうでしょうか・

Posted by kazuyu(管理人) 2010年10月24日(日) 20:59:15

初めまして。
現在、FSR402 という圧力センサーを繋いだArduino UNOとPC間でポート通信を行い、圧力センサー側の値をVisualStudioC#で読み込もうとしているのですが、一向に先に進まず、困っています。
SerialPortコントロールではアナログ入力は読み込めないのでしょうか。

Posted by owl 2010年10月24日(日) 00:58:30

Wikiをはじめる

マイページ