Arduino Nano R4の活用 ⑮ I2C ロータリー・エンコーダ
前回、Arduino Nano R4にLEDが並んだModulino Pixelsをつなぎました。このセンサをつないだまま、Arduino Modulinoの一つであるModulino Knobボードをつなぎます。このボードにはロータリー・エンコーダが搭載されていて、利用するのインターフェースはI2Cバスです。
●環境
- Arduino IDE;2.3.7
- Windows11;25H2
- Arduino Nano R4 1.5.1 PCはマザーボードのUSBポートから直接つなぐ。
●Modulino Knobの主なスペック
- デバイスの名称 Quadrature Rotary Encoder
- コントローラ STM32C011F4
- 動作電圧 2.0~3.6V
- 消費電流 3.4mA
- レンジ 360°
- 内部発振器の確度 ±1%
- 分解能 12ビット ADC
- インターフェース I2C(0x76)、USART, SPI, I2S
●直交ロータリ・エンコーダModulino Knobのボード
利用したModulino KnobのボードはArduinoの製品で、HS3003、VL53L4CD、LSM6DSOXTRと同じくスイッチサイエンスから入手しました。
Arduino Modulinシリーズの中の一つです。I2CバスなどをサポートするためにArm Cortex-M0+の32ビット・マイコンが搭載されています。
●接続
Arduino Nano R4のQWIICコネクタにつなぎます。
●ライブラリの導入
ライブラリでModulinoを検索して、見つけてきたArduino_Modulinoをインストールをします。
前回と同じです。
-Arduino Nano R4の活用 ⑭ I2C LEDバー
●サンプルの実行
スケッチ例 - Arduino_Modulino - Modulino_Knob - Knob_Basicを選択します。
実行すると、現在の位置や方向を表示します。
●スケッチ
ノブを押すと内部のスイッチがONになります。その時、LEDの赤色を点灯させます。
set()はsetup()関数内では有効ですが、loop()関数では無視されるようです。
#include <Arduino_Modulino.h>
// Create a ModulinoPixels object for the LED array
ModulinoPixels leds;
// Create a ModulinoKnob object
ModulinoKnob knob;
// Define a custom color for turning off LEDs
ModulinoColor OFF(0, 0, 0);
int brightness = 5;
bool isRight= true;
void setup() {
// Initialize Modulino I2C communication
Modulino.begin();
// Detect and connect to pixels module
leds.begin();
// Detect and connect to knob module
knob.begin();
// Turn off all LEDs one by one
for (int i = 0; i < 8; i++) {
setPixel(i, OFF);
delay(25);
}
knob.set(-15);
}
void loop() {
// Get the current position value of the knob
int position = knob.get();
// Check if the knob has been pressed (clicked)
bool click = knob.isPressed();
// Get the rotation direction
isRight = knob.getDirection();
Serial.print("Current position is: ");
Serial.println(position);
if (click){
setPixel(0,RED);
delay(15);
setPixel(0, OFF);
}
delay(100);
}
void setPixel(int pixel, ModulinoColor color) {
leds.set(pixel, color, brightness);
leds.show();
}