これ何て呼びますか

openFrameworks-複数台Arduino間のシリアル通信

皆様,初めまして.

私は現在,複数台のArduinoとopenFrameworksとでシリアル通信を実現しようとしていますが,
そこで一つ問題が生じました.

シリアル通信に関してはofSerialクラスを利用しようと考えていましたが,下記の例のように,
ofSerialクラスのインスタンスを複数作ろうとしただけで,プログラム実行のどこかでエラーが出てしまいます.

(例)
class testApp : public ofBaseApp{

ofSerialserialA;
ofSerialserialB;
}

openFrameworksのHPを観ると,ofSerialクラスのドキュメントには
”the ofSerial class can attempt to communicate with the first available device it finds.”
とありますが,これはofSerialクラスでは一つのデバイスとしかシリアル通信が出来ない,
という意味なのでしょうか?
また,もしそうならば,openFrameworks上から複数台のシリアルデバイスと通信する方法はあるのでしょうか?

プログラミング初心者で誠に恐縮ですが,皆様のお力をお借りしたく思います.
よろしくお願いいたします.

A 回答 (2件)

>これを実行すると


>ofSerial: listing devices (0 total)
>という結果になってしまいます.これは,Arduinoを何台接続しても代わらない状況です.

こちらについてだけ…

>VisualStudio2008 ExpressEdition
とのことですが、プロジェクトの文字セットは何になっていますか?
of_preRelease_v0061_vs2008_FAT.zipを展開してみましたがUNICODEでは正しく動作しません。
# ofSerial::enumerateWin32Ports()でコールしているSetupDiGetDeviceRegistryProperty()がUNICODEで返却してきて、その後のstrstr()で正しく検索できない。

上記のデバイス列挙で失敗して、ofSerial:setup()も正しく動作していない。
という可能性はありませんか?
    • good
    • 0
この回答へのお礼

ご回答,ありがとうございます.

文字セットのご指摘を受けて,openFrameworksではなく,開発環境側に問題があるのではと考え,VisualStudio2008 ExpressEditionを再インストールしたところ,複数Arduinoとのシリアル通信が出来るようになりました.

皆様,本当にありがとうございました.

お礼日時:2010/08/10 14:14

>プログラム実行のどこかでエラーが出てしまいます.



どこで発生しているのか、デバッグ環境なりで特定して下さい。

>これはofSerialクラスでは一つのデバイスとしかシリアル通信が出来ない,という意味なのでしょうか?

通常、シリアルポートは複数で共有することはできません。
無理矢理共有しようとすると、データが混ざってしまうことになります。
# 実際にはOS側で排他制御していると思われますが。

serialA.setup()
serialB.setup()
で、それぞれのインスタンスで使用するシリアルポート(WindowsならCOM1/COM2等、LinuxなどならttyUSB0やttyUSB1、ttyS1など)を設定していますか?

この回答への補足

ご回答していただき,ありがとうございます.
説明が不足してしまい,申し訳ありませんでした.
正確には,コンパイルは出来るのですが,プログラム終了時にESCキーを押すと,
「serialExample_debug.exe の 0x7c94e4ff で初回の例外が発生しました: 0xC0000008: An invalid handle was specified」
などのエラーが出てしまい,正常に終了が出来なくなってしまいます.

また,setup()内で
serialA.setup()
serialB.setup()
でのデバイス指定してでの実行も,出来ます.
しかし,エラー内容や挙動などが開発に使うPC(VisualStudio2008 ExpressEdition)によってまちまちであったりなどしています.

また,ofSerialクラスの関数に,使用可能なシリアルデバイスを調べるenumerateDevices();というものがありますが,
これを実行すると

ofSerial: listing devices (0 total)

という結果になってしまいます.これは,Arduinoを何台接続しても代わらない状況です.

補足日時:2010/08/09 16:08
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!