Arduino Nano R4の活用 ⑤ スイッチ入力のスケッチ スケッチの説明<第2回>

 外付けLEDを、スイッチを押したときにだけ点灯させるスケッチの内容を見ます。

 青色LEDはA7端子に、スイッチはD2端子につながっています。

   Arduino Nano R4の活用 ④ スイッチ入力

setup()

  Serial.begin(9600);
  delay(1000);
  Serial.println("start");
 
 最初の3行は、シリアル通信を利用できるようにしてstartというメッセージを送ります。マイコンではほとんどの通信がシリアル通信です。ここで Serial.begin(9600);のシリアルは、USBでPCとつないでいるシリアル通信を指します。USBケーブルでつながっているので、USBのプロトコルで通信しているのですが、仮想的にUARTのシリアル通信を利用します。
 リアルなUARTはDO、D1端子を利用します。
 
 UARTとは当初RS-232Cというシリアル通信プロトコルで使われ始めましたが、信号レベルに±15Vが必要だったのを0-5Vで利用しているのをUARTと呼んでいるようです。
 
 次のdelay(1000);では1秒待ちます。この部分はいろいろなArduinoの種類やIDEのバージョンで変化しています。仮想UARTがreadyになったらというのを本来記述するのですが、このルネサスのマイコンとIDEの現バージョンでは、うまく動作していないように思えます。なので、1秒待ってという記述にしています。
 

 シリアルモニタは、IDEの右上のアイコンをクリックします。利用を開始した最初はこのアイコンをクリックしますが、スケッチを修正してコンパイルしたときは黒い画面になった後、シリアルモニタの画面に勝手に変更されることが多いで。でも、切り替わらないときはこのアイコンを押します。

 シリアルモニタは、IDE画面に下の部分です。

 Serial.begin(9600);9600が通信速度で、9600baudと一致しているかを確認しておきます。最近のサンプル例では、9600もしくは115200が使われることが多いです。

 実行結果のところでは、スイッチの状態を読み込んで表示しており、スイッチを押していないのでずっと1が表示されています。スイッチを押すと0になります。

  pinMode(D2, INPUT_PULLUP);
は、D2端子を入力に設定しています。INPUTではなくINPUT_PULLUPを記述すると、端子は、推定約50kΩを通して電源5Vにつながります。したがって、入力に何もつながないとHIGH=1の状態です。入力をGNDにつなげるとLOW=0になります。
 このプルアップするというのは、端子にノイズが入って誤動作するような状況をほとんどなくすことができるので、積極的に使います。
 
  pinMode(A7, OUTPUT);
  digitalWrite(A7, LOW);
 A7端子をディジタル出力に設定して、LOWを出力します。
 
loop()
 

  digitalWrite(A7, LOW);
 
 ループの最初に、LEDを消灯します。
 
  int buttonState = digitalRead(D2);
  Serial.println(buttonState);
 
 digitalRead(D2) でスイッチの状態を読み取ります。変数buttonState にその値を代入しています。変数は整数型です。
 シリアルモニタにその数値を表示します。
 
  if (!buttonState) {
     digitalWrite(A7, HIGH);
     delay(30);
     digitalWrite(A7, LOW);
  }
 
 if文では、buttonStateが1でなかったら、LEDを一瞬(30ms)点灯します。
 スイッチはプルアップされているので、スイッチが押されると0になります。
 
  delay(50);
 
 50ms待ってから先頭に戻り、繰り返します。
 

チャタリング対策

 実は、上記のプログラムは正しく働かないことがあります。スイッチは機械式なので、押した瞬間にON/OFFが短い期間で発生することがあります。数msです。

 スイッチの種類によって異なり、最近の電子機器でよく使われるタクト・スイッチは、チャタリングの発生は極めて少ないです。

 対策方法は2通りあります。ひとつは回路で、もう一つはソフトウエアです。

 下記の記事を参考にしてください。

  今から始める電子工作 ⑥ ディジタル入力 その2 チャタリング対策

 ここでは、ハードウェアによるチャタリング対策を実験します。

 チャタリング回路のないときの波形です。約0.3msの間、チャタリングが起こっています。

 積分回路を入れます。スケッチでは、入力はプルアップなしに設定し直します。

 pinMode(D2, INPUT);
 

 立ち上がりと立ち下がりの波形がなまっています。チャタリングが起こっても、この範囲に入るので、ON/OFFを間違って検知しなくなります。

前へ

Arduino Nano R4の活用 ④ スイッチ入力