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

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

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

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

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

Q&A

解決済

3回答

4208閲覧

Arduinoでシリアルモニタから文字列を送信してLEDの点灯を操作する

PHENIXa

総合スコア47

char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

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

0グッド

0クリップ

投稿2020/09/06 08:31

ArduinoでD13のLEDを点灯消灯を切り替えるプログラムを作成していますが、意図した動作をしてくれません。

シリアルモニタ上で
1Lと入力するとLEDを消灯
1Hと入力するとLEDを点灯
させるようにしたいです。
(本当は他にも何個かLEDがあるのでこのような形式になっています)

一応コメントを書き込んである箇所は間違っていると思うところです。
String型ではなくCharに変換する必要などありますか?

シリアルモニタはほぼ使ったことがほぼないので、よろしくお願いします。

Arduino

1void loop(){ 2 3String input;//シリアルから受信した文字列の格納変数 4while(Serial.available()){ 5input = Serial.readStringUntil(';');//読み取った値をinputに格納 6 7  if(input.equals("1L")){//この辺りも違うかも 8    digitalWrite(13,HIGH); 9    }else if(input.equals("1H")){//この辺りも違うかも 10    digitalWrite(13,LOW); 11   } 12  } 13}

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

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

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

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

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

thkana

2020/09/06 09:11

> 意図した動作をしてくれません。 ではどういう動作をしているのですか? 現状の動作は、何が間違っているのかについての**重要な**情報です。 思ったとおりでない、で捨ててしまっていいものではありません。ちゃんと観察しましょう。
nac_tnk

2020/09/06 09:34

thkana先生厳しいなぁ 私としてはそれ以前に ・全角スペースで位置合わせをしないでほしい。 ・setup関数も載せてほしい といった所です。 兎に角、使ったスケッチをそのまま載せましょう。
SHOMI

2020/09/06 09:53

まずはdigitalWrite(13,HIGH);やdigitalWrite(13,LOW);だけを書いて点灯確認からしてみては? nac_tnkさんも書かれていますが、動作に必要な部分のソースを省略しないでください。 setupを省略されるとピンの入出力設定があっているか(pinMode()を省略するとデフォルトは入力です)など回答者が質問者に対して確認しなければなりません。 全角スペースで回答する人が減っていそう…
PHENIXa

2020/09/06 12:00

>まずはdigitalWrite(13,HIGH);やdigitalWrite(13,LOW);だけを書いて点灯確認からしてみては? digitalWrite(LED_BUILTIN,1);やdigitalWrite(LED_BUILTIN,0);で確認済みです。 >使ったスケッチをそのまま載せましょう。 ということになると全文を載せることになるし、そうすると長文の時は「全文載載せたら重要なところがわからん」というコメントが多発するのでこのような形式で重要な部分だけ載せました。 >全角スペースで位置合わせをしないでほしい コピペで動作確認されるという意図では載せていません。 >ではどういう動作をしているのですか? ということは目的の動作をしていれば如何でもいいということになってしまうのでは?
thkana

2020/09/06 21:48

> 目的の動作をしていれば如何でもいいということになってしまうのでは? なりません。
guest

回答3

0

uint16_t buf を2文字のシリアル入力バッファとして使ってみました

uint16_t buf = 0 ; void setup(){ Serial.begin( 9600 ); pinMode( 13 , OUTPUT ); } void loop(){ if ( Serial.available() > 0 ){ buf = ( buf<<8 ) + Serial.read(); if ( buf == '1L' ){ digitalWrite( 13 , LOW ); } if ( buf == '1H' ){ digitalWrite( 13 , HIGH ); } } }

投稿2020/09/06 11:55

koujikuu

総合スコア401

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

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

PHENIXa

2020/09/06 12:05

なぜif ( Serial.available() > 0 )にしたのか 意図を教えてください
guest

0

まずは受信した(つもりの)文字列をシリアルで出力して、シリアルモニタで見れるようにして見たらどうでしょう

んで、
input = Serial.readStringUntil('\r');
にしてみたらEnterで入力できるんでは

投稿2020/09/06 09:30

y_waiwai

総合スコア88042

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

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

0

ベストアンサー

凡そ問題ありません。
ただし、点灯/点滅は逆です。現在はLで点灯、Hで消灯です。
まぁそこは接続次第ですけど。

勿論、送信時、半角/全角の区別は必要です。
また、ボーレートも合わす必要があります。
改行無しの設定なら「1L」「1H」でも動きます。
改行付きで送信するなら[1L;」「1H;」でないと動きません。

投稿2020/09/06 08:59

編集2020/09/06 09:02
nac_tnk

総合スコア494

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

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

PHENIXa

2020/09/06 12:03

改行ミスだけだったようです。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問