123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #include <M5Stack.h>
- #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);
- }
|