どうも、瀬古草夫です。
先日、Aliexpressでよく分からないおもちゃをいろいろ買ったので、遊んでみました。
何のモジュールか分かりませんが、ネットで調べて分かったものから備忘録に残したいと思います。
今回は、KY-040 ロータリエンコーダモジュールです。

目次
使ったもの
Arduino UNO KY-040 ロータリエンコーダモジュール ジャンパーワイヤー(オス×メス)
KY-040 ロータリエンコーダモジュールって?
ノブを回転させて、どれだけ回転したか、どの方向に回転したかが分かる。
KY-040 ロータリエンコーダモジュール 配線
| CLK | GPIO 2 |
| DT | GPIO 3 |
| SW | NC |
| + | 5V |
| GND | GND |
Arduino IDEのコード例
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
int pinA = 2; //CLK
int pinB = 3; //DT
int encoderPosCount = 0;
int pinALast;
int aVal;
void setup() {
pinMode (pinA,INPUT);
pinMode (pinB,INPUT);
pinALast = digitalRead(pinA);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("KY-040 Test");
lcd.setCursor(0,1);
lcd.print("Volume:");
lcd.setCursor(8,1);
lcd.print(encoderPosCount);
}
void loop() {
aVal = digitalRead(pinA);
if (aVal != pinALast){
// pinBは、回転方向を決定する
if (digitalRead(pinB) != aVal) {
//pinAと値が異なる場合は、時計回り
encoderPosCount ++;
if (encoderPosCount > 20) encoderPosCount = 20;
} else {
encoderPosCount --;
if (encoderPosCount < 0) encoderPosCount = 0;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("KY-040 Test");
lcd.setCursor(0,1);
lcd.print("Volume:");
lcd.setCursor(8,1);
lcd.print(encoderPosCount);
}
pinALast = aVal;
}
瀬古の勝手な評価
★★★★★
スピーカーの音量調節等、いろいろなデバイスを手動で調整するのに重宝する必須アイテムですな。

コメント