Преглед на файлове

bugfix limit_timer not working in running mode

moved to basic timer with millis(), always updating
eLandon преди 4 години
родител
ревизия
196c348fa4
променени са 2 файла, в които са добавени 9 реда и са изтрити 4 реда
  1. 7 3
      Atm_AccelStepper.cpp
  2. 2 1
      Atm_AccelStepper.h

+ 7 - 3
Atm_AccelStepper.cpp

@@ -52,7 +52,8 @@ int Atm_AccelStepper::event( int id ) {
     case EVT_EMERGENCY_STOP:
       return 0;
     case EVT_ON_LIMIT_LOW:
-      if (limits_timer.expired(this)){
+      // if (limits_timer.expired(this)){
+      if (millis()-limit_update_offset > LIMIT_UPDATE_RATE){
         switch(_limitLow_Mode) {
           case 0:
             break;
@@ -87,7 +88,8 @@ int Atm_AccelStepper::event( int id ) {
 
 
     case EVT_ON_LIMIT_HIGH:
-      if (limits_timer.expired(this)){
+      // if (limits_timer.expired(this)){
+      if (millis()-limit_update_offset > LIMIT_UPDATE_RATE){
         switch(_limitHigh_Mode) {
           case 0:
             break;
@@ -112,7 +114,8 @@ int Atm_AccelStepper::event( int id ) {
           changed = limitHigh_State != limitHigh_State_prev ? 1 : 0;
           limitHigh_State_prev = limitHigh_State;
           if (changed){push( connectors, ON_ONLIMITHIGH, 0, limitHigh_State, 0 );}
-          limits_timer.setFromNow(this, LIMIT_UPDATE_RATE);
+          // limits_timer.setFromNow(this, LIMIT_UPDATE_RATE);
+          limit_update_offset = millis();
           return changed ;
        }
 
@@ -175,6 +178,7 @@ void Atm_AccelStepper::action( int id ) {
       return;
 
     case LP_RUNNING:
+      //Serial.println(millis()-LIMIT_UPDATE_OFFSET);
       // if on limits and limits are hard, stop moving in one direction
       if(limitLow_State && _limitLow_Hard && (_currentSpeed<0.)) {
           trigger(EVT_EMERGENCY_STOP);

+ 2 - 1
Atm_AccelStepper.h

@@ -149,7 +149,8 @@ class Atm_AccelStepper: public Machine {
   bool _limitHigh_Hard = 0 ;
   // int _isHoming = 0 ;
   atm_timer_millis limits_timer ;
-  int LIMIT_UPDATE_RATE = 5 ;
+  int LIMIT_UPDATE_RATE = 25 ;
+   unsigned long limit_update_offset;
   // void updateLimitSwitch();
 
 };