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来ている。
●問題点
入力部はハイインピーダンスのご様子。
入力が不定の場合、digitalRead(inputPin)の返り値は、お約束通りノイズ乗りまくり。
波形は↓
入力を開放にした時の波形。
LED+部で観測。
約2V〜0Vの矩形波。
周波数は約50Hz。AC100V電源アースノイズと思われる。
ちゃんと、プルアップorプルダウンしないとダメっぽ。
●●追記 08.10.05
内部プルアップ利用方法がわかりました。
しかしながら、ATMEGA168のチップ内部には、プルアップ用の抵抗が組み込まれており、そのプルアップ抵抗を有効にすれば、問題なく(設計どおり)スイッチを利用できるようになります。チップ内部のプルアップ抵抗を有効にするためには、該当のピンをpinMode()関数で入力に設定した上で、 digitalWrite()関数でHIGHを出力(入力に設定したにもかかわらず)してやります
マイクロファン » スイッチより引用
だそうです。
これで、入力端子開放時のノイズ問題は解消できますね★
アナログ入力時は使用しないほうが良いです。
参考リンク↓
PIC AVR 工作室別館 ”arduinoの館 − 標準機能 アナログ入力”
.