Arduino IDE setup関数とは?
setup
関数は、Arduinoプログラム(スケッチ)の開始時に一度だけ実行される特別な関数です。主に初期設定(ピンモードの指定やシリアル通信の開始など)を行うために使用されます。以下に、setup
関数の役割や使い方について、サンプルスケッチと共に詳しく説明します。
基本的な構造
Arduinoプログラムには必ずsetup()
とloop()
の2つの関数が必要です。setup
関数は、プログラム開始時に一度だけ実行され、loop
関数はその後繰り返し実行されます。
void setup() {
// 初期設定を行うコード
}
void loop() {
// 繰り返し実行するコード
}
setup関数の役割
setup
関数の主な役割は次の通りです。
- ピンモードの設定
pinMode()
関数を使用して、デジタルピンを入力または出力として設定します。
- シリアル通信の開始
Serial.begin()
でシリアル通信を設定することで、ArduinoとPC間でのデータの送受信が可能になります。
- 外部機器やセンサーの初期化
- 使用するセンサーやディスプレイなどのデバイスの初期設定を行います。
サンプルスケッチ 1: LEDの初期設定
以下は、内蔵LEDを使った簡単なサンプルです。このスケッチでは、setup
関数でLEDピンを出力モードに設定し、loop
関数で点滅させます。
const int ledPin = 13; // LED接続ピン(Arduinoの内蔵LEDはピン13)
void setup() {
pinMode(ledPin, OUTPUT); // LEDピンを出力モードに設定
}
void loop() {
digitalWrite(ledPin, HIGH); // LEDを点灯
delay(500); // 0.5秒待機
digitalWrite(ledPin, LOW); // LEDを消灯
delay(500); // 0.5秒待機
}
説明
pinMode(ledPin, OUTPUT);
によって、ledPin
(ピン13)を出力ピンとして設定します。loop
関数では、500ミリ秒ごとにLEDを点滅させています。
サンプルスケッチ 2: シリアル通信の初期化
次に、シリアルモニタを使ってArduinoのデータをPCに表示するサンプルです。setup
関数でシリアル通信を初期化し、センサーのデータを表示します。
const int sensorPin = A0; // センサーの接続ピン(アナログ0)
void setup() {
Serial.begin(9600); // シリアル通信を9600bpsで開始
pinMode(sensorPin, INPUT); // センサーを接続するピンを入力モードに設定
}
void loop() {
int sensorValue = analogRead(sensorPin); // センサーの値を読み取る
Serial.println(sensorValue); // 読み取った値をシリアルモニタに出力
delay(1000); // 1秒ごとにデータを送信
}
説明
Serial.begin(9600);
により、9600bpsの速度でシリアル通信が開始されます。analogRead(sensorPin);
でセンサーの値を読み取り、Serial.println(sensorValue);
でその値をシリアルモニタに表示します。
サンプルスケッチ 3: ボタンの初期設定
次の例では、ボタンが押されたかどうかをチェックし、押されたらLEDを点灯させるプログラムです。setup
関数でLEDピンを出力、ボタンピンを入力モードに設定します。
const int ledPin = 13; // LEDのピン
const int buttonPin = 7; // ボタンのピン
void setup() {
pinMode(ledPin, OUTPUT); // LEDピンを出力モードに設定
pinMode(buttonPin, INPUT_PULLUP); // ボタンピンをプルアップ付き入力モードに設定
}
void loop() {
int buttonState = digitalRead(buttonPin); // ボタンの状態を読み取る
if (buttonState == LOW) { // ボタンが押されたら
digitalWrite(ledPin, HIGH); // LEDを点灯
} else {
digitalWrite(ledPin, LOW); // ボタンが押されていなければLEDを消灯
}
}
説明
pinMode(buttonPin, INPUT_PULLUP);
は、ボタンピンをプルアップ付き入力モードに設定します。これにより、ボタンが押されていないときはHIGH、押されたときはLOWになります。loop
関数でボタンの状態を読み取り、押された場合のみLEDを点灯させます。
サンプルスケッチ 4: 複数のセンサーやデバイスの初期化
複数のデバイス(例えば、温度センサーとLCDディスプレイ)を使用する場合も、setup
関数でそれぞれの初期設定を行います。
#include <LiquidCrystal.h> // LCDディスプレイ用のライブラリ
const int tempSensorPin = A1; // 温度センサーのピン
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // LCDディスプレイのピン接続
void setup() {
Serial.begin(9600); // シリアル通信を開始
pinMode(tempSensorPin, INPUT); // 温度センサーを入力モードに設定
lcd.begin(16, 2); // LCDディスプレイのサイズを設定(16x2)
lcd.print("Temp Sensor Test"); // LCDに初期メッセージを表示
}
void loop() {
int sensorValue = analogRead(tempSensorPin); // 温度センサーの値を読み取る
float temperature = (sensorValue * 5.0 / 1023.0) * 100; // 温度に変換
lcd.setCursor(0, 1); // LCDの2行目にカーソルを移動
lcd.print("Temp: ");
lcd.print(temperature); // 温度を表示
lcd.print(" C");
Serial.print("Temperature: "); // 温度データをシリアルモニタにも表示
Serial.print(temperature);
Serial.println(" C");
delay(1000); // 1秒ごとにデータを更新
}
説明
Serial.begin(9600);
でシリアル通信を開始し、lcd.begin(16, 2);
でLCDディスプレイのサイズを設定します。- 温度センサーからのデータを読み取って温度に変換し、LCDとシリアルモニタに表示します。
まとめ
setup
関数はプログラム開始時に一度だけ実行され、主にハードウェアの初期設定を行います。これにより、loop
関数でデバイスを正常に操作できるようになります。各種ピンモードの設定やデバイスの初期化は、必要に応じてsetup
関数内で行いましょう。
コメント