doubleCallback.ino 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // опрос одновременного нажатия двух кнопок как нажатия третьей кнопки
  2. // с корректным вызовом обработчиков
  3. #include <Arduino.h>
  4. #include <EncButton.h>
  5. Button b0(4);
  6. Button b1(5);
  7. MultiButton b12; // виртуальная
  8. void decode(uint16_t action) {
  9. switch (action) {
  10. case EB_PRESS:
  11. Serial.println("press");
  12. break;
  13. case EB_STEP:
  14. Serial.println("step");
  15. break;
  16. case EB_RELEASE:
  17. Serial.println("release");
  18. break;
  19. case EB_CLICK:
  20. Serial.println("click");
  21. break;
  22. case EB_CLICKS:
  23. Serial.println("clicks");
  24. break;
  25. case EB_REL_HOLD:
  26. Serial.println("release hold");
  27. break;
  28. case EB_REL_HOLD_C:
  29. Serial.println("release hold clicks ");
  30. break;
  31. case EB_REL_STEP:
  32. Serial.println("release step");
  33. break;
  34. case EB_REL_STEP_C:
  35. Serial.println("release step clicks ");
  36. break;
  37. case EB_TIMEOUT:
  38. Serial.println("timeout");
  39. break;
  40. }
  41. }
  42. void setup() {
  43. Serial.begin(115200);
  44. // обработчики
  45. b0.attach([]() {
  46. uint16_t action = static_cast<VirtButton*>(EB_self)->action();
  47. if (action != EB_HOLD) Serial.print("b0: ");
  48. decode(action);
  49. });
  50. b1.attach([]() {
  51. uint16_t action = static_cast<VirtButton*>(EB_self)->action();
  52. if (action != EB_HOLD) Serial.print("b1: ");
  53. decode(action);
  54. });
  55. b12.attach([]() {
  56. uint16_t action = static_cast<VirtButton*>(EB_self)->action();
  57. if (action != EB_HOLD) Serial.print("b0+b1: ");
  58. decode(action);
  59. });
  60. }
  61. void loop() {
  62. // обработка одновременного нажатия двух кнопок
  63. // обрабатываются все три кнопки
  64. b12.tick(b0, b1);
  65. // или вручную
  66. if (b0.click()) Serial.println("b0 click");
  67. if (b1.click()) Serial.println("b1 click");
  68. if (b12.click()) Serial.println("b0+b1 click");
  69. }