質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

4回答

1872閲覧

シリアル通信する端末の通信をコピーしてArduinoで再現したいです。

nao0109

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2019/01/08 02:43

お世話になります。

Arduinoのシリアル通信についてお聞きしたいです。

2つのArduino間でシリアル通信をしたく、
テストコードを組んだのですが、うまくいきません。

送信側のArduinoで


void setup() { Serial.begin(4800,SERIAL_8E1); } void loop() { Serial.println(0,BIN); Serial.println(10000000,BIN); Serial.println(11000000,BIN); }

受信側のArduinoで

int incomingByte = 0; void setup() { Serial.begin(4800,SERIAL_8E1); } void loop() { if (Serial.available() > 0) { incomingByte = Serial.read(); Serial.print(" I received: "); Serial.println(incomingByte, BIN); } }

とすると、
0
10000000
11000000

を送ったのに

I received: 11001100
I received: 100
I received: 100
I received: 100
I received: 10110
I received: 100
I received: 100
I received: 100
I received: 100
I received: 100
I received: 100

と表記されてしまいます

同じBINで4800bps,SERIAL_8E1なのになぜ、でしょうか。
ご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2019/01/08 04:05

Arduino2つをどうやってつないでいるんですか?
guest

回答4

0

送信側は文字列を送っているのに対し、受信側は受信した一文字を2進数に展開して表示しようとしている、というのは承知の上ですか?
つまり、送信側が'0'を送ったら、受信側はその'0'=0x30を2進数に展開して'110000'と表示しようとするはずです。

もっとも、それにしてもデータが変(0x30,0x31,0xd,0xaしか送っていないはず)なので、なにかハード的に変な接続をしていないか、と疑ってしまうのですが。

まずは、シリアルモニタ(別にteraterm等でもいいですけれど)で1台ずつの動作をチェックしてから2台を接続してみると、異常の範囲が絞れるような気がします。

投稿2019/01/09 15:22

thkana

総合スコア7639

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

if (Serial.available() > 0) {

incomingByte = Serial.read();

これを実行した時点の受信データを読むものなので、タイミングによっては送信途中でも読み込みます。

送信の区切り用のデータを設定し、それが来るまでは受信データを貯め込むような処理をしましょう

投稿2019/01/08 02:56

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まず、送信側は1回だけ送信するようにした方が良いのではないでしょうか。

void setup() { Serial.begin(4800,SERIAL_8E1); delay(1000); Serial.println(0,BIN); Serial.println(10000000,BIN); Serial.println(11000000,BIN); } void loop() { }

投稿2019/01/10 02:31

hillacken

総合スコア359

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

バイナリーデータの送受信ならば関数が違うのでは?
それにSerial.printlnならばデータだけでなく改行データまで送って今います。

使うなら
Serial.writeとSerial.readと思いますが。

投稿2019/01/08 07:06

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問