差分

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

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
gimmickkouza:electronic_basic:3:5_variable [2024/05/27 19:14] – [テーブル] lutamestagimmickkouza:electronic_basic:3:5_variable [2024/06/21 18:26] (現在) lutamesta
行 2: 行 2:
 Arduino言語のプログラミングでは、「変数」に数値や文字列を記憶させたり、呼び出したり、計算や処理をして便利に使うことができます。 Arduino言語のプログラミングでは、「変数」に数値や文字列を記憶させたり、呼び出したり、計算や処理をして便利に使うことができます。
 多くの人にはなじみのない言葉ですが、Arduinoでプログラミングをする上で変数は非常に大事な概念で、__**超便利かつ不可欠で将来にわたってめちゃくちゃ使います。**__ 多くの人にはなじみのない言葉ですが、Arduinoでプログラミングをする上で変数は非常に大事な概念で、__**超便利かつ不可欠で将来にわたってめちゃくちゃ使います。**__
 +  
  
 ===== 変数とは何か ===== ===== 変数とは何か =====
行 10: 行 10:
 {{:gimmickkouza:electronic_basic:3:3-11.png?|}} {{:gimmickkouza:electronic_basic:3:3-11.png?|}}
  
- +   
-=== 変数を定義しよう ===+=== 変数を宣言しよう ===
 変数を使うためには、 変数を使うためには、
   * データ型(=この変数には何を入れられるか)   * データ型(=この変数には何を入れられるか)
   * 変数名(=その変数の名前)    * 変数名(=その変数の名前) 
-を定義しておく必要があります。+を定義しておく必要があります。これを変数の宣言と呼びます。
  
 例えば、"データ型がint型のvalueという名前の変数"を宣言するときの書き方は以下の通りです。 例えば、"データ型がint型のvalueという名前の変数"を宣言するときの書き方は以下の通りです。
行 26: 行 26:
  
 {{:gimmickkouza:electronic_basic:3:3-12.png?|}} {{:gimmickkouza:electronic_basic:3:3-12.png?|}}
 +
 +=== 変数の名前ってどうつければいいの? ===
 +
 +変数の名前は英数字が使用でき、かつ変数名の最初の文字がアルファベットで始まる必要があります。
 +この章では説明の為に敢えて簡素な変数名(例えばvalue)にしていますが、一般的には英語を使った説明的な名前が望ましいです。
 +例えば光センサの値を入れる変数であればlightSensorとか、まばたきをするためのボタンならblinkButtonといった感じでしょうか。
 +何が分かりやすい名前かは、搭載する電子部品の種類や数、プログラムの内容によって変わってくるので、適宜考えましょう。
 +
 +またArduinoのプログラムで命令などに使われるお決まりの単語は変数名には使えません(これを予約語といいます)
 +
 +
 === 変数に入れられるものは型次第 === === 変数に入れられるものは型次第 ===
  
-int型は、-32,76832,767までの2バイトの整数を入れることができるデータ型です(これはUno R3基準です。詳細は後述します)+さて、先程"データ型がint型のvalueという名前の変数"を宣言しました。 
 + 
 +int型は、__-3276832767までの2バイトの整数__を入れることができるデータ型です(これはUno R3基準です。詳細は後述)
 なので、このvalueという変数には、420という数値を入れることができます。 なので、このvalueという変数には、420という数値を入れることができます。
-またこの420を、1や、32や、7,786や、-459などの数値と入れかえることもできます。+またこの420を、1や、32や、7786や、-459などの数値と入れかえることもできます。
  
-ですが998,750は…このvalueには大きすぎて入りません+ですが998750は…このvalueには大きすぎて入りません(32767までの数字しか入らないからね~)
 また小数に対応していないので、0.29も入りません。 また小数に対応していないので、0.29も入りません。
 大きな数を入れたい時のデータ型はlong型、小数を入れたい時はfloat型を使う必要があります。(各型の詳しい違いも後述するよ!) 大きな数を入れたい時のデータ型はlong型、小数を入れたい時はfloat型を使う必要があります。(各型の詳しい違いも後述するよ!)
行 43: 行 56:
 <code>int value = 90;</code> <code>int value = 90;</code>
  
-これによりできた右概念図の変数valueの中は、90という数値が初期値としてセットされています。+これによりできたint型の変数valueの中は、90という数値が初期値としてセットされています。
  
 {{:gimmickkouza:electronic_basic:3:3-14.png?|}} {{:gimmickkouza:electronic_basic:3:3-14.png?|}}
行 57: 行 70:
 === 変数の中身は計算もできる === === 変数の中身は計算もできる ===
  
-変数の中身は単純に入れ替えるだけでなく、計算によって加減乗除をすることもできます。+変数の中身は単純に入れ替えるだけでなく、計算によって加減乗除などをすることもできます。
  
 <code> <code>
行 64: 行 77:
 </code> </code>
  
-まず一行目の記述により、初期値として90入りの変数valueが宣言されました。 +まず一行目の記述により、初期値として90入りのint型の変数valueが宣言されました。 
-その次の行では「いま入っているvalueの中身に1600を足す」計算をしています。                   +その次の行では「いま入っているvalueの中身に1600を足す」計算をしています。
 1600 + 90 の結果、最終的にvalueの中には1690の数値が残りました。 1600 + 90 の結果、最終的にvalueの中には1690の数値が残りました。
 +(Arduinoで計算式を書くときのルールはこのページの一番下のTipsにまとめてるよ!)
  
 {{:gimmickkouza:electronic_basic:3:3-16.png?|}} {{:gimmickkouza:electronic_basic:3:3-16.png?|}}
行 75: 行 89:
 以上が変数の基本です! 以上が変数の基本です!
 ちょっとわかりにくいかもしれませんが、実際にプログラム上で扱いながら覚えていけばいいと思います。 ちょっとわかりにくいかもしれませんが、実際にプログラム上で扱いながら覚えていけばいいと思います。
- +   
 +  
 ===== 変数のデータ型について ===== ===== 変数のデータ型について =====
 ==== よく使うデータ型一覧表 ==== ==== よく使うデータ型一覧表 ====
行 82: 行 96:
 変数のデータ型(=変数の中身にどういうデータを入れられるか)には、さまざまな種類があります。 変数のデータ型(=変数の中身にどういうデータを入れられるか)には、さまざまな種類があります。
 よく使うものを一覧表にして比較しました。 よく使うものを一覧表にして比較しました。
 +  
 +^  データ型の名前    説明                                                                        ^  実際に利用できる数値                                                      備考(と講師の感想)                                                                                                                                                                                                                                                                                                ^
 +| bool\\ (boolean)  | false(偽、数値なら0)か\\ true(真、数値なら1)の\\ どちらかを代入できる型      | false(0)かtrue(1)                                                         | 0か1の二値を扱えるので、LEDやスイッチのON/OFF等に使える。\\ 今はboolという名前だが、かつてはbooleanという名前が使われていた。                                                                                                                                                                                      |
 +| char              | 文字を数値として記憶する型\\ 1バイトで一文字                                 | -128~127                                                                 | Arduinoで文字データを扱いたい場合はこのchar型か、後述するStringクラスを使う。\\ charは文字を数値として扱う(例えば'A'は65、'B'は66)ので、\\ 'A'の入ったcharの変数に+1をすると中身が'B'に変化するといった使い方もできます。                                                                                          |
 +| int               | R4系では4バイト、\\ R3系等の大半のArduinoでは\\ 2バイトの整数を代入できる型  | R4系では\\ -2,147,483,648\\ ~2,147,483,647\\ R3系では\\ -32,768~32,767  | そんなにケタが大きくない整数を扱う場合に一般的に使われる型。\\ R4系ではボードの性能がつよつよになった結果、\\ longと同じ範囲の整数を扱えるようになっているが、\\ 実際にきぐるみの実装に使うマイコンはR3系の可能性が高いです。\\ なので互換性の観点から、当面はR4でもR3と同じ基準でintを使った方が無難と思います。  |
 +| long              | 4バイトの整数を代入できる型                                                  | -2,147,483,648\\ ~2,147,483,647                                          | -32,768より小さいか、32,767より大きい整数を扱いたい時に使う型。                                                                                                                                                                                                                                                    |
 +| float             | 4バイトの小数を代入できる型                                                  | 3.4028235E+38\\ ~\\ -3.4028235E+38                                       | 小数を扱いたい場合に使う型。割り算の答えやセンサから読み取った値など、\\ 小数点以下の数値が出る場合はfloatを使うと覚えておけばOK。\\ 使える範囲が広い分intやlongといった整数型より計算に時間がかかるので、\\ 小数を使わない(整数のみ)のであれば整数型を使った方がいいです。                                        |
  
-^ データ型の名前    ^ 説明                                                                         ^ 実際に利用できる数値                                                      ^ 備考(と講師の感想)                                                                                                                                                                                                                                                                    ^ +R4とR3で利用できる数値が異なる問題についてはちらで補足しています:[[gimmickkouza:electronic_basic:7:3-r3-r4#マイコンのbit数い|]] 
-| bool\\ (boolean)  | false(偽、数値ら0)か\\ true(真、数値なら1)の\\ どちらかを代入でき型      | 0か1                                                                      | 0か1の二値を扱えるので、LEDやスイッチのON/OFF等使える\\ 今はboolという名前だが、かてはbooleanとう名前が使われいた                                                                                                                                                             | +   
-| char              | 文字を数値として記憶する型\\ 1バイトで一文字                                 | -128~127                                                                 | Arduinoで文字データを扱いたい場合はこのchar型か、後述するStringクラスを使う\\ charは文字を数値として扱う(例えば'A'は65、'B'は66)ので、'A'の入ったcharの変数に\\ +1をすると中身が'B'に変化するとった使い方もできます                                                                 | +/*<alert type="danger">boolは実際利用できる値がtrue/falseうがわかりも 
-| int               | R4系では4バイト、\\ R3系等の大半のArduinoでは\\ 2バイトの整数を代入できる型  | R4系では\\ -2,147,483,648\\ ~2,147,483,647\\ R3系では\\ -32,768~32,767  | そんなにケタが大きくない整数を扱う場合に一般的に使われる型\\ R4系ではボードの性能がつよつよになった結果、longと同じ範囲の整数を扱える\\ ようになっているが、実際にきぐるみ実装に使うマイコンはR3系マイコン\\ 可能性もあるので、R4でもR3と同じ基準でintを使った方が無難と思ます  +https://garretlab.web.fc2.com/arduino.cc/www/reference/ja/language/variables/data-types/bool/ 
-| long              | 4バイトの整数を代入できる型                                                  | -2,147,483,648\\ ~2,147,483,647                                          | -32,768より小さいか、32,767より大きい整数を扱いたい時使う型                                                                                                                                                                                                                         | +</alert>*/ 
-| float             | 4バイトの小数を代入できる型                                                  | 3.4028235E+38\\ ~\\ -3.4028235E+38                                       | 小数を扱いたい場合に使う型。割り算の答えやセンサから読み取ったなど、\\ 小数点以下数値が出る場合はfloatを使と覚えておけばOK\\ 使える範囲広い分intlongとった整数型より計算に時間がかかるので、\\ 小数を使わない(整数のみ)なら整数型を使った方がいいです                   | +  
- +
 ==== 各データ型の使い方例 ==== ==== 各データ型の使い方例 ====
 各例はコピーしてloop部の内部に貼り付けることで動作確認ができます。 各例はコピーしてloop部の内部に貼り付けることで動作確認ができます。
行 153: 行 172:
 配列はかなり難しい概念なので本資料での説明は割愛します(気になる人はぜひ調べてほしいですが、中級者以上になってからを推奨します…) 配列はかなり難しい概念なので本資料での説明は割愛します(気になる人はぜひ調べてほしいですが、中級者以上になってからを推奨します…)
  
-複数の文字列を扱いたい場合は、より複雑で便利な処理ができて、どちらかというとcharよりも簡単(個人の感想です)なStringクラス(後述)の使用をおすすめします。+複数の文字列を扱いたい場合は、より複雑で便利な処理ができて、どちらかというとcharよりも簡単(個人の感想です)なStringクラス(3-6を見てね!)の使用をおすすめします。
 またシリアルモニタの項の復習になりますが、複数文字のデータなので、文字列は ' ' ではなく " " で囲います。 またシリアルモニタの項の復習になりますが、複数文字のデータなので、文字列は ' ' ではなく " " で囲います。
  
行 161: 行 180:
 === long型 === === long型 ===
 <code> <code>
-long hikazeide_hosii = 500000000; +long value1 = 500000000; 
-long genzitu = -500000000+long value2 = -150000000
-genzitu hikazeide_hosii genzitu;+value2 value1 value2;
 </code> </code>
  
 +1行目:
 + long型の変数value1を宣言して、中身に500,000,000の数値を入れます。
 +2行目:
 + 同じくlong型の変数value2に、-150,000,000の数値を入れます。
 +3行目:
 + intの例と同じように、2つの変数同士で足し算の計算をさせています。
 + この行のよりも後ろで Serial.println(value2); を実行することで、
 + シリアルモニタからvalue2の計算結果を表示できます。
  
 +=== float型 ===
 +<code>
 +float sensor = 7.16;
 +sensor = sensor / 9.9999;
 +</code>
  
 +1行目:
 + float型の変数sensorを宣言して、中身に7.16の数値を入れます。
 +2行目:
 + sensorを9.9999で割り、その計算結果でsensorの中身を上書きしています。
 + sensorの中身をシリアルモニタで表示すると、小数第3位が丸められ0.72と出ます。
 + Serial.println(sensor,8); と書くことで、小数第8位までを表示できます。
  
  
 +----
  
 +<panel type="warning" title="Tips:Arduinoでの計算記号">
 +人間の世界での計算式とArduinoの世界での計算式では、書き方に若干の違いがあります。
 +まずArduinoの世界では、加減乗除をする際には下記の記号を使う必要があります。
  
 +  * 足し算:半角記号の「+」(プラス)
 +  * 引き算:半角記号の「-」(マイナス)
 +  * 掛け算:半角記号の「*」(アスタリスク)
 +  * 割り算:半角記号の「/」(スラッシュ)
  
-=== float型 ===+また変数の解説でも出てきましたが、Arduinoでの計算式の書き方は、 
 +** 計算結果を入れる変数 = 項1 計算記号 項2**  となります。常に一番左側に計算結果が来ると覚えればOKです。 
 +以下にArduinoでの計算例をいくつか挙げてみます(value1~3の変数はすべてint型とします) 
 + 
 +<code>value1 500 + 300;</code> 
 +value1の結果は800となります 
 + 
 +<code>value2 1000 + 1000 - 500 - 100;</code> 
 +複数の項を持つ計算ももちろん可能です 
 +value2の結果は1400となります 
 + 
 +<code>value3 (10+10) * 5;</code> 
 +人間世界と同じように、Arduinoの計算式では()を使うことができます 
 +value3の結果は100となります 
 + 
 +---- 
 + 
 +最後に、加減乗除以外にも、計算に使える便利な記号があります。 
 + 
 +  * 半角記号の「%」→割った数の余りを求められます 
 +<code> 
 +int value4 = 0; 
 +value4 = 9 % 4; 
 +</code> 
 +value4は9÷4の余りである1となります 
 + 
 +  * 半角記号の「++」(プラス2個)→整数値の変数の値に1を足す 
 +<code> 
 +int value5 = 5; 
 +value5 = value5++; 
 +</code> 
 +value5は+1されて6となります(value5 = value5 + 1 と同じ効果を持ちます) 
 + 
 +  * 半角記号の「--」(マイナス2個)→整数値の変数の値から1を引く 
 +<code> 
 +int value5 5; 
 +value5 value5--; 
 +</code> 
 +value6は-1されて4となります(value6 value6 - 1 と同じ効果を持ちます) 
 + 
 + 
 +---- 
 +今すぐに全部覚えなくても大丈夫です。後の章で出てくるものもありますので、実践しながら覚えていきましょう。 
 + 
 +</panel>