Files

3.7 KiB

ENCODER {docsify-ignore-all}


📝概要      :octocat:サンプルコード      🔌回路図      🛒購入リンク

概要

ENCODERはFACES向けのロータリエンコーダモジュールです. 利用するにはFACESベースとM5Coreが必要になります。ENCODERは回転角度を出力します。ダイヤルノブのクリック入力を取得したり、フルカラーLEDを制御することができます。

ENCODERはM5CoreからI2C通信で制御することができます。I2Cアドレスは0x5Eです。

特徴

  • 12 RGB LED
  • I2C 通信
  • シンプルAPI

機能

LEDを一つ制御する

/*
    Parameter:
        led_index: 0 ~ 11
        r, g, b: 0 ~ 254
*/
void Led(int led_index, int r, int g, int b){
    // I2C データ送信
    Wire.beginTransmission(Faces_Encoder_I2C_ADDR);
    Wire.write(led_index);
    Wire.write(r);
    Wire.write(g);
    Wire.write(b);
    Wire.endTransmission();
}

エンコーダの増分読取り

void get_encoder_increment(void){
    int temp_encoder_increment;

    // I2C データ読み込み
    Wire.requestFrom(Faces_Encoder_I2C_ADDR, 3);
    if(Wire.available()){
       temp_encoder_increment = Wire.read(); // 増分を取得
       button_state = Wire.read(); // ボタンの値を取得
    }
    if(temp_encoder_increment > 127){ // 反時計まわり
        direction = 1; // 回転方向のフラグ
        encoder_increment = 256 - temp_encoder_increment;
    }
    else{// clockwise
        direction = 0;
        encoder_increment = temp_encoder_increment;
    }
}

パッケージ内容

  • 1x ENCODER

関連リンク

サンプルコード

Arduino IDE

faces_encoder.inoの完全なコードはこちら.

/*
* faces_encoder.ino
*/
#include <M5Stack.h>

#define Faces_Encoder_I2C_ADDR     0X5E

// 宣言
int encoder_increment; // +: 時計まわり -: 反時計まわり
uint16_t encoder_value=0;
int button_state;
uint8_t direction; // 0: 時計まわり 1: 反時計まわり
int temp_encoder_increment;

// 初期化
M5.begin();
Wire.begin();

// ENCONDERからデータを取得
Wire.requestFrom(Faces_Encoder_I2C_ADDR, 3);
if(Wire.available()){
    temp_encoder_increment = Wire.read(); // 1バイト目: 増分データ
    button_state = Wire.read(); // 2バイト目: ボタンの値
}

// I2C データ送信、4バイト
Wire.beginTransmission(Faces_Encoder_I2C_ADDR);
Wire.write(led_index);
Wire.write(r);
Wire.write(g);
Wire.write(b);
Wire.endTransmission();