差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
gimmickkouza:electronic_basic:3:10_if [2024/05/29 20:57] – 作成 lutamesta | gimmickkouza:electronic_basic:3:10_if [2024/06/21 18:30] (現在) – lutamesta | ||
---|---|---|---|
行 4: | 行 4: | ||
最も基本的な分岐処理「if」、そのifの分岐を発展させる便利な「else」「else if」の組み合わせをマスターすれば、5章からの電子部品を動かすサンプルコードを読むことができるようになります。 | 最も基本的な分岐処理「if」、そのifの分岐を発展させる便利な「else」「else if」の組み合わせをマスターすれば、5章からの電子部品を動かすサンプルコードを読むことができるようになります。 | ||
- | + | ||
===== 特定の条件の時だけ処理をする「if」 ===== | ===== 特定の条件の時だけ処理をする「if」 ===== | ||
==== if文の基本的な書き方 ==== | ==== if文の基本的な書き方 ==== | ||
行 16: | 行 15: | ||
さっそく解説していきます! | さっそく解説していきます! | ||
- | + | ==1行目== | |
- | + | ifの後ろの( )内に条件式を書きます。 | |
- | 1行目: | + | この条件式が成立した(true)場合、if文内部の命令を、上から順に一行ずつ実行します。 |
- | ifの後ろの( )内に条件式を書きます。 | + | if文の内部は、( )の後ろの「{」から4行目の「}」までの間です。 |
- | この条件式が成立した(true)場合、if文内部の命令を、上から順に一行ずつ実行します。 | + | ==2~3行目== |
- | if文の内部は、( )の後ろの「{」から4行目の「}」までの間です。 | + | ここは{ }で括られた、if文の内部です。ここに、条件式が成立しているときに実行したい処理を書きます。 |
+ | 処理は何行でも、必要なだけ書いてOKです。この内部に更に別の分岐処理や繰り返し処理を書いて、入れ子状にしてもOKです。 | ||
+ | { }内の処理をすべて終了すると、このif文は終了です。引き続いて5行目以降の処理が開始されます。 | ||
+ | ==4行目== | ||
+ | 波かっこ閉じによって、このif文の本文はここで終了です。 | ||
+ | ちなみにif文冒頭で条件式が不成立(false)だった場合は、if文の内部はすっ飛ばして5行目以降の処理に移ります。 | ||
- | 2~3行目: | ||
- | ここは{ }で括られた、if文の内部です。ここに、条件式が成立しているときに実行したい処理を書きます。 | ||
- | 処理は何行でも、必要なだけ書いてOKです。この内部に更に別の分岐処理や繰り返し処理を書いて、入れ子状にしてもOKです。 | ||
- | { }内の処理をすべて終了すると、このif文は終了です。引き続いて5行目以降の処理が開始されます。 | ||
- | |||
- | 4行目: | ||
- | 波かっこ閉じによって、このif文の本文はここで終了です。 | ||
- | ちなみにif文冒頭で条件式が不成立(false)だった場合は、if文の内部はすっ飛ばして5行目以降の処理に移ります。 | ||
- | |||
- | |||
- | |||
==== if文のサンプルコード解説 ==== | ==== if文のサンプルコード解説 ==== | ||
サンプルコード3-10_if.inoを開いてください。 | サンプルコード3-10_if.inoを開いてください。 | ||
行 48: | 行 41: | ||
// | // | ||
// | // | ||
- | } | + | } |
void loop() { | void loop() { | ||
行 62: | 行 55: | ||
Serial.println(" | Serial.println(" | ||
delay(3000); | delay(3000); | ||
- | } | + | } |
</ | </ | ||
行 68: | 行 61: | ||
このプログラムをArduinoに書き込むと下記のどちらかのメッセージがシリアルモニタに表示されます。 | このプログラムをArduinoに書き込むと下記のどちらかのメッセージがシリアルモニタに表示されます。 | ||
< | < | ||
- | 「今回生成された乱数はXでした!」 | + | 今回生成された乱数はXでした! |
- | 「また来週!」 | + | また来週! |
</ | </ | ||
< | < | ||
- | 「また来週!」 | + | また来週! |
</ | </ | ||
「乱数はXでした」の「X」は、5~9の数字がランダムに表示されます。 | 「乱数はXでした」の「X」は、5~9の数字がランダムに表示されます。 | ||
行 102: | 行 95: | ||
そしてrandomで生成した乱数はそのままでは保存されないので、変数Y = random(XX , XX) の形で関数を使い、変数の中に生成した乱数を格納して使う必要があります。 | そしてrandomで生成した乱数はそのままでは保存されないので、変数Y = random(XX , XX) の形で関数を使い、変数の中に生成した乱数を格納して使う必要があります。 | ||
この時の変数は(たとえ入れる値がごく小さかったとしても)long型で定義しましょう。これは、**random関数で生成される乱数は必ずlong型になるという仕様**があるためです。 | この時の変数は(たとえ入れる値がごく小さかったとしても)long型で定義しましょう。これは、**random関数で生成される乱数は必ずlong型になるという仕様**があるためです。 | ||
- | |||
=== コード解説 === | === コード解説 === | ||
前置きが長くなりましたが、if文のサンプルコード解説に入ります! | 前置きが長くなりましたが、if文のサンプルコード解説に入ります! | ||
+ | ==1行目== | ||
< | < | ||
long randNum; | long randNum; | ||
</ | </ | ||
- | 1行目: | + | ここは宣言部です!今回はここでlong型の変数randNumを宣言しています。 |
- | ここは宣言部です!今回はここでlong型の変数randNumを宣言しています。 | + | ==7行目== |
< | < | ||
randomSeed(analogRead(0)); | randomSeed(analogRead(0)); | ||
</ | </ | ||
- | 7行目: | + | setup部内です。ここでrandomSeed関数を使って、乱数を生成するための準備をしています。 |
- | setup部内です。ここでrandomSeed関数を使って、乱数を生成するための準備をしています。 | + | 今回Arduinoのアナログ0番ピンは未接続なので、randomSeed(analogRead(0)); |
- | 今回Arduinoのアナログ0番ピンは未接続なので、randomSeed(analogRead(0)); | + | ==14行目== |
- | + | ||
< | < | ||
randNum = random(1, | randNum = random(1, | ||
</ | </ | ||
- | 14行目: | + | if文に入る前に乱数生成をして、生成された乱数をrandNumに入れておきます。 |
- | if文に入る前に乱数生成をして、生成された乱数をrandNumに入れておきます。 | + | random(1, |
- | random(1, | + | ==18~22行目== |
< | < | ||
if (randNum >= 5) { | if (randNum >= 5) { | ||
行 135: | 行 123: | ||
} | } | ||
</ | </ | ||
- | 18~22行目: | + | お待ちかねのif文です。まずは条件式からです。 |
- | お待ちかねのif文です。まずは条件式からです。 | + | ( )内は (randNum >= 5) となっているので、「randNumが5以上であればtrue」です。 |
- | ( )内は (randNum >= 5) となっているので、「randNumが5以上であればtrue」です。 | + | つまり、生成された乱数が「5, |
- | つまり、生成された乱数が「5, | + | if文の内部では、今回は「今回生成された乱数はXでした!」を表示するだけのシンプルな処理を実行します。if文内の処理をすべて終えたら23行目に移ります。 |
- | if文の内部では、今回は「今回生成された乱数はXでした!」を表示するだけのシンプルな処理を実行します。if文内の処理をすべて終えたら23行目に移ります。 | + | |
- | もし冒頭の条件式の結果がfalseだった場合(つまり生成された乱数が「1, | + | もし冒頭の条件式の結果がfalseだった場合(つまり生成された乱数が「1, |
+ | ==23行目== | ||
< | < | ||
Serial.println(" | Serial.println(" | ||
</ | </ | ||
- | 23行目: | + | シリアルモニタに文字列「また来週!」と表示させます。 |
- | シリアルモニタに文字列「また来週!」と表示させます。 | + | ここはif文終了後なので、if文の条件式判定に関わらず、どんな場合でも実行されます。 |
- | ここはif文終了後なので、if文の条件式判定に関わらず、どんな場合でも実行されます。 | + | ==24行目== |
< | < | ||
delay(3000); | delay(3000); | ||
</ | </ | ||
- | 24行目: | + | 人間がシリアルモニタを目で追えるよう、3秒待機させます。 |
- | 人間がシリアルモニタを目で追えるよう、3秒待機させます。 | + | 25行目まで到達したらloop文の冒頭に戻り再び処理が始まります。 |
- | 25行目まで到達したらloop文の冒頭に戻り再び処理が始まります。 | + | |
- | + | ||
===== 「if」のまとめ ===== | ===== 「if」のまとめ ===== | ||
===if文のポイント=== | ===if文のポイント=== |