ENCODER.ino 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #include <M5Stack.h>
  2. #define Faces_Encoder_I2C_ADDR 0X5E
  3. int encoder_increment; // positive: clockwise nagtive: anti-clockwise
  4. int encoder_value = 0;
  5. uint8_t direction; // 0: clockwise 1: anti-clockwise
  6. uint8_t last_button, cur_button;
  7. void GetValue(void) {
  8. int temp_encoder_increment;
  9. Wire.requestFrom(Faces_Encoder_I2C_ADDR, 3);
  10. if (Wire.available()) {
  11. temp_encoder_increment = Wire.read();
  12. cur_button = Wire.read();
  13. }
  14. if (temp_encoder_increment > 127) { // anti-clockwise
  15. direction = 1;
  16. encoder_increment = 256 - temp_encoder_increment;
  17. } else {
  18. direction = 0;
  19. encoder_increment = temp_encoder_increment;
  20. }
  21. }
  22. void Led(int i, int r, int g, int b) {
  23. Wire.beginTransmission(Faces_Encoder_I2C_ADDR);
  24. Wire.write(i);
  25. Wire.write(r);
  26. Wire.write(g);
  27. Wire.write(b);
  28. Wire.endTransmission();
  29. }
  30. void setup() {
  31. M5.begin();
  32. M5.Power.begin();
  33. Wire.begin();
  34. dacWrite(25, 0);
  35. M5.Lcd.setTextFont(2);
  36. M5.Lcd.println("FACES ENCODER I2C Read Example");
  37. Serial.println("FACES ENCODER I2C Read Example");
  38. for (int i = 0; i < 12; i++) {
  39. Led(i, 0, 0xff, 0);
  40. delay(10);
  41. }
  42. for (int i = 0; i < 12; i++) {
  43. Led(i, 0, 0, 0);
  44. delay(10);
  45. }
  46. }
  47. void loop() {
  48. int i;
  49. M5.Lcd.setCursor(0, 40);
  50. M5.Lcd.print("Encoder Value: ");
  51. M5.Lcd.setCursor(0, 60);
  52. M5.Lcd.print(" Key State : ");
  53. M5.Lcd.setCursor(0, 80);
  54. M5.Lcd.print(" Key Value : ");
  55. GetValue();
  56. if (last_button != cur_button) {
  57. M5.Lcd.fillRect(100, 60, 100, 25, BLACK);
  58. M5.Lcd.fillRect(100, 80, 100, 25, BLACK);
  59. last_button = cur_button;
  60. }
  61. if (cur_button) {
  62. M5.Lcd.setCursor(100, 60);
  63. M5.Lcd.print("released");
  64. M5.Lcd.setCursor(100, 80);
  65. M5.Lcd.print("1");
  66. for (i = 0; i < 12; i++) {
  67. Led(i, 0, 0, 0);
  68. }
  69. } else {
  70. M5.Lcd.setCursor(100, 60);
  71. M5.Lcd.print("pressed");
  72. M5.Lcd.setCursor(100, 80);
  73. M5.Lcd.print("0");
  74. for (i = 0; i < 12; i++) {
  75. Led(i, 255, 255, 255);
  76. }
  77. }
  78. M5.Lcd.fillRect(100, 40, 50, 25, BLACK);
  79. if (direction) {
  80. encoder_value -= encoder_increment;
  81. M5.Lcd.setCursor(100, 40);
  82. M5.Lcd.print("-");
  83. M5.Lcd.setCursor(100, 40);
  84. M5.Lcd.print(encoder_value);
  85. Serial.print("encoder_value: ");
  86. Serial.print("-");
  87. Serial.print(encoder_value);
  88. } else {
  89. encoder_value += encoder_increment;
  90. M5.Lcd.setCursor(100, 40);
  91. M5.Lcd.print(encoder_value);
  92. Serial.print("encoder_value: ");
  93. Serial.print(encoder_value);
  94. }
  95. Serial.print(" button_state: ");
  96. Serial.println(cur_button);
  97. }