123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #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();
- 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);
- }
|