変数によるピン番号設定
これまでは、ドットマトリクスLEDを制御するピンを、pinMode関数やdigitalWrite関数内に直接数値で指定していました。
けれども、数値だとどのピンかわかりにくい上に、何らかの事情でピンを変更したい場合には変更漏れがないように十分注意する必要があり、手間がかかるとともにバグの原因にもなりかねません。
これを解決する方法のひとつが、ピン番号を「変数」で指定することです。
変数
変数は文字や値を入れる箱のようなものです。箱を使うには、まず箱を作り、箱の中に文字や値を入れていきます。箱を作ることを変数の宣言と言い、箱に文字や値を入れることを値の代入と言います。
変数の箱は、具体的にはマイコンのメモリ上の領域を確保することで作られます。変数の宣言を行うとメモリ上の領域が確保され、その領域の中に文字や値が入れられます。
変数の宣言
データ型 変数名;
Code language: Arduino (arduino)
- 変数名には、半角英数字および「_」(アンダーバー)を使うことができ、アルファベットの大文字と小文字は区別されます。ただし、1文字に数字を使うことはできず、また予約語(コンピュータで予め設定されている単語)も使えません。
- データ型とは、変数に入れるデータの種類のことです。整数型、文字型などがあります。
- 複数の変数を1度に宣言することができます。その場合は、変数名を「,」(コンマ)で区切ります。
なお、メモリ上で確保される領域の大きさはデータ型ごとに決まっています。
値の代入
変数名 = 値;
Code language: Arduino (arduino)
変数の値はプログラムの途中で書き換えることができ、書き換え処理以前は書き換え前の値が、書き換え処理以降は書き換え後の値がプログラム中での変数の値になります。 変数の宣言と値の代入を同時に行うこともできます。
データ型 変数名 = 値;
Code language: Arduino (arduino)
具体例を見てみましょう。
int a0 = 0;
Code language: Arduino (arduino)
この例では、データ型は「int 型」、変数名が「a0」、値が「0」の変数を宣言しています。
「int型」は整数(負の数を含む)を表すためのデータ型で、ESP32版のArduinoフレムワークの「int 型」では4バイト=32ビットの領域が確保されます。つまり、変数「a0」は 232 = 4294967296 個の整数を扱うことができ、具体的には −2147483648 ~ 2147483647 の値を代入することができます。
なお、int型変数が確保する領域の大きさは環境によって異なり、8ビットマイコンの開発環境等では2バイト=16ビットとなる場合があります。
変数のデータ型
C言語の主な変数の型(但しbyte型はArduinoフレームワークの型)を紹介しておきます。
変数型 | バイト数 | 変数の説明 | 備考 |
---|---|---|---|
char | 1 | 8 ビット整数型 | 符号の有無は環境による(本コースの環境では符号無し)。 |
signed char | 1 | 8 ビット符号付き整数型 | 「signed」は符号付きを,「unsigned」は符号無しを示す。 (以下の「short」〜「long long」にも使用可) |
unsigned char | 1 | 8 ビット符号無し整数型 | |
short | 2 | 16 ビット符号付き整数型 | |
int | (4) | 符号付き整数型 | ビット数は環境による(本コースの環境では 32 ビット)。 |
long | 4 | 32 ビット符号付き整数型 | |
long long | 8 | 64 ビット符号付き整数型 | |
int8_t | 1 | 8 ビット符号付き整数型 | ビット数と符号を明確に示すことができる便利な型。 C 言語では「#include <stdint.h>」で使えるようになる。 Arduino フレームワークでは標準で使用可能。 |
uint8_t | 1 | 8 ビット符号無し整数型 | |
int16_t | 2 | 16 ビット符号付き整数型 | |
uint16_t | 2 | 16 ビット符号無し整数型 | |
int32_t | 4 | 32 ビット符号付き整数型 | |
uint32_t | 4 | 32 ビット符号無し整数型 | |
int64_t | 8 | 64 ビット符号付き整数型 | |
uint64_t | 8 | 64 ビット符号無し整数型 | |
float | 4 | 浮動小数点数型 | 実数を扱うための型。 |
double | 8 | 倍精度浮動小数点数型 | float の倍のビット数で実数を扱う。 |
bool | 1 | 論理型(true=1,false=0) | C++ の型。1 ビット用の型だがメモリ上では 8 ビット使用。 C 言語では「#include <stdbool.h>」で使えるようになる。 |
byte | 1 | 8 ビット符号無し整数型 | uint8_tの別名。「Arduino.h」で「typedef uint8_t byte;」と定義されている。 |
データ型ごとに割り当てられるサイズが異なり、格納可能な値の範囲が決まっています。例えば char 型は 1 バイト(8 ビット)なので 28 = 256 個の値、つまり -128 ~ 127 までしか代入できません。int 型は前ページで紹介したとおり- 2147483648 ~ 2147483647 を代入できます。
なお、一部のデータ型の仕様については厳密に規定されておらず、コンパイラなど開発環境によって異なる場合があります。