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

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

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

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

Q&A

解決済

1回答

5767閲覧

Arduinoのシリアル通信でサーボモーター制御

aya5e85

総合スコア13

Arduino

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

0グッド

0クリップ

投稿2017/05/01 07:34

写真にある赤外線発信機(CarMP3)の”1”を押したときにサーボモータ(SG-90)が100度回転するプログラムを作りたいです。

コンパイルは通ったのですが回転しません。
"1"を押すと、シリアルモニタ上に”FF30CF”と出てきます。
写真のある他の文字列は、赤外線発信機でほかのボタンを押したものです。

説明がヘタですみません...

配線は間違えていないようですし、
おそらくプログラム上の問題かと思います。

わかる方がいらっしゃいましたら教えていただけないでしょうか?

[使用機器]
Arduino UNO
サーボモータ(SG-90)
赤外線発信機(CarMP3)
赤外線レシーバー(VS1838B)

シリアルモニタ
環境

C言語

1/* Infrared Remote Controller & IR Receiver demo program 2 copy right John Yu 3 connect VS1838B to D10 see http://osoyoo.com/?p=144 4*/ 5#include <IRremote.h> 6#include<VarSpeedServo.h> 7 8int input_pin = 10; //set D10 as input signal pin 9IRrecv irrecv(input_pin); 10decode_results signals; 11 12VarSpeedServo servo; 13 14char INPUT1[] = "FF30CF"; 15 16char str[6]; 17 18void setup() 19{ 20 //シリアル 21 Serial.begin(9600); 22 irrecv.enableIRIn(); // enable input from IR receiver 23 //サーボ 24 servo.attach(9); 25 servo.write(0,255,true);//0度に移動 26 27} 28 29void loop() { 30if (irrecv.decode(&signals)) { 31 Serial.println(signals.value, HEX); 32 str[10] = Serial.read(); 33 34 if(strcmp(str, INPUT1) == 0){ 35 servo.write(100,30,true);//100度に移動 36 } 37 irrecv.resume(); // get the next signal 38 39 40 }

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

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

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

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

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

07JP27

2017/05/01 07:55

if(strcmp(str, INPUT1) == 0)の中にシリアルモニタに文字列などを出力をするコードを書くと、以下のように問題の切り分けができると思います。文字列が表示されない(if文の中に入ってこない)→プログラムの問題。シリアルモニタに出力される(if文の中に入っているのに動作しない)→ハードウエアに関する問題。あとloopの閉じ}が無いようですが、書き込まれているソースにはありますよね?
guest

回答1

0

ベストアンサー

  • Serial.read()は一文字しか読みません。

リファレンス

Returns

the first byte of incoming serial data available (or -1 if no data is available) - int

  • char str[6]と言っておきながら、str[10] = Serial.read();strの10番目の要素に代入しています。

  • そして根本的に、なぜかSerialから値を取ろうとしています。

Serial.println(signals.value, HEX);
と書いていることから、受信したデータがsignals.valueに入っていることはわかっていると思います。
じゃあそれを直接比較すればいいですね。

C

1if(signals.value == 0xFF30CF){ 2... 3}

Serial.read()println()したものを読む機能じゃないです。

投稿2017/05/01 07:45

編集2017/05/01 07:57
ozwk

総合スコア13512

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問