|
@@ -7,14 +7,14 @@
|
|
|
Atm_Teenstep& Atm_Teenstep::begin(Stepper & motorRef, StepControl & stepControlRef) {
|
|
|
// clang-format off
|
|
|
const static state_t state_table[] PROGMEM = {
|
|
|
- /* ON_ENTER ON_LOOP ON_EXIT EVT_MOVE_TIMEOUT EVT_LIMIT_HIGH EVT_LIMIT_LOW EVT_EMERGENCYSTOP EVT_STOP EVT_ONTARGET EVT_MOVE EVT_DISABLE EVT_ENABLE ELSE */
|
|
|
- /* DISABLED */ ENT_DISABLED, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, ENABLED, -1,
|
|
|
- /* ENABLED */ ENT_ENABLED, -1, -1, -1, -1, -1, -1, -1, -1, RUNNING, DISABLED, -1, -1,
|
|
|
- /* RUNNING */ ENT_RUNNING, LP_RUNNING, -1, -1, EMERGENCY_STOP, EMERGENCY_STOP, EMERGENCY_STOP, STOPPING, ENABLED, RUNNING, -1, -1, -1,
|
|
|
- /* STOPPING */ ENT_STOPPING, -1, -1, -1, EMERGENCY_STOP, EMERGENCY_STOP, EMERGENCY_STOP, -1, -1, RUNNING, -1, -1, -1,
|
|
|
- /* EMERGENCY_STOP */ ENT_EMERGENCY_STOP, -1, -1, -1, -1, -1, -1, -1, -1, RUNNING, -1, ENABLED, -1,
|
|
|
- /* HOMING_HIGH */ ENT_HOMING_HIGH, -1, EXT_HOMING_HIGH, -1, ENABLED, EMERGENCY_STOP, EMERGENCY_STOP, STOPPING, -1, -1, -1, -1, -1,
|
|
|
- /* HOMING_LOW */ ENT_HOMING_LOW, -1, EXT_HOMING_LOW, -1, EMERGENCY_STOP, ENABLED, EMERGENCY_STOP, STOPPING, -1, -1, -1, -1, -1,
|
|
|
+ /* ON_ENTER ON_LOOP ON_EXIT EVT_HOMING_LOW EVT_HOMING_HIGH EVT_MOVE_TIMEOUT EVT_LIMIT_HIGH EVT_LIMIT_LOW EVT_EMERGENCYSTOP EVT_STOP EVT_ONTARGET EVT_MOVE EVT_DISABLE EVT_ENABLE ELSE */
|
|
|
+ /* DISABLED */ ENT_DISABLED, -1, -1, HOMING_LOW, HOMING_HIGH, -1, -1, -1, -1, -1, -1, -1, -1, ENABLED, -1,
|
|
|
+ /* ENABLED */ ENT_ENABLED, -1, -1, HOMING_LOW, HOMING_HIGH, -1, -1, -1, -1, -1, -1, RUNNING, DISABLED, -1, -1,
|
|
|
+ /* RUNNING */ ENT_RUNNING, LP_RUNNING, -1, HOMING_LOW, HOMING_HIGH, -1, EMERGENCY_STOP, EMERGENCY_STOP, EMERGENCY_STOP, STOPPING, ENABLED, RUNNING, -1, -1, -1,
|
|
|
+ /* STOPPING */ ENT_STOPPING, -1, -1, -1, -1, -1, EMERGENCY_STOP, EMERGENCY_STOP, EMERGENCY_STOP, -1, -1, RUNNING, -1, -1, -1,
|
|
|
+ /* EMERGENCY_STOP */ ENT_EMERGENCY_STOP, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, RUNNING, -1, ENABLED, -1,
|
|
|
+ /* HOMING_HIGH */ ENT_HOMING_HIGH, -1, EXT_HOMING_HIGH, -1, -1, -1, ENABLED, EMERGENCY_STOP, EMERGENCY_STOP, STOPPING, -1, -1, -1, -1, -1,
|
|
|
+ /* HOMING_LOW */ ENT_HOMING_LOW, -1, EXT_HOMING_LOW, -1, -1, -1, EMERGENCY_STOP, ENABLED, EMERGENCY_STOP, STOPPING, -1, -1, -1, -1, -1,
|
|
|
};
|
|
|
// clang-format on
|
|
|
Machine::begin( state_table, ELSE );
|
|
@@ -28,15 +28,20 @@ Atm_Teenstep& Atm_Teenstep::begin(Stepper & motorRef, StepControl & stepControlR
|
|
|
*/
|
|
|
|
|
|
int Atm_Teenstep::event( int id ) {
|
|
|
+ updateLimitSwitch();
|
|
|
switch ( id ) {
|
|
|
+ case EVT_HOMING_LOW:
|
|
|
+ return 0;
|
|
|
+ case EVT_HOMING_HIGH:
|
|
|
+ return 0;
|
|
|
case EVT_MOVE_TIMEOUT:
|
|
|
return 0;
|
|
|
case EVT_LIMIT_HIGH:
|
|
|
- return 0;
|
|
|
- case EVT_LIMIT_LOW:
|
|
|
return limitState[0];
|
|
|
- case EVT_EMERGENCYSTOP:
|
|
|
+ case EVT_LIMIT_LOW:
|
|
|
return limitState[1];
|
|
|
+ case EVT_EMERGENCYSTOP:
|
|
|
+ return 0;
|
|
|
case EVT_STOP:
|
|
|
return 0;
|
|
|
case EVT_ONTARGET:
|
|
@@ -81,7 +86,7 @@ void Atm_Teenstep::action( int id ) {
|
|
|
//connectors[ON_ONCHANGEPOSITION].push(_currentStep);
|
|
|
// if (tempStep != _currentStep){push( connectors, ON_ONCHANGEPOSITION, 0, _currentStep, 0 );} ;
|
|
|
_currentStep = tempStep;
|
|
|
- updateLimitSwitch();
|
|
|
+ //updateLimitSwitch();
|
|
|
sendOSC();
|
|
|
return;
|
|
|
case ENT_STOPPING:
|
|
@@ -89,21 +94,51 @@ void Atm_Teenstep::action( int id ) {
|
|
|
return;
|
|
|
case ENT_EMERGENCY_STOP:
|
|
|
controller->emergencyStop();
|
|
|
+ trigger(EVT_ENABLE);
|
|
|
sendOSC();
|
|
|
return;
|
|
|
case ENT_HOMING_HIGH:
|
|
|
- _limitType ? move(2147483647) : trigger(EVT_ENABLE) ;
|
|
|
+ if(_limitType) {
|
|
|
+ motor->setTargetRel(2147483647);
|
|
|
+ controller->moveAsync(*motor);
|
|
|
+ }
|
|
|
sendOSC();
|
|
|
return;
|
|
|
case EXT_HOMING_HIGH:
|
|
|
- _maxStep = motor->getPosition();
|
|
|
+ controller->emergencyStop();
|
|
|
+ if(last_trigger == EVT_LIMIT_HIGH){
|
|
|
+ _maxStep = motor->getPosition();
|
|
|
+ Serial.print("Stepper maxPos ");
|
|
|
+ Serial.println(motor->getPosition());
|
|
|
+ trigger(EVT_ENABLE);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ Serial.println("homing failed ");
|
|
|
+ trigger(EVT_EMERGENCYSTOP);
|
|
|
+ }
|
|
|
+
|
|
|
return;
|
|
|
case ENT_HOMING_LOW:
|
|
|
- _limitType ? move(-2147483647) : trigger(EVT_STOP) ;
|
|
|
+ if(_limitType) {
|
|
|
+ motor->setTargetRel(-2147483647);
|
|
|
+ controller->moveAsync(*motor);
|
|
|
+ }
|
|
|
sendOSC();
|
|
|
return;
|
|
|
case EXT_HOMING_LOW:
|
|
|
- motor->setPosition(0);
|
|
|
+ controller->emergencyStop();
|
|
|
+ if(last_trigger == EVT_LIMIT_LOW){
|
|
|
+ motor->setPosition(0);
|
|
|
+ Serial.print("Stepper homed ");
|
|
|
+ Serial.println(motor->getPosition());
|
|
|
+ trigger(EVT_ENABLE);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ Serial.println("homing failed ");
|
|
|
+ trigger(EVT_EMERGENCYSTOP);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
@@ -223,6 +258,15 @@ Atm_Teenstep& Atm_Teenstep::sendOSC( void ){
|
|
|
/* Public event methods
|
|
|
*
|
|
|
*/
|
|
|
+ Atm_Teenstep& Atm_Teenstep::homing_low() {
|
|
|
+ trigger( EVT_HOMING_LOW );
|
|
|
+ return *this;
|
|
|
+ }
|
|
|
+
|
|
|
+ Atm_Teenstep& Atm_Teenstep::homing_high() {
|
|
|
+ trigger( EVT_HOMING_HIGH );
|
|
|
+ return *this;
|
|
|
+ }
|
|
|
|
|
|
Atm_Teenstep& Atm_Teenstep::move_timeout() {
|
|
|
trigger( EVT_MOVE_TIMEOUT );
|
|
@@ -283,6 +327,11 @@ Atm_Teenstep& Atm_Teenstep::enable() {
|
|
|
return *this;
|
|
|
}
|
|
|
|
|
|
+Atm_Teenstep& Atm_Teenstep::homing(bool direction) {
|
|
|
+ direction ? trigger( EVT_HOMING_HIGH ) : trigger(EVT_HOMING_LOW);
|
|
|
+ return *this;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* onChange() push connector variants ( slots 1, autostore 0, broadcast 0 )
|
|
|
*/
|
|
@@ -343,8 +392,8 @@ Atm_Teenstep& Atm_Teenstep::onLimitlow( atm_cb_push_t callback, int idx ) {
|
|
|
* Sets the symbol table and the default logging method for serial monitoring
|
|
|
*/
|
|
|
|
|
|
-Atm_Teenstep& Atm_Teenstep::trace( Stream & stream ) {
|
|
|
- Machine::setTrace( &stream, atm_serial_debug::trace,
|
|
|
- "TEENSTEP\0EVT_MOVE_TIMEOUT\0EVT_LIMIT_HIGH\0EVT_LIMIT_LOW\0EVT_EMERGENCYSTOP\0EVT_STOP\0EVT_ONTARGET\0EVT_MOVE\0EVT_DISABLE\0EVT_ENABLE\0ELSE\0DISABLED\0ENABLED\0RUNNING\0STOPPING\0EMERGENCY_STOP\0HOMING_HIGH\0HOMING_LOW" );
|
|
|
- return *this;
|
|
|
-}
|
|
|
+ Atm_Teenstep& Atm_Teenstep::trace( Stream & stream ) {
|
|
|
+ Machine::setTrace( &stream, atm_serial_debug::trace,
|
|
|
+ "TEENSTEP\0EVT_HOMING_LOW\0EVT_HOMING_HIGH\0EVT_MOVE_TIMEOUT\0EVT_LIMIT_HIGH\0EVT_LIMIT_LOW\0EVT_EMERGENCYSTOP\0EVT_STOP\0EVT_ONTARGET\0EVT_MOVE\0EVT_DISABLE\0EVT_ENABLE\0ELSE\0DISABLED\0ENABLED\0RUNNING\0STOPPING\0EMERGENCY_STOP\0HOMING_HIGH\0HOMING_LOW" );
|
|
|
+ return *this;
|
|
|
+ }
|