【Arduino初級】数値の調整を効率化!「変数」の使い方を解説!
使用するピンの数やanalogWriteを使い始めると、ピン番号の変更やパワーの値の調整を1つずつ書き直すのが面倒になりますよね?
今回の記事では、その調整を効率よく行う方法として「変数」を紹介します!
プログラム次第ですが、下の解説動画では30秒以上かかる値の変更が、なんと5秒で終わっています!!
- 変数とは?
- 変数のいいところ
- 変数を使っていないプログラムと変数を使ったプログラムの違い
この記事を読むことで効率よくプログラミングできるための変数について理解が深まります。
変数を使いこなして、効率よくプログラミングできるようになりましょう!
解説動画
今回の記事はこちらの動画を解説したものです。
変数とは?
変数とは、下の図のように値を入れておく箱のようなものです。
- 変数は何個でも作れる
- 名前で区別できる
(どの箱に、どんな値を入れるか指定できる)
変数の作り方
変数は、たった1行で作ることができます!
例えば、
int Power;
と書けば、「Power」という名前の変数ができあがります!
先頭の「int」は変数のタイプ(型)を指定するもので、いくつか種類がありますが、intは整数タイプです。
(※整数は英語でIntegerという。その先頭の3文字。)
このように書くと、整数タイプでPowerという名前の変数ができあがります!
下の図のようなイメージです!
変数に値を入れる
作った変数に値を入れるときは、「=」(イコール)の記号を使います!
Power = 160; //Powerに160を入れる
イコール記号の左側に変数名を書いて、右側に入れたい値を書けば、その値が変数に入ります!
※逆はできません!必ず左側に変数名を書きます!
使う記号はイコールですが、意味は等しいではなく、「代入」です!
「⇦」のイメージを持っておくといいと思います(^^)
値の入った変数の使い方
値が入った変数は、数値の代わりに使うことができます!
下の図のように、160という値の代わりにPowerと書けばOKです!
変数のいいところ
変数を使うと文字数が増えてますね?
逆に面倒なのでは?と思った人も多いかもしれません。
ですが、変数を使うことで、こんなメリットがあります!!
変数名に英単語を使うことで、パッとみただけで、中の数値がもつ意味がわかりますよね!
(むしろ、わかるように名前をつけることが大事とも言えますね)
PIN_MOTOR_Aは、モータドライバの制御信号Aにつながっているピン番号っぽいですし、PowerはanalogWriteに書くモータのパワーっぽいですよね(^^)
毎回数値を書き換えていると、時間もかかるしミスが増えます。
変数を使うことで、時間短縮と間違い防止になりますよ。
変数を使うことでプログラミングが効率よくできるのは、この時間短縮と間違い防止の2点のおかげです。
変数を使っていないプログラムと変数を使ったプログラムの違い
車輪型の移動ロボットについて、前進⇨後退⇨右旋回⇨左旋回を繰り返すプログラムを、変数なし/ありで書いてみました!
パワーを変更するスピードの違いは、ぜひ、解説動画(12:35から再生されます)を見てみて下さい(^^)
変数を使っていないプログラム
1void setup() {
2 //ピンの出力(Output)or入力(Input)設定
3 pinMode(6, OUTPUT); //左モータA
4 pinMode(9, OUTPUT); //左モータB
5 pinMode(5, OUTPUT); //右モータA
6 pinMode(3, OUTPUT); //右モータB
7 pinMode(8, INPUT); //スイッチ
8
9 //スタートボタンを押されるのを待つ
10 while(digitalRead(8)==0);
11 delay(1000); //1秒待つ
12}
13
14void loop() {
15 //前進
16 analogWrite(6, 160); //左A
17 analogWrite(9, 0); //左B
18 analogWrite(5, 160); //右A
19 analogWrite(3, 0); //右B
20 delay(1000);
21
22 //ブレーキ
23 digitalWrite(6, LOW); //左A
24 digitalWrite(9, LOW); //左B
25 digitalWrite(5, LOW); //右A
26 digitalWrite(3, LOW); //右B
27 delay(1000);
28
29 //後退
30 analogWrite(6, 0); //左A
31 analogWrite(9, 160); //左B
32 analogWrite(5, 0); //右A
33 analogWrite(3, 160); //右B
34 delay(1000);
35
36 //ブレーキ
37 digitalWrite(6, LOW); //左A
38 digitalWrite(9, LOW); //左B
39 digitalWrite(5, LOW); //右A
40 digitalWrite(3, LOW); //右B
41 delay(1000);
42
43 //右旋回
44 analogWrite(6, 160); //左A
45 analogWrite(9, 0); //左B
46 analogWrite(5, 0); //右A
47 analogWrite(3, 160); //右B
48 delay(1000);
49
50 //ブレーキ
51 digitalWrite(6, LOW); //左A
52 digitalWrite(9, LOW); //左B
53 digitalWrite(5, LOW); //右A
54 digitalWrite(3, LOW); //右B
55 delay(1000);
56
57 //左旋回
58 analogWrite(6, 0); //左A
59 analogWrite(9, 160); //左B
60 analogWrite(5, 160); //右A
61 analogWrite(3, 0); //右B
62 delay(1000);
63
64 //ブレーキ
65 digitalWrite(6, LOW); //左A
66 digitalWrite(9, LOW); //左B
67 digitalWrite(5, LOW); //右A
68 digitalWrite(3, LOW); //右B
69 delay(1000);
70}
変数を使ったプログラム
おまけの知識として、intの手前に「const」を書くと、その変数は値が変わらない「定数」になります。
ピン番号は動いている途中で変わることがないので、定数にしました!
パワーを調整するときは24行目の、Power = ○○と書いてある部分を1箇所書き換えるだけで、パワーを調整することができます!
1const int PIN_MOTOR_L_A = 6; //左モータA
2const int PIN_MOTOR_L_B = 9; //左モータB
3const int PIN_MOTOR_R_A = 5; //右モータA
4const int PIN_MOTOR_R_B = 3; //右モータB
5const int PIN_BUTTON = 8; //押しボタンスイッチ
6
7int Power = 0; //モータのパワー
8
9void setup() {
10 //ピンの出力(Output)or入力(Input)設定
11 pinMode(PIN_MOTOR_L_A, OUTPUT); //左モータA
12 pinMode(PIN_MOTOR_L_B, OUTPUT); //左モータB
13 pinMode(PIN_MOTOR_R_A, OUTPUT); //右モータA
14 pinMode(PIN_MOTOR_R_B, OUTPUT); //右モータB
15 pinMode(PIN_BUTTON, INPUT); //スイッチ
16
17 //スタートボタンを押されるのを待つ
18 while(digitalRead(PIN_BUTTON)==0);
19 delay(1000); //1秒待つ
20}
21
22void loop() {
23 //パワーの設定
24 Power = 160;
25
26 //前進
27 analogWrite(PIN_MOTOR_L_A, Power); //左A
28 analogWrite(PIN_MOTOR_L_B, 0); //左B
29 analogWrite(PIN_MOTOR_R_A, Power); //右A
30 analogWrite(PIN_MOTOR_R_B, 0); //右B
31 delay(1000);
32
33 //ブレーキ
34 digitalWrite(PIN_MOTOR_L_A, LOW); //左A
35 digitalWrite(PIN_MOTOR_L_B, LOW); //左B
36 digitalWrite(PIN_MOTOR_R_A, LOW); //右A
37 digitalWrite(PIN_MOTOR_R_B, LOW); //右B
38 delay(1000);
39
40 //後退
41 analogWrite(PIN_MOTOR_L_A, 0); //左A
42 analogWrite(PIN_MOTOR_L_B, Power); //左B
43 analogWrite(PIN_MOTOR_R_A, 0); //右A
44 analogWrite(PIN_MOTOR_R_B, Power); //右B右B
45 delay(1000);
46
47 //ブレーキ
48 digitalWrite(PIN_MOTOR_L_A, LOW); //左A
49 digitalWrite(PIN_MOTOR_L_B, LOW); //左B
50 digitalWrite(PIN_MOTOR_R_A, LOW); //右A
51 digitalWrite(PIN_MOTOR_R_B, LOW); //右B
52 delay(1000);
53
54 //右旋回
55 analogWrite(PIN_MOTOR_L_A, Power); //左A
56 analogWrite(PIN_MOTOR_L_B, 0); //左B
57 analogWrite(PIN_MOTOR_R_A, 0); //右A
58 analogWrite(PIN_MOTOR_R_B, Power); //右B
59 delay(1000);
60
61 //ブレーキ
62 digitalWrite(PIN_MOTOR_L_A, LOW); //左A
63 digitalWrite(PIN_MOTOR_L_B, LOW); //左B
64 digitalWrite(PIN_MOTOR_R_A, LOW); //右A
65 digitalWrite(PIN_MOTOR_R_B, LOW); //右B
66 delay(1000);
67
68 //左旋回
69 analogWrite(PIN_MOTOR_L_A, 0); //左A
70 analogWrite(PIN_MOTOR_L_B, Power); //左B
71 analogWrite(PIN_MOTOR_R_A, Power); //右A
72 analogWrite(PIN_MOTOR_R_B, 0); //右B
73 delay(1000);
74
75 //ブレーキ
76 digitalWrite(PIN_MOTOR_L_A, LOW); //左A
77 digitalWrite(PIN_MOTOR_L_B, LOW); //左B
78 digitalWrite(PIN_MOTOR_R_A, LOW); //右A
79 digitalWrite(PIN_MOTOR_R_B, LOW); //右B
80 delay(1000);
81}
まとめ: 【Arduino初級】数値の調整を効率化!「変数」の使い方を解説!
今回の記事では、数値の調整を効率よく行う方法として、「変数」を紹介しました!
同じ値を入れるところを、決めておくことで、数値を書き換える場所を減らしたり、数値の書き間違いを減らすことができるので、プログラミングやメンテナンスの効率が格段に上がります!
- 変数とは?
- 変数のいいところ
- 変数を使っていないプログラムと変数を使ったプログラムの違い
ぜひ、変数を使って、調整しやすいプログラムを書いていきましょう\(^o^)/
変数の理解が深まったら、関数についても理解を深めましょう。
プログラミングは変数と関数をうまく使うことで、ミスを減らしキレイなプログラムが作成できるのです。
最後まで読んでいただき、ありがとうございました!
以上、CHAでした!