Arduinoでスイッチ入力テスト

●目的

スイッチ入力をどのようにやれば良いのか確認。
また、内部プルアップ等についても検討。



●結果

簡単なコードで動かせる。
内部プルアップ等は無いので、プルアップやプルダウンは必要。




●動作
Digital入力 No13 ピンを
VCCとGND どちらかに繋げる。
VCCならばLED点灯。
GNDならば消灯。




●回路とコード

int ledPin = 13;
int inputPin = 11;
int val = 0;

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

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


●出力波形

入力がHIGHの時。
LED+部で観測。
約2V来ている。


入力がGNDの時。
LED+部で観測。
0V来ている。



●問題点
入力部はハイインピーダンスのご様子。
入力が不定の場合、digitalRead(inputPin)の返り値は、お約束通りノイズ乗りまくり。
波形は↓



入力を開放にした時の波形。
LED+部で観測。
約2V〜0Vの矩形波
周波数は約50Hz。AC100V電源アースノイズと思われる。
ちゃんと、プルアップorプルダウンしないとダメっぽ。


●●追記 08.10.05
内部プルアップ利用方法がわかりました。

しかしながら、ATMEGA168のチップ内部には、プルアップ用の抵抗が組み込まれており、そのプルアップ抵抗を有効にすれば、問題なく(設計どおり)スイッチを利用できるようになります。チップ内部のプルアップ抵抗を有効にするためには、該当のピンをpinMode()関数で入力に設定した上で、 digitalWrite()関数でHIGHを出力(入力に設定したにもかかわらず)してやります
マイクロファン » スイッチより引用

だそうです。
これで、入力端子開放時のノイズ問題は解消できますね★
アナログ入力時は使用しないほうが良いです。
参考リンク↓
PIC AVR 工作室別館 ”arduinoの館 − 標準機能 アナログ入力”










.