ロータリーエンコーダーを試す
スイッチサイエンスさんで購入したSparkfunのイルミネーションロータリーエンコーダーを試した。これに関しては、英語を含めて記事をほとんど見かけないこともあり、ここに記録することとした。
データシートなど
ロータリーエンコーダーのデータシートはこちらにあるが、イルミネーション部についてはこちら寸法図を参照する。
配線など
上記資料から抜粋。
ここでは、10KΩのPullup抵抗のみ用い、ピンAやBにつながる10KΩ抵抗や0.01μFのコンデンサは使用していない。ただし、コンデンサを使用した方が、回したときの動きとソフトウェアで取得する値とが滑らか(?)、、などの記載がどこかにあった覚えあり。
ピン1がGND、ピン2および3がLED、ピン4がボタンである。
また、ピンの配置は下記のとおり。
実験
回したら可変LEDの色が変化するというもの。用いた可変LEDはこちらである。
ソースコード
コードはSparkfunサイトからたどれるこちらにあるものをほぼそのまま使う。ここでは可変LEDの追加部分のみ記載する。
# define VAR_LED 9 // 可変LEDをつなげるGPIOポート番号
# define LED_INIT 127 // 可変LEDの初期値
setup() {
// 他は上述ソースコードと全く同じ
analogWrite(VAR_LED, LED_INIT); // 可変LEDの初期値をセット
}
analogWriteの第2引数はデューティ比であり、0から255までの値をとる。
loop () {
if (rotary_change)
{
Serial.print("rotary: ");
Serial.println(rotary_counter, DEC);
rotary_change = false; // Clear flag
//blink for visual feedback
setLED(OFF);
delay(10); //try not to make this too long, otherwise the Arduino will miss ticks
setLED(x);
{ // @@@
analogWrite(VAR_LED, LED_INIT+rotary_counter*5);
} // @@@
}
// 他は上述ソースコードと全く同じ
}
loop()では、//@@@で囲まれた部分のみ追加している。変数rotary_counterはint型であり、回したときに得られる値である。初期値は0であり、-32768から32767での値をとるはず。。analogWrite()のデューティ比(0から255)の値に無理やり変換されることになる。
繰り返しになるが、上述以外の記載は、オリジナルのソースコードを参照されたし。
テスト
ロータリーエンコーダーを回すことにより、可変LEDの明るさが変化する。なお、ロータリーエンコーダーを押すとイルミネーション(色)が変わる。