![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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上から複数台のシリアルデバイスと通信する方法はあるのでしょうか?
プログラミング初心者で誠に恐縮ですが,皆様のお力をお借りしたく思います.
よろしくお願いいたします.
No.2ベストアンサー
- 回答日時:
>これを実行すると
>ofSerial: listing devices (0 total)
>という結果になってしまいます.これは,Arduinoを何台接続しても代わらない状況です.
こちらについてだけ…
>VisualStudio2008 ExpressEdition
とのことですが、プロジェクトの文字セットは何になっていますか?
of_preRelease_v0061_vs2008_FAT.zipを展開してみましたがUNICODEでは正しく動作しません。
# ofSerial::enumerateWin32Ports()でコールしているSetupDiGetDeviceRegistryProperty()がUNICODEで返却してきて、その後のstrstr()で正しく検索できない。
上記のデバイス列挙で失敗して、ofSerial:setup()も正しく動作していない。
という可能性はありませんか?
ご回答,ありがとうございます.
文字セットのご指摘を受けて,openFrameworksではなく,開発環境側に問題があるのではと考え,VisualStudio2008 ExpressEditionを再インストールしたところ,複数Arduinoとのシリアル通信が出来るようになりました.
皆様,本当にありがとうございました.
No.1
- 回答日時:
>プログラム実行のどこかでエラーが出てしまいます.
どこで発生しているのか、デバッグ環境なりで特定して下さい。
>これは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を何台接続しても代わらない状況です.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) シリアル通信 2 2022/05/07 17:14
- TOEFL・TOEIC・英語検定 TOEIC公式問題集に記載の英文で質問があります。 It's a kind of cold cere 1 2023/01/21 10:56
- TOEFL・TOEIC・英語検定 TOEIC公式問題集5に掲載の英文で質問があります。 どなたか教えていただけますようお願いいたします 1 2022/10/29 04:28
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- SQL Server これをSQL文で出来るでしょうか? 1 2023/03/26 02:16
- LANケーブル・USBケーブル スマホを充電せずに通信だけさせたい 4 2022/07/02 15:24
- Excel(エクセル) Excelの操作方法を教えてください!頭文字2~8文字で特定の値に返す方法 8 2022/07/14 11:26
- Excel(エクセル) <スプレッドシート>採用進捗 グラフ作成について 3 2022/10/23 15:52
- 英語 ①普通名詞の所有格+②普通名詞で、①普通名詞に定冠詞の意味を付加したい場合の表現方法等について 23 2022/09/30 12:47
- その他(IT・Webサービス) [PayPay銀行キャッシュカード拾得の件] このメールは本物か? 6 2022/09/15 21:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FriendとPublicの違い。。。
-
ダイアログ表示時にチェックボ...
-
[MFC] CWnd::MessageBoxの警告...
-
不要になった、普通の構造体の処理
-
名前空間について
-
C++ protectedにアクセス不可
-
MessageBoxを継承したい
-
C++で継承元のクラスの代入演算...
-
MFCのCListCtrlでスクロールを検出
-
C++/CLIからC++の呼び出しで例外
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
OnInitDialog()の関数の組み込み方
-
クラスのアドレスを引数として...
-
MFCのドラッグ&ドロップについて
-
VB.NETでC#のイベントをオーバ...
-
openFrameworks-複数台Arduino...
-
CreateObjectとはどういう意味...
-
メモリリークが発生するのはど...
-
Eval関数を使いたい!ドキュメ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
エディットコントロールのイベ...
-
ダイアログ表示時にチェックボ...
-
イベントにAddHandlerされてい...
-
ダイアログクラスのコントロー...
-
C++ protectedにアクセス不可
-
DebugクラスとTraceクラスの違い
-
DataGridViewのセルに斜線を引...
-
【ASP.NET】 独自で作成したク...
-
このコンパイルエラーの意味に...
-
エディットコントロールでEnter...
-
継承を重ねた場合のコストはど...
-
C#で通常のbuttonコントロール...
-
ボタンのオーナードローについて
-
MFCのCListCtrlでスクロールを検出
-
【C++】相互参照
-
SetTimerの行でアサートエラー...
おすすめ情報