差分
このページの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文のポイント=== | ||