• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:openFrameworks-複数台Arduino間のシリアル通信)

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

このQ&Aのポイント
  • openFrameworksと複数台のArduinoを使用してシリアル通信をする方法について
  • ofSerialクラスのインスタンスを複数作るとエラーが発生する原因について
  • openFrameworks上で複数台のシリアルデバイスと通信する方法について

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

>これを実行すると >ofSerial: listing devices (0 total) >という結果になってしまいます.これは,Arduinoを何台接続しても代わらない状況です. こちらについてだけ… >VisualStudio2008 ExpressEdition とのことですが、プロジェクトの文字セットは何になっていますか? of_preRelease_v0061_vs2008_FAT.zipを展開してみましたがUNICODEでは正しく動作しません。 # ofSerial::enumerateWin32Ports()でコールしているSetupDiGetDeviceRegistryProperty()がUNICODEで返却してきて、その後のstrstr()で正しく検索できない。 上記のデバイス列挙で失敗して、ofSerial:setup()も正しく動作していない。 という可能性はありませんか?

maechin1121
質問者

お礼

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

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>プログラム実行のどこかでエラーが出てしまいます. どこで発生しているのか、デバッグ環境なりで特定して下さい。 >これはofSerialクラスでは一つのデバイスとしかシリアル通信が出来ない,という意味なのでしょうか? 通常、シリアルポートは複数で共有することはできません。 無理矢理共有しようとすると、データが混ざってしまうことになります。 # 実際にはOS側で排他制御していると思われますが。 serialA.setup() serialB.setup() で、それぞれのインスタンスで使用するシリアルポート(WindowsならCOM1/COM2等、LinuxなどならttyUSB0やttyUSB1、ttyS1など)を設定していますか?

maechin1121
質問者

補足

ご回答していただき,ありがとうございます. 説明が不足してしまい,申し訳ありませんでした. 正確には,コンパイルは出来るのですが,プログラム終了時に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を何台接続しても代わらない状況です.

関連するQ&A