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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Arduino

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

Q&A

2回答

7182閲覧

Arduino UNOのSerial.available()について

aya5e85

総合スコア13

Arduino

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

0グッド

0クリップ

投稿2017/05/03 01:08

ArduinoにIR受信機をつけてシリアルモニタ上に結果を表示させたいと思っていたのですが、Serial.avairable()>0が常に偽でif文(if (Serial.available()>0))をパスできませんでした。原因として考えられることは何かないでしょうか。

#include <IRremote.h> int input_pin = 10; //set D10 as input signal pin IRrecv irrecv(input_pin); decode_results signals; VarSpeedServo servo; char buff[10]={'\0'}; int counter = 0; void setup() { //シリアル Serial.begin(9600); irrecv.enableIRIn(); // enable input from IR receiver } void loop() { if (irrecv.decode(&signals)) { if(signals.value != 0xFFFFFFFF){ //長押しで送信されるFFFFFFFF以外のとき Serial.println(signals.value, HEX); if (Serial.available()>0){ char data = Serial.read(); buff[counter] = data; if (data == '\n'){ //buff[0]~buff[counter-1]までが文字列となってここでうけとれる //シリアル送信側で\nが最後につけられることが前提 Serial.write(buff); counter = 0; }else{ counter++; } } } irrecv.resume(); // get the next signal } }

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

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

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

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

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

ozwk

2017/05/03 09:10

そもそもIR受信機とシリアル関係あるんですか?
ozwk

2017/05/03 09:13

「シリアルモニタ上に結果を表示」はSerial.println(signals.value, HEX);で済んでいるんじゃないんですか?
guest

回答2

0

システムの構成は、以下のようになっているのではないかと推測されます。

パソコン ==(シリアルケーブル)== Arduino --(配線)-- IR受信素子

パソコンでシリアルからの入力を画面に出すアプリ(例えばターミナルソフト)が起動しているのだとして、「ArduinoにIR受信機をつけてシリアルモニタ上に結果を表示させたい」のであれば、Arduinoがすべき事は

IR受信素子からの信号をデコードして、シリアルでパソコンに送る(そうすると、パソコン上のアプリでIR信号の内容が表示される)

だけです。

質問のコードの下記の部分(問題を起こしている部分)がなぜあるのか理解できないのですが、この部分を削除したら望んでいる動作をするのではないかと思われます。 試してみてください。

if (Serial.available()>0){ char data = Serial.read(); buff[counter] = data; if (data == '\n'){ //buff[0]~buff[counter-1]までが文字列となってここでうけとれる //シリアル送信側で\nが最後につけられることが前提 Serial.write(buff); counter = 0; }else{ counter++; } }

投稿2017/09/29 00:51

coco_bauer

総合スコア6915

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

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

0

IRRemoteライブラリについてよく知らないのですが、少なくともSerial.available()はシリアルから入力された文字数を返す関数なので、シリアルモニタから何か入力しないとSerial.available()が0より大きくなることはありません。
結果を表示させたいならスケッチの例にあるものを使ってみてはどうでしょうか。

投稿2017/09/19 07:43

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問