差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
gimmickkouza:electronic_basic:3:10_if [2024/05/29 20:57] – 作成 lutamestagimmickkouza: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:
    //Arduinoの、何も接続していないピンのノイズを利用して    //Arduinoの、何も接続していないピンのノイズを利用して
    //疑似乱数ジェネレータを初期化します。    //疑似乱数ジェネレータを初期化します。
- }+}
  
 void loop() { void loop() {
行 62: 行 55:
    Serial.println("また来週!");    Serial.println("また来週!");
    delay(3000);    delay(3000);
- }+}
 </code> </code>
  
行 68: 行 61:
 このプログラムをArduinoに書き込むと下記のどちらかのメッセージがシリアルモニタに表示されます。 このプログラムをArduinoに書き込むと下記のどちらかのメッセージがシリアルモニタに表示されます。
 <code> <code>
-今回生成された乱数はXでした! +今回生成された乱数はXでした! 
-また来週!+また来週!
 </code> </code>
 <code> <code>
-また来週!+また来週!
 </code> </code>
 「乱数は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行目==
 <code> <code>
 long randNum; long randNum;
 </code> </code>
-1行目: +ここは宣言部です!今回はここでlong型の変数randNumを宣言しています。 
- ここは宣言部です!今回はここでlong型の変数randNumを宣言しています。 +==7行目==
 <code> <code>
 randomSeed(analogRead(0)); randomSeed(analogRead(0));
 </code> </code>
-7行目: +setup部内です。ここでrandomSeed関数を使って、乱数を生成するための準備をしています。 
- setup部内です。ここでrandomSeed関数を使って、乱数を生成するための準備をしています。 +今回Arduinoのアナログ0番ピンは未接続なので、randomSeed(analogRead(0));でOKです。 
- 今回Arduinoのアナログ0番ピンは未接続なので、randomSeed(analogRead(0));でOKです。 +==14行目==
- +
 <code> <code>
 randNum = random(1,10); randNum = random(1,10);
 </code> </code>
-14行目: +if文に入る前に乱数生成をして、生成された乱数をrandNumに入れておきます。 
- if文に入る前に乱数生成をして、生成された乱数をrandNumに入れておきます。 +random(1,10);と書いたので、今回生成される乱数は最小値が1、最大値が9です。つまり1~9のどれかの数字が生成されます。 
- random(1,10);と書いたので、今回生成される乱数は最小値が1、最大値が9です。つまり1~9のどれかの数字が生成されます。 +==18~22行目==
 <code> <code>
 if (randNum >= 5) { if (randNum >= 5) {
行 135: 行 123:
 } }
 </code> </code>
-18~22行目: +お待ちかねのif文です。まずは条件式からです。 
- お待ちかねのif文です。まずは条件式からです。 +( )内は (randNum >= 5) となっているので、「randNumが5以上であればtrue」です。 
- ( )内は (randNum >= 5) となっているので、「randNumが5以上であればtrue」です。 +つまり、生成された乱数が「5, 6, 7, 8, 9」のどれかであれば、if文の内部に突入します。 
- つまり、生成された乱数が「5, 6, 7, 8, 9」のどれかであれば、if文の内部に突入します。 +if文の内部では、今回は「今回生成された乱数はXでした!」を表示するだけのシンプルな処理を実行します。if文内の処理をすべて終えたら23行目に移ります。
- if文の内部では、今回は「今回生成された乱数はXでした!」を表示するだけのシンプルな処理を実行します。if文内の処理をすべて終えたら23行目に移ります。+
      
- もし冒頭の条件式の結果がfalseだった場合(つまり生成された乱数が「1, 2, 3, 4」のどれかだった場合)は、19~21行目はすっ飛ばして23行目に移ります。 +もし冒頭の条件式の結果がfalseだった場合(つまり生成された乱数が「1, 2, 3, 4」のどれかだった場合)は、19~21行目はすっ飛ばして23行目に移ります。 
 +==23行目==
 <code> <code>
 Serial.println("また来週!"); Serial.println("また来週!");
 </code> </code>
-23行目: +シリアルモニタに文字列「また来週!」と表示させます。 
- シリアルモニタに文字列「また来週!」と表示させます。 +ここはif文終了後なので、if文の条件式判定に関わらず、どんな場合でも実行されます。 
- ここはif文終了後なので、if文の条件式判定に関わらず、どんな場合でも実行されます。 +==24行目==
 <code> <code>
 delay(3000); delay(3000);
 </code> </code>
-24行目: +人間がシリアルモニタを目で追えるよう、3秒待機させます。 
- 人間がシリアルモニタを目で追えるよう、3秒待機させます。 +25行目まで到達したらloop文の冒頭に戻り再び処理が始まります。 
- 25行目まで到達したらloop文の冒頭に戻り再び処理が始まります。 +   
- +  
 ===== 「if」のまとめ ===== ===== 「if」のまとめ =====
 ===if文のポイント=== ===if文のポイント===