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.

RouterElevator.cpp 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /*
  2. * RouterElevator.cpp
  3. *
  4. * Created on: 12.02.2022
  5. * Author: FSmilari
  6. */
  7. #include "RouterElevator.h"
  8. RouterElevator::RouterElevator(ESP_FlexyStepper &_Stepper, Display &_display, RouterSetup &_Router_Setup,
  9. WLS &_WlsDetect, WLS &_Wls, int _LimitSwitch, int _DOWNWARD_DIR)
  10. : Stepper(_Stepper), display(_display), Router_Setup(_Router_Setup), WlsDetect(_WlsDetect), Wls(_Wls), mode(SLOW) {
  11. LimitSwitch = _LimitSwitch;
  12. DOWNWARD_DIR = _DOWNWARD_DIR;
  13. UPWARD_DIR = -DOWNWARD_DIR;
  14. targetDistance = 0;
  15. }
  16. void RouterElevator::setZeroPosition() {
  17. Stepper.setCurrentPositionAsHomeAndStop();
  18. Stepper.setCurrentPositionInMillimeters(0);
  19. Stepper.setTargetPositionRelativeInMillimeters(0);
  20. }
  21. void RouterElevator::moveRelativeInMillimeters(float distanceInMillimeters) {
  22. Stepper.setTargetPositionRelativeInMillimeters(distanceInMillimeters);
  23. }
  24. void RouterElevator::moveToLowerLimitSwitch(void) {
  25. Stepper.setTargetPositionInMillimeters(300 * DOWNWARD_DIR);
  26. }
  27. void RouterElevator::moveToUpperLimitSwitch(void) {
  28. Stepper.setTargetPositionInMillimeters(300 * UPWARD_DIR);
  29. }
  30. void RouterElevator::clearLimitSwitch(void) {
  31. Stepper.clearLimitSwitchActive();
  32. }
  33. void RouterElevator::tryReleaseLimitSwitch(void) {
  34. Stepper.moveRelativeInMillimeters(0.05 * previousDirection * -1); // move in opposite direction (away from switch)
  35. }
  36. bool RouterElevator::isLimitSwitchTriggerd() {
  37. return limitSwitchState == LOW;
  38. }
  39. bool RouterElevator::isTargetPositionReached() {
  40. return Stepper.getDistanceToTargetSigned() == 0;
  41. }
  42. void RouterElevator::moveToTarget(void) {
  43. Stepper.moveToPositionInMillimeters(targetDistance);
  44. }
  45. void RouterElevator::moveToParkPosition(void) {
  46. float parkOffset = -5; //Router_Setup.getParkPostionOffset() * -1;
  47. Stepper.moveToPositionInMillimeters(parkOffset);
  48. }
  49. bool RouterElevator::isWLSTriggerd() {
  50. if (WlsDetect.isConnected()) {
  51. if (Wls.isPlugged()) {
  52. Serial.println("The Tool is away from WLS");
  53. Stepper.clearLimitSwitchActive();
  54. return false;
  55. } else if (Wls.isUnplugged()) {
  56. Serial.println("The Tool touched the WLS");
  57. Stepper.setLimitSwitchActive(Stepper.LIMIT_SWITCH_COMBINED_BEGIN_AND_END);
  58. return true;
  59. }
  60. }
  61. return false;
  62. }
  63. void RouterElevator::limitSwitchHandler() {
  64. limitSwitchState = digitalRead(LimitSwitch);
  65. if (limitSwitchState == LOW) {
  66. // this will cause to stop any motion that is currently going on and block further movement in the same direction as long as the switch is active
  67. Stepper.setLimitSwitchActive(Stepper.LIMIT_SWITCH_COMBINED_BEGIN_AND_END);
  68. } else {
  69. // clear the limit switch flag to allow movement in both directions again
  70. clearLimitSwitch();
  71. }
  72. }
  73. void RouterElevator::checkDirection() {
  74. previousDirection = Stepper.getDirectionOfMotion();
  75. }
  76. ValueMode RouterElevator::getMode() const {
  77. return mode;
  78. }
  79. void RouterElevator::setMode(ValueMode mode) {
  80. this->mode = mode;
  81. Serial.println("RouterElevator::setMode: " + this->mode.toString());
  82. display.setMode(this->mode);
  83. }
  84. void RouterElevator::toggleMode() {
  85. setMode((mode.getValueMode() == SLOW) ? ValueMode(FAST) : ValueMode(SLOW));
  86. }
  87. void RouterElevator::onRotaryControlerTurn(RotaryEncoder::Direction turn) {
  88. // if (turn != RotaryEncoder::Direction::NOROTATION) {
  89. // int sign = (turn == RotaryEncoder::Direction::CLOCKWISE) ? 1 : -1;
  90. // //TODO: Update the targetDistance and show it on display
  91. // }
  92. }