本格的にArduino > スイッチを読み取る

「本格的にArduino/スイッチを読み取る」の編集履歴(バックアップ)一覧はこちら

本格的にArduino/スイッチを読み取る」(2011/05/15 (日) 15:59:30) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*プルアップの回路 http://www.arduino.cc/en/Tutorial/Button #image(http://www2.atpaint.jp/arduino/src/OB1236994208387.png) スイッチがOFFの時はAの電圧がHIGHになる。 スイッチがONの時はAの電圧がLOWになる。 *プルダウンの回路 #image(http://www2.atpaint.jp/arduino/src/OB1236994483372.png) スイッチがOFFの時はAの電圧がLOWになる。 スイッチがONの時はAの電圧がHIGHになる。 *消費電力 通常状態でスイッチがOFFの場合はプルダウンの回路の方が消費電力が少ない。 通常状態でスイッチがONの場合はプルアップの回路の方が消費電力が少ない。 まあ気にすることはないと思うけど。 *AVR内蔵のプルアップ抵抗を使える? http://nekosan0.bake-neko.net/structure_digital_port.html によると、 digitalWrite(pin, HIGH); でプルアップされるようです。 #image(http://www2.atpaint.jp/arduino/src/OB1236996142792.png) 抵抗1つ省略できるので便利。 *抵抗値は? **プルアップの場合 mega168のデータシートによるとAVR内蔵のプルアップ抵抗は20K-50Kだそうだ。 -電圧を測定する部分の抵抗値(=A)より十分小さい -スイッチがONになってGNDに接続されても電流が多すぎない という抵抗値である必要があるわけだから100Kではたぶん大きすぎ、1Kでは5Vで5mA。 1Kから20Kぐらいの間で適当に選べばよさそうかな。 **プルダウンの場合 -スイッチがONになってGNDに接続されても電流が多すぎない -十分しっかりGNDに引っ張れる値 と考えると、何オーム? **内蔵プルアップでのスケッチ int ledPin = 13; int inputPin = 2; void setup() { pinMode(ledPin, OUTPUT); pinMode(inputPin, INPUT); digitalWrite(inputPin, HIGH); // pull-up } void loop(){ int in = digitalRead(inputPin); if(in==HIGH){ digitalWrite(ledPin, LOW); //LED OFF } else{ digitalWrite(ledPin, HIGH); //LED ON } } *チャッタリング防止 チャッタリング防止のライブラリがある。 http://www.arduino.cc/playground/Code/Debounce zipをダウンロードしてarduinoのインストール先のhardware/libraries/Debounceに展開する。 #include <Debounce.h> // http://www.arduino.cc/playground/Code/Debounce int SW_YELLOW = 3; int SW_GREEN = 2; Debounce sw_yellow = Debounce(20, SW_YELLOW); Debounce sw_green = Debounce(20, SW_GREEN); void setup() { Serial.begin(9600); pinMode(SW_YELLOW, INPUT); pinMode(SW_GREEN, INPUT); digitalWrite(SW_YELLOW, HIGH); // pull-up digitalWrite(SW_GREEN, HIGH); // pull-up } void loop(){ if(sw_yellow.update() && sw_yellow.read()==LOW) { yellow_count++; Serial.print("yellow_count="); Serial.println(yellow_count); } if(sw_green.update() && sw_green.read()==LOW) { // digitalRead(SW_GREEN)==LOW green_count++; Serial.print("green_count="); Serial.println(green_count); } }
*プルアップの回路 http://www.arduino.cc/en/Tutorial/Button #image(http://www2.atpaint.jp/arduino/src/OB1236994208387.png) スイッチがOFFの時はAの電圧がHIGHになる。 スイッチがONの時はAの電圧がLOWになる。 *プルダウンの回路 #image(http://www2.atpaint.jp/arduino/src/OB1236994483372.png) スイッチがOFFの時はAの電圧がLOWになる。 スイッチがONの時はAの電圧がHIGHになる。 *消費電力 通常状態でスイッチがOFFの場合はプルダウンの回路の方が消費電力が少ない。 通常状態でスイッチがONの場合はプルアップの回路の方が消費電力が少ない。 まあ気にすることはないと思うけど。 *AVR内蔵のプルアップ抵抗を使える? http://nekosan0.bake-neko.net/structure_digital_port.html によると、 digitalWrite(pin, HIGH); でプルアップされるようです。 #image(http://www2.atpaint.jp/arduino/src/OB1236996142792.png) 抵抗1つ省略できるので便利。 *抵抗値は? **プルアップの場合 mega168のデータシートによるとAVR内蔵のプルアップ抵抗は20K-50Kだそうだ。 -電圧を測定する部分の抵抗値(=A)より十分小さい -スイッチがONになってGNDに接続されても電流が多すぎない という抵抗値である必要があるわけだから100Kではたぶん大きすぎ、1Kでは5Vで5mA。 1Kから20Kぐらいの間で適当に選べばよさそうかな。 **プルダウンの場合 -スイッチがONになってGNDに接続されても電流が多すぎない -十分しっかりGNDに引っ張れる値 と考えると、何オーム? **内蔵プルアップでのスケッチ int ledPin = 13; int inputPin = 2; void setup() { pinMode(ledPin, OUTPUT); pinMode(inputPin, INPUT); digitalWrite(inputPin, HIGH); // pull-up } void loop(){ int in = digitalRead(inputPin); if(in==HIGH){ digitalWrite(ledPin, LOW); //LED OFF } else{ digitalWrite(ledPin, HIGH); //LED ON } } *チャタリング防止 チャタリング防止のライブラリがある。 http://www.arduino.cc/playground/Code/Debounce zipをダウンロードしてarduinoのインストール先のhardware/libraries/Debounceに展開する。 #include <Debounce.h> // http://www.arduino.cc/playground/Code/Debounce int SW_YELLOW = 3; int SW_GREEN = 2; Debounce sw_yellow = Debounce(20, SW_YELLOW); Debounce sw_green = Debounce(20, SW_GREEN); void setup() { Serial.begin(9600); pinMode(SW_YELLOW, INPUT); pinMode(SW_GREEN, INPUT); digitalWrite(SW_YELLOW, HIGH); // pull-up digitalWrite(SW_GREEN, HIGH); // pull-up } void loop(){ if(sw_yellow.update() && sw_yellow.read()==LOW) { yellow_count++; Serial.print("yellow_count="); Serial.println(yellow_count); } if(sw_green.update() && sw_green.read()==LOW) { // digitalRead(SW_GREEN)==LOW green_count++; Serial.print("green_count="); Serial.println(green_count); } }

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。