|
@@ -7,14 +7,14 @@
|
|
|
Atm_Teenstep& Atm_Teenstep::begin(Stepper & motorRef, StepControl & stepControlRef) {
|
|
|
|
|
|
const static state_t state_table[] PROGMEM = {
|
|
|
-
|
|
|
- ENT_DISABLED, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, ENABLED, -1,
|
|
|
- ENT_ENABLED, -1, -1, -1, -1, -1, -1, -1, -1, RUNNING, DISABLED, -1, -1,
|
|
|
- ENT_RUNNING, LP_RUNNING, -1, -1, EMERGENCY_STOP, EMERGENCY_STOP, EMERGENCY_STOP, STOPPING, ENABLED, RUNNING, -1, -1, -1,
|
|
|
- ENT_STOPPING, -1, -1, -1, EMERGENCY_STOP, EMERGENCY_STOP, EMERGENCY_STOP, -1, -1, RUNNING, -1, -1, -1,
|
|
|
- ENT_EMERGENCY_STOP, -1, -1, -1, -1, -1, -1, -1, -1, RUNNING, -1, ENABLED, -1,
|
|
|
- ENT_HOMING_HIGH, -1, EXT_HOMING_HIGH, -1, ENABLED, EMERGENCY_STOP, EMERGENCY_STOP, STOPPING, -1, -1, -1, -1, -1,
|
|
|
- ENT_HOMING_LOW, -1, EXT_HOMING_LOW, -1, EMERGENCY_STOP, ENABLED, EMERGENCY_STOP, STOPPING, -1, -1, -1, -1, -1,
|
|
|
+
|
|
|
+ ENT_DISABLED, -1, -1, HOMING_LOW, HOMING_HIGH, -1, -1, -1, -1, -1, -1, -1, -1, ENABLED, -1,
|
|
|
+ ENT_ENABLED, -1, -1, HOMING_LOW, HOMING_HIGH, -1, -1, -1, -1, -1, -1, RUNNING, DISABLED, -1, -1,
|
|
|
+ ENT_RUNNING, LP_RUNNING, -1, HOMING_LOW, HOMING_HIGH, -1, EMERGENCY_STOP, EMERGENCY_STOP, EMERGENCY_STOP, STOPPING, ENABLED, RUNNING, -1, -1, -1,
|
|
|
+ ENT_STOPPING, -1, -1, -1, -1, -1, EMERGENCY_STOP, EMERGENCY_STOP, EMERGENCY_STOP, -1, -1, RUNNING, -1, -1, -1,
|
|
|
+ ENT_EMERGENCY_STOP, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, RUNNING, -1, ENABLED, -1,
|
|
|
+ ENT_HOMING_HIGH, -1, EXT_HOMING_HIGH, -1, -1, -1, ENABLED, EMERGENCY_STOP, EMERGENCY_STOP, STOPPING, -1, -1, -1, -1, -1,
|
|
|
+ ENT_HOMING_LOW, -1, EXT_HOMING_LOW, -1, -1, -1, EMERGENCY_STOP, ENABLED, EMERGENCY_STOP, STOPPING, -1, -1, -1, -1, -1,
|
|
|
};
|
|
|
|
|
|
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 ) {
|
|
|
|
|
|
|
|
|
_currentStep = tempStep;
|
|
|
- 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 ){
|
|
|
|
|
|
*
|
|
|
*/
|
|
|
+ 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;
|
|
|
+ }
|