Arduino制御のための関数
Arduinoボードの動作を制御するためのプログラム(スケッチ)はArduino言語で書きます。C言語をベースにしていて、Processingとほぼ同じ記述方法をとります。ここでは、データの読み込み、書き出しを中心にArduino言語の関数を説明します。・デジタル信号の入出力
・アナログ信号の入出力
・シリアルポートへのデータの出力
・その他よく使う関数
デジタル信号の入出力
■ pinMode(pin, mode)引数pinで指定するピンのモードmode(入力で使うか、出力で使うか)を指定します。 pinはピン番号(整数)、modeはINPUTかINPUT_PULLUPかOUTPUTのいずれかの値です。
【INPUT_PULLUPとは】 回路では、大きな電流が流れることを防ぐため、デジタル端子を5V電源に接続する場合あいだに抵抗を挟みます。これをプルアップ抵抗と呼びます。Arduinoボードはプルアップ抵抗を内蔵していて、それを利用して入力としてピンを使う場合には、modeにINPUT_PULLUPを指定します。
【例】const int switchPin = 2; // スイッチをつなげたピン番号 pinMode(switchPin, INPUT); // switchPinで指定したピンを入力として使うconstはswitchPinを定数(値を変えられない)として定義することを意味します。定数としたのは誤って値を変更しないためで、constを付けずに変数として定義しても動作します。
■ digitalRead(pin)
引数pinで指定したピンの値を読みます。その結果はHIGHあるいはLOWです。5Vのボードの場合、ピンの電圧が3Vより大きい場合、digitalReadの値はHIGHになります。
【例】int switchState = 0; //スイッチの状態を保存する変数 switchState = digitalRead(switchPin); //ピンの値(スイッチの状態)を読むプルアップ抵抗(電源側に抵抗が接続)を使っている場合、スイッチがオフだとHIGH、スイッチがオンだとLOWの値になります。プルダウン抵抗(GND側に抵抗が接続)の場合、逆にスイッチがオフだとLOW、スイッチがオンだとHIGHの値を読みます。
■ digitalWrite(pin, value)
引数pinで指定したピンの値に、2つ目の引数で指定した値(HIGHあるいはLOW)を出力します。5Vのボードの場合、HIGHはピンの電圧を5Vに、LOWは0Vにします。
【例】digitalWrite(13, HIGH); //ボード上のLED(デジタルピン13に接続されている)を点灯HIGHを出力するとソース電流(電流を供給する)となり、例えばGND側に直列接続されている抵抗と接続しているLEDが点灯します。一方、LOWの出力はシンク電流(電流を吸い込む)となり、例えば5V電源と直列接続されている抵抗と接続しているLEDが点灯します。
アナログ信号の入出力
■ alalogRead(pin)引数pin(整数)で指定したピンの値を読みます。 ArduinoボードはADコンバータ(アナログの値をデジタルに変換)をもっていて、0から5Vの値を0から1023の数値に変換します。
【例】int alalogPin = 1; //アナログピン番号 int val = 0; //入力値を保存 val = analogRead(analogPin); //ピンの値を読んで変数valに代入
■ analogWrite(pin, value)
引数pinで指定したピンに、引数valueで指定した値を出力します。Arduinoでは、PWM(Palse Wave Modulation)と呼ばれる機能を使ってアナログ値を出力します。
Aruduino Uno(ATmega328Pのマイコン)の場合、デジタルピンの3,5,6,9,10,11でこの機能が使えます(~マークがついているデジタルピン)。デジタルピンなので0V(オフ)と5V(オン)の2つの値しか出力できないのですが、ごく短い時間で2つの値を切り替え、オンオフの時間の割合を変えることで0-255の値を出力できます。
【例】analogWrite(9, ); //ボード上のLED(デジタルピン13に接続されている)を点灯
シリアルポートへのデータの出力
■ Serial.begin(speed)シリアル通信を始める前に、begin()関数を使って通信を行う速度(bps: bit per second)を設定します。引数speedには多くの場合9600を指定します。
■ Serial.write(value)
Serial.write(str)
シリアルポートに引数の値(バイナリデータ)を出力します。valueは1バイトの値、strは文字列(複数バイト)です。送信したバイト数を返します。
■ Serial.print(value)
人が読める形(ASCIIテキスト)で引数の値をシリアルポートに出力します。引数には全ての型のデータを指定できます。送信したバイト数を返します。テスト段階でシリアルモニタに値を表示する場合にはこの関数を使います。
【例】Serial.print("abc"); //文字列"abc"を出力 Serila.print(123); //文字列"123"を出力
■ Serial.println(value)
print()と同じですが、出力する値の最後にキャリッジリターン(CR, ASCIIコード13)とニューライン(LF, ASCIIコード10)を付けて送ります。送信したバイト数を返します。
その他
■ delay(ms)引数に指定したミリ秒単位の時間だけ、プログラムの処理を停止します。
【例】delay(1000); //処理を1秒停める
■ map(value, fromLow, fromHigh, toLow, toHigh) fromLowとfromHighの間の値valueを、別の範囲toLowとtoHighの間の値に変換し、計算結果を整数として返します(小数点以下は切り捨てられる)。
【例】y = map(x, 0, 1023, 0, 255); //0-1023の値を0-255に換算 y = map(x, 1, 50, 50, 1); //数値を範囲内で反転させる