データ型とは
プログラム内で扱うデータの種類に応じて適切なデータ型を選択する必要があります。データ型とは、符号なし整数、符号付き数値、浮動小数点、英数字文字列、行列などデータの種類を示します。
コンピュータはプログラムで変数がどの様な種類であるのか明確に定義しないと理解できないとは何とも融通がきかないものですね。人間の様に文脈の前後から判別してくれれば良いんですよ。AI時代になり、プログラミングという概念自体も変化してきそうですが、新しいプログラミング言語が登場したりするのでしょうか…。
Arduinoでよく使われるデータ型
Arduino言語(C/C++をベースとしたもの)における「型」(データ型)は、変数がどのような種類のデータを保持するかを定義するものです。型はデータのサイズや取り扱い方を決定し、プログラムの動作やメモリ使用量に影響を与えます。
- 基本データ型
- 配列 (array)
- 文字列型
- ポインタ
- 構造体(struct)
- 列挙型(enum)
Arduino言語の元になるC言語についても、断続的に学習していますが、文法がなかなか頭に入らないので、まさにこの本と共に苦しみながら取り組んでいます。繰り返し読んでいると新しい気づきがあり腹落ちさせられます。
基本データ型
基本データ型でどれを使用すれば良いのか、3点のポイントを抑えておきましょう。
- メモリ節約:小さな値には
byteやbooleanを使う - 符号の有無:負の値が必要なら
int、不要ならunsigned int - 精度と速度のバランス:
floatは便利だが計算コストが高い
| データ型 | サイズ(バイト) | 説明 | 使用例 |
|---|---|---|---|
| boolean (bool) | 1 | true または false を保持。 | スイッチの状態(ON/OFF)など。 |
| char | 1 | 1文字(-128〜127の整数)。ASCII文字を格納。 | ‘A’, ‘1’ など。 |
| byte | 1 | 0〜255の整数。 | 小さな数値(例:ピンの状態)。 |
| int | 2(Uno等)/4(Due等) | 整数(-32,768〜32,767)。 | センサーの値やカウンタ。 |
| unsigned int | 2(Uno等)/4(Due等) | 0〜65,535の整数。 | 非負の数値(例:時間)。 |
| long | 4 | 整数(-2,147,483,648〜2,147,483,647)。 | 大きな数値。 |
| unsigned long | 4 | 0〜4,294,967,295の整数。 | ミリ秒カウンタ(millis())。 |
| float | 4 | 小数を含む数値(約6-7桁の精度)。 | 温度、距離など。 |
| double | 4(Uno等ではfloatと同じ) | 高精度浮動小数点数(Due等で8バイト)。 | 高度な計算(注)。 |
shortも符号付き整数型ですが、intと同じサイズであるため、同一視される場合が多いです。byteとunsigned charはどちらも0から255までの符号なし8ビット整数を表し、ほぼ同義です。私はあまり見かけないですが、wordは0から65535までの符号なし16ビット整数を表します。
- 他のソースから double を含むコードを流用する場合、ATmegaベースのArduinoボードでは期待される精度が得られない可能性があるため、コードの精度要件を確認することが推奨されています。
配列 (array)
配列は同じ型のデータを複数格納する型で、インデックス番号でアクセスされる変数の集合です。
- 定義例: int numbers[5] = {1, 2, 3, 4, 5};
- サイズは固定で、インデックスは0から始まる。
- 使用例: 複数のセンサー値やピンの状態を管理する。
void setup() {
Serial.begin(9600);
int numbers[5] = {1, 2, 3, 4, 5};//int型の5個の要素を配列名numberとして宣言すると同時に各要素の初期値を代入
// 配列の要素を読み出してシリアルモニタに表示
Serial.println(numbers[0]); // 1 インデックス0を読み出して表示
Serial.println(numbers[4]); // 5 インデックス4を読み出して表示
}
void loop() {
}
文字列型
Arduinoでは文字列を2通りの方法で扱えます。1つはC言語の標準的な文字変数としてchar型、もう1つはArduino独自のStringクラスです。
- char 配列 + null終端文字
- String クラス
| 型 | 説明 | 使用例 |
|---|---|---|
| char[] | 文字の配列(C言語スタイルの文字列)。末尾に (ヌル文字)が必要。 | char text[6] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘ |