| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- /*
- * RouterElevator.cpp
- *
- * Created on: 12.02.2022
- * Author: FSmilari
- */
-
- #include "RouterElevator.h"
-
- RouterElevator::RouterElevator(ESP_FlexyStepper &_Stepper, Display &_display, RouterSetup &_Router_Setup,
- WLS &_WlsDetect, WLS &_Wls, int _LimitSwitch, int _DOWNWARD_DIR)
- : Stepper(_Stepper), display(_display), Router_Setup(_Router_Setup), WlsDetect(_WlsDetect), Wls(_Wls), mode(FAST) {
- LimitSwitch = _LimitSwitch;
- DOWNWARD_DIR = _DOWNWARD_DIR;
- UPWARD_DIR = -DOWNWARD_DIR;
- targetDistance = 0.0;
- maxDiveDistance = 0.0;
- doDiveInitialization = true;
- nullingDone = false;
- }
-
- void RouterElevator::setZeroPosition() {
- Stepper.setCurrentPositionAsHomeAndStop();
- Stepper.setCurrentPositionInMillimeters(0);
- Stepper.setTargetPositionRelativeInMillimeters(0);
- targetDistance = 0.0;
- nullingDone = true;
- setMode(FAST);
- display.setDistanceValue(targetDistance);
- }
-
- void RouterElevator::moveRelativeInMillimeters(float distanceInMillimeters) {
- Stepper.setTargetPositionRelativeInMillimeters(distanceInMillimeters);
- }
-
- void RouterElevator::moveToLowerLimitSwitch(void) {
- Stepper.setTargetPositionInMillimeters(300 * DOWNWARD_DIR);
- }
-
- void RouterElevator::moveToUpperLimitSwitch(void) {
- Stepper.setTargetPositionInMillimeters(300 * UPWARD_DIR);
- }
-
- void RouterElevator::clearLimitSwitch(void) {
- Stepper.clearLimitSwitchActive();
- }
-
- void RouterElevator::tryReleaseLimitSwitch(void) {
- Stepper.moveRelativeInMillimeters(0.05 * previousDirection * -1); // move in opposite direction (away from switch)
- }
-
- bool RouterElevator::isLimitSwitchTriggerd() {
- return limitSwitchState == LOW;
- }
-
- bool RouterElevator::isTargetPositionReached() {
- return Stepper.getDistanceToTargetSigned() == 0;
- }
-
- void RouterElevator::moveToTarget(void) {
- Stepper.setTargetPositionInMillimeters(targetDistance);
- }
-
- void RouterElevator::moveToParkPosition(void) {
- float parkOffset = -5; //Router_Setup.getParkPostionOffset() * -1;
- targetDistance = parkOffset;
- Stepper.setTargetPositionInMillimeters(targetDistance);
- display.setDistanceValue(targetDistance);
- }
-
- bool RouterElevator::isWLSTriggerd() {
- if (WlsDetect.isConnected()) {
- if (Wls.isPlugged()) {
- Serial.println("The Tool is away from WLS");
- Stepper.clearLimitSwitchActive();
- return false;
- } else if (Wls.isUnplugged()) {
- Serial.println("The Tool touched the WLS");
- Stepper.setLimitSwitchActive(Stepper.LIMIT_SWITCH_COMBINED_BEGIN_AND_END);
- return true;
- }
- }
- return false;
- }
-
- void RouterElevator::limitSwitchHandler() {
- limitSwitchState = digitalRead(LimitSwitch);
- if (limitSwitchState == LOW) {
- // 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
- Stepper.setLimitSwitchActive(Stepper.LIMIT_SWITCH_COMBINED_BEGIN_AND_END);
- } else {
- // clear the limit switch flag to allow movement in both directions again
- clearLimitSwitch();
- }
- }
-
- void RouterElevator::checkDirection() {
- previousDirection = Stepper.getDirectionOfMotion();
- }
-
- ValueMode RouterElevator::getMode() const {
- return mode;
- }
-
- void RouterElevator::setMode(ValueMode mode) {
- this->mode = mode;
- display.setMode(this->mode);
- }
-
- void RouterElevator::toggleMode() {
- setMode((mode.getValueMode() == SLOW) ? ValueMode(FAST) : ValueMode(SLOW));
- }
-
- void RouterElevator::onRotaryControlerTurn(RotaryEncoder::Direction turn) {
- if (turn != RotaryEncoder::Direction::NOROTATION) {
- int sign = (turn == RotaryEncoder::Direction::CLOCKWISE) ? 1 : -1;
- float increment = mode.isSlow() ? Router_Setup.getEncoderSpeedSlow() : Router_Setup.getEncoderSpeedFast();
- if (nullingDone) {
- targetDistance = max(0.0f, targetDistance + increment / 100 * sign);
- } else {
- targetDistance = targetDistance + increment / 100 * sign;
- }
- display.setDistanceValue(targetDistance);
- display.setDistanceUnit("mm");
- }
- }
-
- bool RouterElevator::isDoDiveInitialization() const {
- return doDiveInitialization;
- }
-
- void RouterElevator::setDoDiveInitialization(bool doDiveInitialization) {
- this->doDiveInitialization = doDiveInitialization;
- }
-
- float RouterElevator::getMaxDiveDistance() const {
- return maxDiveDistance;
- }
-
- void RouterElevator::setMaxDiveDistance() {
- if (isDoDiveInitialization()) {
- Serial.println("setMaxDiveDistance");
- maxDiveDistance = targetDistance;
- targetDistance = 0.0;
- display.setDistanceValue(targetDistance);
- display.setDistanceUnit("mm");
- display.setMaxDiveDistance(maxDiveDistance);
- display.setLevelHeightDiving(Router_Setup.getLevelHeightDiving());
- display.setRefreshScreen();
- setDoDiveInitialization(false);
- }
- }
-
- bool RouterElevator::incrementDiveDistance() {
- float increment = Router_Setup.getLevelHeightDiving();
- targetDistance = min(maxDiveDistance, targetDistance + increment);
- Serial.println("targetDistance: " + String(targetDistance, 2));
- display.setMaxDiveDistance(maxDiveDistance);
- display.setDistanceValue(targetDistance);
- display.setLevelHeightDiving(Router_Setup.getLevelHeightDiving());
- return targetDistance == maxDiveDistance;
- }
-
- bool RouterElevator::maxDiveDistanceReached() {
- return targetDistance == maxDiveDistance;
- }
-
-
- void RouterElevator::resetNullingDone() {
- this->nullingDone = false;
- }
|