Frästisch mit elektronischer Höhenverstellung mittels Schrittmotoren.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ExEzButton.cpp 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * Implementation of ExEzButton.h
  3. *
  4. * Erstellt: 05.01.2021
  5. * Autor: Flo Smilari
  6. */
  7. #include "ExEzButton.h"
  8. ExEzButton::ExEzButton(int pin) :
  9. ExEzButton(pin, false) {
  10. }
  11. ExEzButton::ExEzButton(int pin, bool _inverted) :
  12. ExEzButton(pin, _inverted, 2000) {
  13. }
  14. ExEzButton::ExEzButton(int pin, bool _inverted, int _longpressTime) :
  15. ezButton(pin) {
  16. inverted = _inverted;
  17. longpressTime = _longpressTime;
  18. pressedTime = 0;
  19. releasedTime = 0;
  20. }
  21. void ExEzButton::loop(void) {
  22. int lastSteadyStateBefore = getState();
  23. ezButton::loop();
  24. int lastSteadyStateAfter = ezButton::getState();
  25. if (lastSteadyStateBefore != lastSteadyStateAfter) {
  26. if (!inverted) {
  27. if (lastSteadyStateBefore == LOW && lastSteadyStateAfter == HIGH) {
  28. pressedTime = millis();
  29. releasedTime = 0;
  30. } else if (lastSteadyStateBefore == HIGH && lastSteadyStateAfter == LOW) {
  31. releasedTime = millis();
  32. }
  33. } else {
  34. if (lastSteadyStateBefore == HIGH && lastSteadyStateAfter == LOW) {
  35. pressedTime = millis();
  36. releasedTime = 0;
  37. } else if (lastSteadyStateBefore == LOW && lastSteadyStateAfter == HIGH) {
  38. releasedTime = millis();
  39. }
  40. }
  41. }
  42. }
  43. bool ExEzButton::isPressed() {
  44. bool pressed;
  45. if (!inverted) {
  46. pressed = ezButton::isPressed();
  47. } else {
  48. pressed = (ezButton::getPreviousState() == LOW && ezButton::getState() == HIGH);
  49. }
  50. return (pressed && pressedTime > 0 && releasedTime > 0 && (releasedTime - pressedTime) < longpressTime);
  51. }
  52. bool ExEzButton::isLongPressed() {
  53. if (releasedTime != 0) {
  54. unsigned long long pressDuration = releasedTime - pressedTime;
  55. bool longPressed = (pressDuration > longpressTime);
  56. if (longPressed) {
  57. pressedTime = 0;
  58. releasedTime = 0;
  59. }
  60. return longPressed;
  61. }
  62. return false;
  63. }
  64. bool ExEzButton::isPressing() {
  65. return ezButton::getState() == HIGH;
  66. }