- 締切済み
Arduino シリアル通信でのバイナリ受信
詳しい方教えてください。 送信元のPCから、受信側のArduinoへ、シリアル通信によってバイナリデータを送ることで、Arduino側でのサーボモータのシリアル駆動を試みています。 PC側からのバイナリデータ送信はVB.NET側で作成済みで、USB-TTLコンバータ(FTDI Basic Breakout 5V)を使ってのサーボモータのシリアル駆動は問題ありません。 (http://micono.cocolog-nifty.com/blog/2011/04/arduino11-17d5.html と同じ処理と思ってください。) 同様な処理を、PC-Arduinoで駆動させようと思っていますが、 void loop() { int c; if (Serial.available() > 0){ c = Serial.read(); ・・・・ こちらでは、Cの値がint型の為かうまくいきません。(キャストも試しましたが・・) そもそも1バイトデータの受信Serial.read()が、int型(2バイト)なのか判りません。 方法はありますでしょうか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Blackcatss
- ベストアンサー率0% (0/0)
間違ってるかもですが、変数cの型がint型からなのではないでしょうか? 質問文のプログラムで c = Serial.read(); としていますが、cはint型の変数で、 Serial.read() 関数で帰ってくる値はbyte(unsigned char)型です。 何が言いたいかといいますと、変数cを byte(unsigned char)型の変数として宣言すればOKということです。 ちなみに、この読み取り方だと受信バッファに複数バイト入ってたときの処理としては使えないと私は思います。 参考程度に、複数バイトを受信する方法を書いておきます。 void loop(){ int i; byte c[127]; //受信データ格納用 if(Serial.available() > 0){ //受信バッファにデータが入っているなら for(i=0;i<Serial.available();i++){ //受信バッファの数(バイト数)だけ受信する c[i]=Serial.read(); } } --------他の処理------------- } ご理解いただけたでしょうか。 初めての回答なので、わかりやすく書けたか不安ですが、役に立てれば幸いです。
- wormhole
- ベストアンサー率28% (1626/5665)
シリアル通信の設定があってるのかなどあるとは思いますが私にいえるのは >そもそも1バイトデータの受信Serial.read()が、int型(2バイト)なのか判りません。 int型がchar型(バイトで扱える型として書いてます)で扱える数値を十分に扱えますからint型でも問題ないですし 何らかのエラーがありエラーコードを返したい場合にchar型だとエラーなのか受信したデータなのか区別できないと思いますよ。