0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ロータリーエンコーダー

Posted at

ロータリーエンコーダーを試す

スイッチサイエンスさんで購入したSparkfunのイルミネーションロータリーエンコーダーを試した。これに関しては、英語を含めて記事をほとんど見かけないこともあり、ここに記録することとした。

データシートなど

ロータリーエンコーダーのデータシートはこちらにあるが、イルミネーション部についてはこちら寸法図を参照する。

配線など

上記資料から抜粋。

ロータリーエンコーダーの回路図は下記のとおり。
回路図1.png

ここでは、10KΩのPullup抵抗のみ用い、ピンAやBにつながる10KΩ抵抗や0.01μFのコンデンサは使用していない。ただし、コンデンサを使用した方が、回したときの動きとソフトウェアで取得する値とが滑らか(?)、、などの記載がどこかにあった覚えあり。

イルミネーションの回路図は下記のとおり。
回路図2.png

ピン1がGND、ピン2および3がLED、ピン4がボタンである。

また、ピンの配置は下記のとおり。

配置2.png配置.png

実験

回したら可変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)の値に無理やり変換されることになる。

繰り返しになるが、上述以外の記載は、オリジナルのソースコードを参照されたし。

テスト

image.png

image.png

image.png

ロータリーエンコーダーを回すことにより、可変LEDの明るさが変化する。なお、ロータリーエンコーダーを押すとイルミネーション(色)が変わる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?