C言語初心者必見!DigitalWrite関数を使った10の効果的な使い方

C言語のDigitalWrite関数の詳細な使い方を解説する画像C言語
この記事は約9分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

C言語でのプログラミングを学び始めた方にとって、DigitalWrite関数は非常に重要な概念です。

この関数はデジタル出力を制御するための主要なツールであり、LEDの制御からモーターの回転制御まで、様々な場面で利用されます。

本記事では、初心者の方でも理解できるように、DigitalWrite関数の基本的な使い方から応用例、注意点、カスタマイズ方法まで、詳しく解説します。

●DigitalWrite関数とは?

DigitalWrite関数は、デジタル出力ピンにHIGHまたはLOWの状態を設定するための関数です。

この関数は、Arduinoなどのマイクロコントローラでよく使用されます。

基本的な形式は次の通りです。

digitalWrite(pin, value);

ここで、pinは出力を制御したいデジタルピンの番号を指定します。

valueには、そのピンに送りたい状態(HIGHまたはLOW)を指定します。

HIGHは通常、電源電圧と同等(5Vまたは3.3Vなど)を意味し、LOWは0Vを意味します。

●DigitalWriteの基本的な使い方

さて、次にDigitalWrite関数の基本的な使い方について見ていきましょう。

○サンプルコード1:LEDの点灯

下記のコードでは、DigitalWrite関数を使ってLEDを点灯させるコードを紹介しています。

この例では、Arduinoの13番ピンに接続されたLEDをHIGHに設定し点灯させています。

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
}

まず最初にsetup関数でピンモードを設定します。

ピンモードはピンの動作を制御するためのもので、この場合は13番ピンを出力モード(OUTPUT)に設定しています。

次にloop関数で13番ピンをHIGHに設定します。これにより、13番ピンに接続されたLEDが点灯します。

●DigitalWriteの詳細な使い方

ここからは、DigitalWrite関数の詳細な使い方について見ていきましょう。

○サンプルコード2:LEDの点滅

下記のコードでは、DigitalWrite関数とdelay関数を組み合わせて、LEDを点滅させるコードを紹介しています。

この例では、LEDを1秒間隔で点灯と消灯を繰り返しています。

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}

このコードでは、loop関数内でまず13番ピンをHIGHに設定しLEDを点灯させ、その後delay関数を使って1秒間(1000ミリ秒)待機します。

次に、13番ピンをLOWに設定しLEDを消灯し、再度1秒間待機します。

この操作が無限に繰り返されるため、LEDは1秒間隔で点滅することになります。

○サンプルコード3:複数のLEDを制御

次に、複数のLEDを制御するコードを見てみましょう。

下記のコードでは、3つのLED(13番、12番、11番ピンに接続)を順番に点灯させるコードを紹介しています。

void setup() {
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);

  digitalWrite(12, HIGH);
  delay(1000);
  digitalWrite(12, LOW);

  digitalWrite(11, HIGH);
  delay(1000);
  digitalWrite(11, LOW);
}

このコードでは、setup関数で3つのピンを出力モードに設定します。

その後、loop関数内でそれぞれのLEDを1秒間隔で順番に点灯させています。

○サンプルコード4:ボタンによるLED制御

最後に、ボタンの入力によってLEDを制御するコードを紹介します。

この例では、ボタンが押されたときにLEDが点灯し、ボタンが離されたときにLEDが消灯するコードです。

void setup() {
  pinMode(13, OUTPUT);
  pinMode(2, INPUT);
}

void loop() {
  int buttonState = digitalRead(2);
  if (buttonState == HIGH) {
    digitalWrite(13, HIGH);
  } else {
    digitalWrite(13, LOW);
  }
}

このコードでは、setup関数で13番ピンを出力モード、2番ピンを入力モードに設定しています

その後、loop関数内で2番ピンの状態を読み取り、その結果に基づいて13番ピンの状態を設定しています。

具体的には、ボタンが押されると2番ピンはHIGHになるため、このとき13番ピンもHIGHに設定されLEDが点灯します。

逆に、ボタンが離されると2番ピンはLOWになるため、このとき13番ピンもLOWに設定されLEDが消灯します。

●DigitalWriteの応用例

次に、DigitalWrite関数の応用例について見ていきましょう。

○サンプルコード5:モーターの回転制御

下記のコードでは、DigitalWrite関数を使ってDCモーターの回転を制御するコードを紹介しています。

この例では、ボタンが押されたときにモーターを回転させ、ボタンが離されたときにモーターを停止させます。

void setup() {
  pinMode(9, OUTPUT);
  pinMode(2, INPUT);
}

void loop() {
  int buttonState = digitalRead(2);
  if (buttonState == HIGH) {
    digitalWrite(9, HIGH);
  } else {
    digitalWrite(9, LOW);
  }
}

このコードでは、setup関数で9番ピンを出力モード、2番ピンを入力モードに設定しています。

その後、loop関数内で2番ピンの状態を読み取り、その結果に基づいて9番ピンの状態を設定しています。

具体的には、ボタンが押されると2番ピンはHIGHになるため、このとき9番ピンもHIGHに設定されモーターが回転します。

逆に、ボタンが離されると2番ピンはLOWになるため、このとき9番ピンもLOWに設定されモーターが停止します。

○サンプルコード6:温度センサーとの連動

次に、温度センサーとLEDを連動させるコードを紹介します。

この例では、温度が一定値を超えたときにLEDを点灯させます。

#define TEMP_PIN A0
#define LED_PIN 13

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  int temp = analogRead(TEMP_PIN);
  if (temp > 500) {
    digitalWrite(LED_PIN, HIGH);
  } else {
    digitalWrite(LED_PIN, LOW);
  }
}

このコードでは、setup関数でLED_PINを出力モードに設定しています。

その後、loop関数内で温度センサーから温度を読み取り、その値が500を超えた場合にLEDを点灯、それ以外の場合にLEDを消灯しています。

●DigitalWriteの注意点と対処法

DigitalWrite関数を使用する際には、次の注意点を頭に入れておきましょう。

①ピンモードの設定

DigitalWrite関数を使用する前に、対象となるピンが出力モード(OUTPUT)に設定されていることを確認しましょう。

ピンモードが設定されていないと、予期せぬ動作を引き起こす可能性があります。

②電流の考慮

マイクロコントローラのデジタル出力ピンからは限られた電流しか流せません。

大電流を必要とするデバイスを制御する場合には、トランジスタやリレーなどのスイッチングデバイスを介して制御する必要があります。

③電圧レベルの違い

デジタル出力のHIGHはマイクロコントローラの電源電圧と同じになります。

そのため、5Vのマイクロコントローラから出力されるHIGHは5Vになりますが、3.3Vのマイクロコントローラから出力されるHIGHは3.3Vになります。

これを忘れてデバイスに接続すると、デバイスが損傷する可能性があります。

以上のような注意点を頭に入れ、適切にDigitalWrite関数を使用することで、様々なデバイスを制御することが可能になります。

●DigitalWriteのカスタマイズ方法

DigitalWrite関数の使い方を理解したら、次はそのカスタマイズ方法を覚えましょう。

○サンプルコード7:カスタム関数の作成

下記のコードでは、自分だけのDigitalWrite関数を作成する方法を紹介しています。

この例では、ピン番号と状態を指定してLEDを点滅させるカスタム関数を作成しています。

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  customBlink(13, HIGH);
  delay(1000);
  customBlink(13, LOW);
  delay(1000);
}

void customBlink(int pin, int state) {
  digitalWrite(pin, state);
}

このコードでは、新たにcustomBlinkという関数を定義し、その中でDigitalWrite関数を呼び出しています。

これにより、ピン番号と状態を引数として指定してLEDを制御することができます。

まとめ

以上、C言語で使用するDigitalWrite関数について、その基本的な使い方から応用例、注意点、カスタマイズ方法までを紹介しました。

この記事を通じて、DigitalWrite関数の使い方が理解でき、具体的なプログラミングに活用できたら幸いです。

初心者の方でも安心してDigitalWrite関数を使いこなせるようになることでしょう。

これからもC言語の学習を頑張りましょう!