# Module ENCODER {docsify-ignore-all} *** :memo:**[描述](#描述)**      :octocat:**[例程](#例程)**      🛒**[购买链接](https://m5stack.com/collections/m5-module/products/encoder-module)**   **[EasyLoader](#EasyLoader)** ## 描述 **ENCODER** 是一款兼容 FACE 套件的旋钮控制面板.专为旋转编码控制而设计,其内部集成Mega328微处理器,在旋钮的周围嵌入了由12个LED组成的LED灯环. M5Core与ENCODER之间的串行通信协议是I2C(地址:0x5E) ## 产品特性 - 12 RGB Led - I2C 通讯 - 简洁的API接口 - 内置Mega328 - 编码器检测 - 产品尺寸:58.2mm x 54.2mm x 10mm - 产品重量:17g ## 功能函数 **控制RGB灯圈** ```arduino /* Parameter: led_index: 0 ~ 11 r, g, b: 0 ~ 254 */ void Led(int led_index, int r, int g, int b){ // IIC send data Wire.beginTransmission(Faces_Encoder_I2C_ADDR); Wire.write(led_index); Wire.write(r); Wire.write(g); Wire.write(b); Wire.endTransmission(); } ``` **读取编码器增量** ```arduino void get_encoder_increment(void){ int temp_encoder_increment; // IIC read data Wire.requestFrom(Faces_Encoder_I2C_ADDR, 3); if(Wire.available()){ temp_encoder_increment = Wire.read();// get increment button_state = Wire.read();// get button value } if(temp_encoder_increment > 127){//anti-clockwise direction = 1;// flag for encoder direction encoder_increment = 256 - temp_encoder_increment; } else{// clockwise direction = 0; encoder_increment = temp_encoder_increment; } } ``` ## 包含 - 1x M5Stack ENCODER 模块 - 1x 编码器转盘 ## 相关链接 - **[官方频道视频](https://i.youku.com/i/UNjE1ODA2MzE0OA==?spm=a2hzp.8253869.0.0)** - **[官方论坛](http://forum.m5stack.com/)** - **[ENCODER 固件](https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Module/ENCODER/firmware_328p/FacesEncoder328)** ## EasyLoader >1.EasyLoader是一个简洁快速的程序烧录器,每一个产品页面里的EasyLoader都提供了一个与产品相关的案例程序. >2.下载软件后,双击运行应用程序,将M5设备通过数据线连接至电脑,选择端口参数,点击 **"Burn"** 即可开始烧录 !>3.EasyLoader烧录前需要安装有CP210X(USB驱动程序),[点击此处查看驱动安装教程](zh_CN/related_documents/M5Burner#安装串口驱动) ## 例程 ### Arduino IDE *以下代码仅为片段,如需获取完整代码, [请点击此处.](https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Module/ENCODER/Arduino/faces_encoder).* ```arduino /* * faces_encoder.ino */ #include #define Faces_Encoder_I2C_ADDR 0X5E // declaration int encoder_increment;//positive: clockwise nagtive: anti-clockwise uint16_t encoder_value=0; int button_state; uint8_t direction;//0: clockwise 1: anti-clockwise int temp_encoder_increment; // initialization M5.begin(); Wire.begin(); // get data from ENCONDER Wire.requestFrom(Faces_Encoder_I2C_ADDR, 3); if(Wire.available()){ temp_encoder_increment = Wire.read();// the first byte: increment button_state = Wire.read();// the second byte: button value } // IIC send data, 4bytes Wire.beginTransmission(Faces_Encoder_I2C_ADDR); Wire.write(led_index); Wire.write(r); Wire.write(g); Wire.write(b); Wire.endTransmission(); ```