#include #define Faces_Encoder_I2C_ADDR 0X5E int encoder_increment;//positive: clockwise nagtive: anti-clockwise int encoder_value=0; uint8_t direction;//0: clockwise 1: anti-clockwise uint8_t last_button, cur_button; void GetValue(void){ int temp_encoder_increment; Wire.requestFrom(Faces_Encoder_I2C_ADDR, 3); if(Wire.available()){ temp_encoder_increment = Wire.read(); cur_button = Wire.read(); } if(temp_encoder_increment > 127){//anti-clockwise direction = 1; encoder_increment = 256 - temp_encoder_increment; } else{ direction = 0; encoder_increment = temp_encoder_increment; } } void Led(int i, int r, int g, int b){ Wire.beginTransmission(Faces_Encoder_I2C_ADDR); Wire.write(i); Wire.write(r); Wire.write(g); Wire.write(b); Wire.endTransmission(); } void setup() { M5.begin(); M5.Power.begin(); Wire.begin(); Serial.begin(115200); dacWrite(25, 0); M5.Lcd.setTextFont(2); M5.Lcd.println("FACES ENCODER I2C Read Example"); Serial.println("FACES ENCODER I2C Read Example"); for(int i=0;i<12;i++) { Led(i, 0, 0xff, 0); delay(10); } for(int i=0;i<12;i++) { Led(i, 0, 0, 0); delay(10); } } void loop() { int i; M5.Lcd.setCursor(0,40); M5.Lcd.print("Encoder Value: "); M5.Lcd.setCursor(0,60); M5.Lcd.print(" Key State : "); M5.Lcd.setCursor(0,80); M5.Lcd.print(" Key Value : "); GetValue(); if(last_button != cur_button){ M5.Lcd.fillRect(100,60,100,25,BLACK); M5.Lcd.fillRect(100,80,100,25,BLACK); last_button = cur_button; } if(cur_button){ M5.Lcd.setCursor(100,60); M5.Lcd.print("released"); M5.Lcd.setCursor(100,80); M5.Lcd.print("1"); for(i=0;i<12;i++){ Led(i, 0, 0, 0); } } else{ M5.Lcd.setCursor(100,60); M5.Lcd.print("pressed"); M5.Lcd.setCursor(100,80); M5.Lcd.print("0"); for(i=0;i<12;i++){ Led(i, 255, 255, 255); } } M5.Lcd.fillRect(100,40,50,25,BLACK); if(direction){ encoder_value -= encoder_increment; M5.Lcd.setCursor(100,40); M5.Lcd.print("-"); M5.Lcd.setCursor(100,40); M5.Lcd.print(encoder_value); Serial.print("encoder_value: "); Serial.print("-"); Serial.print(encoder_value); } else{ encoder_value += encoder_increment; M5.Lcd.setCursor(100,40); M5.Lcd.print(encoder_value); Serial.print("encoder_value: "); Serial.print(encoder_value); } Serial.print(" button_state: "); Serial.println(cur_button); }