組み込み関数

使用頻度が高い組み込み関数について、ひとつづつ解説します

ここで紹介する関数以外にも様々な関数がArudino言語には 標準で用意されているので、 Arduino公式リファレンス も併せて読むことを推奨します

また、インターネット上には非公式日本語リファレンスもいくつかありますが、情報が古いことがあるので気を付けるようにしてください

組み込み関数のサブセクション

analogRead

リファレンス

説明

指定したピンをアナログ値で読み取ります

注意すべき点

返り値は最大10bitsの値です

2^10は1024なので0~1023の整数値が返ってきます

この関数で値を読み取ることができるのは A0 などの A から始まるピン番号のピンのみです

また、番号は A0 のように A を含めて指定してください

サンプルコード

analogRead(ピン番号);

// A0の値で周波数を変更
int value = analogRead(A0);

if(value <= 500) {
    tone(4, 200, 1000);
} else if(value <= 524) {
    tone(4, 400, 1000);
} else {
    tone(4, 800, 1000);
}

delay

リファレンス

説明

指定したミリ秒の間、プログラム全体の動作を停止させます

注意すべき点

プログラム全体が停止することに留意してください

例えば、待ち時間になにかしらの動作をさせたいにも関わらず、 delay(1000) などとすると、意図しない動作になってしまうことが多いです

サンプルコード

delay(停止させたいミリ秒数);

// 4番に接続されたブザーを440Hzで1000ms鳴らす
int buzzer_pin = 4;
int frequency = 440;

tone(buzzer_pin, frequency);
delay(1000);
noTone(buzzer_pin);

digitalRead

リファレンス

説明

指定したピンをデジタル値で読み取ります

注意すべき点

読み取った値は HIGH, LOW として返ってきますが、booleanに代入可能です

入力基板によってプルアップ、プルダウンが違う場合があるので基盤を実際に確認をしてください

サンプルコード

digitalRead(ピン番号);

// if文を使って22番ピンの値で分岐処理
if(digitalRead(22) == HIGH) {
    tone(4, 440, 1000);
}

// スマートな記法(動作は上と同じ)
if(digitalRead(22)) {
    tone(4, 440, 1000);
}

// 変数に値を代入
boolean value = digitalRead(22);

digitalWrite

リファレンス

説明

ピンに対してデジタル出力(LOW, HIGH)を行います

注意すべき点

一度HIGHを出力したピンはLOWを出力するまでHIGHが出力されつづけます

意図しないピンがHIGHになり続け、意図しない部品が動作することが多々あるので気を付けましょう

サンプルコード

digitalWrite(ピン番号, HIGH); // HIGHを出力
digitalWrite(ピン番号, LOW); // LOWを出力

// 5番ピンを使用したクロック動作
int clock_pin = 5;

digitalWrite(clock_pin, HIGH);
delay(5);
digitalWrite(clock_pin, LOW);

millis

リファレンス

説明

プログラムが書き込まれ、実行されてからの経過時間(ミリ秒)を返す関数です

注意すべき点

返り値は unsigned long 型です

int に値を代入することも可能ですが、 unsigned longintlong と比べて保持可能なデータ量が大きいので、 長い時間を計測する場合などにエラーを引き起こす原因となることがあります

サンプルコード

unsigned long time = millis();

// delayを使わないクロック
unsigned long start_ms;

// クロックを開始する関数
void clock_start() {
    digitalWrite(5, HIGH);
    start_ms = millis();
}

// 定期実行してクロックを停止させる関数
void clock_check(unsigned long duration) {
    if(millis() - start_ms >= duration) {
        digitalWrite(5, LOW);
    }
}

noTone

リファレンス

説明

tone で鳴らした音を消す関数です

注意すべき点

特になし

サンプルコード

noTone(ピン番号);

// 4番で鳴らした音を1秒後に消す
tone(4, 440);
delay(1000);
noTone(4);

pinMode

リファレンス

説明

指定したピンをインプットもしくはアウトプットとして設定します

入力を読み取る場合(スイッチやセンサー)にはインプットを、出力を行う場合にはアウトプットを指定してください

注意すべき点

pinMode 関数を使用しない場合でもプログラムが動作することがありますが、 pinMode 関数は内部インピーダンスを用途に合わせて切り替えているので、 なるべく指定するようにしてください

サンプルコード

pinMode(ピン番号, INPUT); // インプットに指定
pinMode(ピン番号, OUTPUT); // アウトプットに指定

// for-each文を用いた効率的な指定方法
const int output_pins[] = {11, 12, 13, 14, 15};

for(int i : output_pins) {
    pinMode(i, OUTPUT);
}

tone

リファレンス

説明

指定したピンに指定した周波数の信号を送る関数です

鳴らし続ける時間(ミリ秒)を指定することも可能です

注意すべき点

鳴らし続ける時間を指定しなかった場合、 noTone が実行されるまで音が鳴り続けます

時間を指定した場合、 delay と違い、 時間が経過する間プログラムは停止しません

また、31Hz以下の周波数は生成できません

サンプルコード

tone(ピン番号, 周波数); // 時間を指定しない場合
tone(ピン番号, 周波数, 時間(ミリ秒)); // 時間を指定する場合

// ドの音を4番ピンで3秒間鳴らす
tone(4, 440, 3000);