プログラムと電子回路2

今回の目標

LEDとスイッチをつないだ回路を作り、スイッチを押すと点灯パターンが変化するようにする

複雑な動作ですが、ステップを踏んで説明します。

前回の部分がわからない場合、戻って復習してください。

✅回路の基本部分を配線しよう
✅LEDを1つだけつないでみよう
🟩LEDを増やしてみよう
🟩スイッチをつないでみよう
🟩プログラムを複雑にしてみよう

今回使う器具

  • Arduino
  • USBケーブル
  • ブレッドボード
  • ジャンパワイヤ 10本以上
  • 炭素皮膜抵抗 1kΩ 4本
  • LED 赤・青・黄
  • タクトスイッチ

LEDを増やしてみよう

前回はピン番号3にLEDを接続しました。今回はピン番号4と5にもLEDを接続し、 合計3つのLEDを点滅させましょう。

3つのLEDを順番に点滅させてみてください。

💪進捗確認

3つのLEDが順番に点滅したら、進捗確認1にチェックしてください。

なお、ここまで使ってきたプログラムには以下のような意味があります。

プログラム 意味
void setup() { ... } { ... }内の処理を、マイコンが起動したときに、
1度だけ実行する
void loop() { ... } setupの処理が終わった後に、
{ ... } 内の処理を無限に繰り返す
pinMode(pin, OUTPUT); pinで指定した番号の入出力ピンを設定する。
2つ目の引数はモードであり、
出力モードOUTPUT、入力モードINPUT
内部抵抗を使った入力モードINPUT_PULLUP等がある
digitalWrite(pin, HIGH); 出力ピンから指定した信号を出力する。
2つ目の引数はHIGHLOWかを指定し、HIGH=5V, LOW=0V
delay(1000); 指定した時間(ミリ秒)だけ、処理を止める。
この場合1000ミリ秒=1秒

スイッチをつないでみよう

まずは、下図のように回路を組み立ててください。スイッチはブレッドボードの真ん中をまたぐように取り付けてください。右下は赤い線を5Vピン、黒い線をGNDピンにつないでください。

最低限動くプログラムを提供しますので、どのように動作しているか考えてみてください。

const int buttonPin = 2;
const int ledPin =  13;
int buttonState = 0;

void setup() {
    pinMode(ledPin, OUTPUT);
    pinMode(buttonPin, INPUT);
}

void loop() {
    buttonState = digitalRead(buttonPin);
    if (buttonState == HIGH) {
        digitalWrite(ledPin, HIGH);
    } else {
        digitalWrite(ledPin, LOW);
    }
}

以下に注釈コメント付きで示します。プログラムは同じものです。

const int buttonPin = 2;
const int ledPin =  13;
// ボタンの状態 0は押されていない 1は押されている
int buttonState = 0;

void setup() {
    // 電圧を出力するピンはOUTPUT
    pinMode(ledPin, OUTPUT);
    // スイッチの電圧を読み取るピンはINPUT
    pinMode(buttonPin, INPUT);
}

void loop() {

    // スイッチのピンの電圧を読み取る
    // 0は押されていない 1は押されている
    buttonState = digitalRead(buttonPin);

    // もしピンの電圧が1(押されている)なら、
    if (buttonState == HIGH) {
        // LEDを点灯
        digitalWrite(ledPin, HIGH);
    }

    // そうでないなら、
    else {
        // LEDをOFF
        digitalWrite(ledPin, LOW);
    }
}

Note

digitalRead(buttonPin)01どちらかの値を返します。では、その下でbuttonState == HIGH0でも1でもない文字と比較しているのはなぜでしょう?実は、このプログラムでは1HIGHは同じものを表しています。同様に、0LOWは同じものを表します。この仕様は全てのプログラミング言語やプログラムで共通ではないことに気をつけてください。

Note

スイッチが押されたかどうかを識別するためには、スイッチ1つにつき抵抗が1つ必要です。しかし、マイコンボードの内部にある抵抗を使うと、外に抵抗をつけなくてもスイッチのオンオフが識別できます。この機能をプルアップと呼びます。

プルアップを行うためには、pinModeの指定でpinMode(ピン番号, INPUT_PULLUP)のように指定します。

Note

このプログラムは、ファイルスケッチの例02.DigitalButtonとほとんど同じものです。

💪進捗確認

スイッチによってLEDを点灯できたら、進捗確認2にチェックしてください。

プログラムを複雑にしてみよう

ここからは、自身で以下の動作ができる回路とプログラムを作ってみてください。

回路: - LEDが3個(赤、黄、青)搭載されている - スイッチを1つ搭載している

プログラム: - スイッチを押している間はLEDが順番に1つづつ点灯(赤→黄→青→赤→…) - スイッチを離したら、最後についていたLEDがそのまま点灯し続ける

💪進捗確認

正しく動作したら、進捗確認3にチェックしてください。

応用課題

時間が余った場合、以下の課題に挑戦してみてください。

  • スイッチを押している間と離している間で、点滅の順番が変わるようにしましょう。

💪進捗確認

正しく動作したら、進捗確認4にチェックしてください。

さらに時間が余ったら挑戦してください。

  • スイッチを1回押すと赤、もう1回押すと青…といったように、押すたびに色が変わるようにしましょう。

提出

書いたプログラムはダウンロードボタンからダウンロード出来ます。.inoという形式です。