どうも、なかしー(@nakac_work)です。
僕は自動車や家電製品のマイコンにプログラミングをする組み込みエンジニアとして働いています。
Arduinoで電子工作をしていると、タクトスイッチを押した時に決めれたときだけ処理を実行したいときが出てくると思います。
でも、
タクトスイッチをArduinoのどこに繋げばいいのか分からない!
プログラミングはどうすればいいの?
と悩んでいる方もいると思います。
そんな方の為に、次の3つの内容をお伝えします。
- タクトスイッチを使った回路とArduinoへの接続方法
- Arduinoでタクトスイッチの状態を読み取るプログラム
- 他のスイッチの回路での応用
この記事を読み終わるころには「スイッチを使ったプログラミングを作れるようになる」ことを目標に頑張りましょう!
動画でも解説しています。
タップできるもくじ
タクトスイッチを使った回路とArduinoへの接続方法
回路は2パターンあります。
この回路はタクトスイッチを押していない時に電源電圧かGNDになるようになってて、押すと反対の電圧になります。
なぜ、常にどちらか一方の電圧にしておく必要があるのかと疑問に思われた方もいると思います。
理由は「ノイズなどによる誤動作を防ぐため」です。
Arduinoの端子に何を接続していない、つまり電源電圧もしくはGNDではない場合に何が起こるか分かりません。
タクトスイッチを押していないのに、勝手に動作することも考えられます。
そのようなことを考えて、スイッチを押していない時でも必ず電源電圧かGNDがArduinoに入力されるようにしておきましょう。
Arduinoへの接続方法
今回はこのようにArduinoを接続しました。
- タクトスイッチ(左)・・・2ピン
- タクトスイッチ(右)・・・3ピン
- LED(左)・・・7ピン
- LED(右)・・・8ピン
なお、タクトスイッチ(左)は押してないときは電源電圧で押すとGNDとなっていて、タクトスイッチ(右)はその反対となっています。
別の記事で紹介したようにLEDも2つArduinoに繋ぎます。
>>ArduinoでLEDを点滅させる方法【接続図とプログラミングも公開】
Arduinoでタクトスイッチの状態を読み取るプログラム
作成するプログラムのフロー図はこんな感じです。
これをArduinoのプログラミングにするとこんな感じです。
char sw1 = 0;
char sw2 = 0;
void setup() {
pinMode(2, INPUT); //2ピンを入力に設定
pinMode(3, INPUT); //3ピンを入力に設定
pinMode(7, OUTPUT); //7ピンを出力に設定
pinMode(8, OUTPUT); //8ピンを出力に設定
}
void loop() {
sw1 = digitalRead(2); //2ピンに繋がっているタクトスイッチの状態を読み取る
if(sw1 == LOW) {
digitalWrite(7,HIGH); //LED1を点灯
} else {
digitalWrite(7,LOW); //LED1を消灯
}
sw2 = digitalRead(3); //3ピンに繋がっているタクトスイッチの状態を読み取る
if(sw2 == HIGH) {
digitalWrite(8,HIGH); //LED2を点灯
} else {
digitalWrite(8,LOW); //LED2を消灯
}
}
今回使った関数を紹介します!
pinMode(ピン,INPUT)
pinModeのカッコのあとにピン番号とINPUTと書くことで、そのピンを入力として扱うことができます。
初期設定なので、setup()の中に書きます。
digitalRead(ピン)
pinModeで入力ピンに設定すればdigitalRead()関数を使うと、そのピンの状態をArduinoが読み取ってくれます。
関数を実行したあとにその結果を今回はsw1とsw2という変数に代入しています。
そのsw1とsw2をif文で判定して、LEDを点灯させるか消灯させるかを決めています。
もしも、if文が分からなければこちらの記事を読んでください!
>>【C言語】if文の使い方まとめ|条件分岐で処理を実行させる方法
タイトルはC言語になっていますが、ArduinoのプログラミングはC言語ベースの言語なので書き方など同じです。
タクトスイッチ以外のスイッチでも応用可能
今回はタクトスイッチを例にArduinoで状態を読み取るプログラムを作成しましたが、もちろん他のスイッチでも応用可能です。
Arduinoへの入力は変わらないので、プログラムはそのまま使うことができます。
Arduinoでタクトスイッチの状態を読み込む方法|まとめ
この記事では「Arduinoでタクトスイッチの状態を読み込む方法」について紹介しました。
この記事のポイントは3つあります。
- Arduinoへ電源電圧かGNDが常時繋がるように回路を組む
- digitalRead関数とif文を組み合わせて使う
- タクトスイッチ以外のスイッチでも応用可能
Arduino関連の人気記事
>>【Arduino入門キット】電子工作の勉強におすすめ【こんなに安くていいの?】
>>Arduinoでできることを紹介【逆にできないことは何?】
当ブログで人気のArduino入門キット