Add DEBUG_LOGIC
parent
b8259ac555
commit
15adeaa180
|
|
@ -5,6 +5,7 @@
|
|||
/// Define Debug mode to add additional serial output
|
||||
|
||||
//#define DEBUG_FINDA
|
||||
//#define DEBUG_LOGIC
|
||||
|
||||
/// Wrangler for assorted compile-time configuration and constants.
|
||||
namespace config {
|
||||
|
|
|
|||
|
|
@ -6,10 +6,18 @@
|
|||
#include "../modules/leds.h"
|
||||
#include "../modules/motion.h"
|
||||
#include "../modules/permanent_storage.h"
|
||||
#ifdef DEBUG_LOGIC
|
||||
#include "../hal/usart.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#endif //DEBUG_LOGIC
|
||||
|
||||
namespace logic {
|
||||
|
||||
void FeedToBondtech::Reset(uint8_t maxRetries) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("\nFeed to Bondtech\n\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
state = EngagingIdler;
|
||||
this->maxRetries = maxRetries;
|
||||
ml::leds.SetMode(mg::globals.ActiveSlot(), ml::Color::green, ml::Mode::blink0);
|
||||
|
|
@ -22,12 +30,21 @@ bool FeedToBondtech::Step() {
|
|||
switch (state) {
|
||||
case EngagingIdler:
|
||||
if (mi::idler.Engaged()) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
uint16_t startSteps = mm::motion.CurPosition(mm::Pulley);
|
||||
char str[30];
|
||||
sprintf_P(str, PSTR("\nPulley start steps %u\n\n"), startSteps);
|
||||
hu::usart1.puts(str);
|
||||
#endif //DEBUG_LOGIC
|
||||
state = PushingFilament;
|
||||
mm::motion.PlanMove<mm::Pulley>(config::DefaultBowdenLength, config::pulleyFeedrate); //@@TODO constants - there was some strange acceleration sequence in the original FW,
|
||||
// we can probably hand over some array of constants for hand-tuned acceleration + leverage some smoothing in the stepper as well
|
||||
}
|
||||
return false;
|
||||
case PushingFilament:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("\nFeed to Bondtech --> Pushing\n\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
if (mfs::fsensor.Pressed()) {
|
||||
mm::motion.AbortPlannedMoves(); // stop pushing filament
|
||||
mi::idler.Disengage();
|
||||
|
|
@ -40,13 +57,22 @@ bool FeedToBondtech::Step() {
|
|||
}
|
||||
return false;
|
||||
case DisengagingIdler:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("\nFeed to Bondtech --> DisengagingIdler\n\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
if (!mi::idler.Engaged()) {
|
||||
state = OK;
|
||||
ml::leds.SetMode(mg::globals.ActiveSlot(), ml::green, ml::on);
|
||||
}
|
||||
return false;
|
||||
case OK:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("\nFeed to Bondtech\n\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
case Failed:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("\nFeed to Bondtech FAILED\n\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,11 @@
|
|||
#include "../modules/permanent_storage.h"
|
||||
#include "../modules/selector.h"
|
||||
#include "../modules/user_input.h"
|
||||
#ifdef DEBUG_LOGIC
|
||||
#include "../hal/usart.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#endif //DEBUG_LOGIC
|
||||
|
||||
namespace logic {
|
||||
|
||||
|
|
@ -16,7 +21,9 @@ void LoadFilament::Reset(uint8_t param) {
|
|||
if (!CheckToolIndex(param)) {
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Load Filament\n\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
state = ProgressCode::EngagingIdler;
|
||||
error = ErrorCode::RUNNING;
|
||||
mg::globals.SetActiveSlot(param);
|
||||
|
|
|
|||
|
|
@ -8,29 +8,29 @@
|
|||
enum class ProgressCode : uint_fast8_t {
|
||||
OK = 0, ///< finished ok
|
||||
|
||||
EngagingIdler,
|
||||
DisengagingIdler,
|
||||
UnloadingToFinda,
|
||||
UnloadingToPulley,
|
||||
FeedingToFinda,
|
||||
FeedingToBondtech,
|
||||
AvoidingGrind,
|
||||
FinishingMoves,
|
||||
EngagingIdler, // P1
|
||||
DisengagingIdler, // P2
|
||||
UnloadingToFinda, // P3
|
||||
UnloadingToPulley, //P4
|
||||
FeedingToFinda, // P5
|
||||
FeedingToBondtech, // P6
|
||||
AvoidingGrind, // P7
|
||||
FinishingMoves, // P8
|
||||
|
||||
ERRDisengagingIdler,
|
||||
ERREngagingIdler,
|
||||
ERRWaitingForUser,
|
||||
ERRInternal,
|
||||
ERRHelpingFilament,
|
||||
ERRTMCFailed,
|
||||
ERRDisengagingIdler, // P9
|
||||
ERREngagingIdler, // P10
|
||||
ERRWaitingForUser, // P11
|
||||
ERRInternal, // P12
|
||||
ERRHelpingFilament, // P13
|
||||
ERRTMCFailed, // P14
|
||||
|
||||
UnloadingFilament,
|
||||
LoadingFilament,
|
||||
SelectingFilamentSlot,
|
||||
PreparingBlade,
|
||||
PushingFilament,
|
||||
PerformingCut,
|
||||
ReturningSelector,
|
||||
ParkingSelector,
|
||||
EjectingFilament,
|
||||
UnloadingFilament, // P15
|
||||
LoadingFilament, // P16
|
||||
SelectingFilamentSlot, // P17
|
||||
PreparingBlade, // P18
|
||||
PushingFilament, // P19
|
||||
PerformingCut, // P20
|
||||
ReturningSelector, // P21
|
||||
ParkingSelector, // P22
|
||||
EjectingFilament, // P23
|
||||
};
|
||||
|
|
|
|||
|
|
@ -7,6 +7,11 @@
|
|||
#include "../modules/motion.h"
|
||||
#include "../modules/permanent_storage.h"
|
||||
#include "../modules/selector.h"
|
||||
#ifdef DEBUG_LOGIC
|
||||
#include "../hal/usart.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#endif //DEBUG_LOGIC
|
||||
|
||||
namespace logic {
|
||||
|
||||
|
|
@ -19,6 +24,9 @@ void ToolChange::Reset(uint8_t param) {
|
|||
|
||||
if (param == mg::globals.ActiveSlot() && mg::globals.FilamentLoaded()) {
|
||||
// we are already at the correct slot and the filament is loaded - nothing to do
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("we are already at the correct slot and the filament is loaded - nothing to do\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -27,10 +35,16 @@ void ToolChange::Reset(uint8_t param) {
|
|||
plannedSlot = param;
|
||||
|
||||
if (mg::globals.FilamentLoaded()) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Filament is loaded --> unload\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
state = ProgressCode::UnloadingFilament;
|
||||
unl.Reset(mg::globals.ActiveSlot());
|
||||
} else {
|
||||
state = ProgressCode::LoadingFilament;
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Filament is not loaded --> load\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
load.Reset(plannedSlot);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,11 @@
|
|||
#include "../modules/motion.h"
|
||||
#include "../modules/permanent_storage.h"
|
||||
#include "../modules/user_input.h"
|
||||
#ifdef DEBUG_LOGIC
|
||||
#include "../hal/usart.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#endif //DEBUG_LOGIC
|
||||
|
||||
namespace logic {
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,11 @@
|
|||
#include "leds.h"
|
||||
#include "motion.h"
|
||||
#include "permanent_storage.h"
|
||||
#ifdef DEBUG_LOGIC
|
||||
#include "../hal/usart.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#endif //DEBUG_LOGIC
|
||||
|
||||
namespace modules {
|
||||
namespace idler {
|
||||
|
|
@ -11,34 +16,56 @@ Idler idler;
|
|||
|
||||
void Idler::PrepareMoveToPlannedSlot() {
|
||||
mm::motion.PlanMoveTo<mm::Idler>(SlotPosition(plannedSlot), mm::unitToAxisUnit<mm::I_speed_t>(config::idlerFeedrate));
|
||||
#ifdef DEBUG_LOGIC
|
||||
char str[30];
|
||||
sprintf_P(str, PSTR("Prepare Move Idler slot %d\n"), plannedSlot);
|
||||
hu::usart1.puts(str);
|
||||
#endif //DEBUG_LOGIC
|
||||
}
|
||||
|
||||
void Idler::PlanHomingMove() {
|
||||
mm::motion.PlanMove<mm::Idler>(mm::unitToAxisUnit<mm::I_pos_t>(-config::idlerLimits.lenght * 2), mm::unitToAxisUnit<mm::I_speed_t>(config::idlerFeedrate));
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Plan Homing Idler\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
}
|
||||
|
||||
Idler::OperationResult Idler::Disengage() {
|
||||
if (state == Moving)
|
||||
if (state == Moving) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Moving --> Disengage refused\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
return OperationResult::Refused;
|
||||
|
||||
}
|
||||
plannedSlot = IdleSlotIndex();
|
||||
plannedEngage = false;
|
||||
|
||||
if (!Engaged())
|
||||
if (!Engaged()) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Disengage Idler\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
return OperationResult::Accepted;
|
||||
|
||||
}
|
||||
return InitMovement(mm::Idler);
|
||||
}
|
||||
|
||||
Idler::OperationResult Idler::Engage(uint8_t slot) {
|
||||
if (state == Moving)
|
||||
if (state == Moving){
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Moving --> Engage refused\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
return OperationResult::Refused;
|
||||
}
|
||||
|
||||
plannedSlot = slot;
|
||||
plannedEngage = true;
|
||||
|
||||
if (Engaged())
|
||||
if (Engaged()) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Engage Idler\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
return OperationResult::Accepted;
|
||||
}
|
||||
|
||||
return InitMovement(mm::Idler);
|
||||
}
|
||||
|
|
@ -54,12 +81,21 @@ bool Idler::Home() {
|
|||
bool Idler::Step() {
|
||||
switch (state) {
|
||||
case Moving:
|
||||
#ifdef DEBUG_LOGIC
|
||||
//hu::usart1.puts("Moving Idler\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
PerformMove(mm::Idler);
|
||||
return false;
|
||||
case Homing:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Homing Idler\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
PerformHome(mm::Idler);
|
||||
return false;
|
||||
case Ready:
|
||||
#ifdef DEBUG_LOGIC
|
||||
//hu::usart1.puts("Idler Ready\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
currentlyEngaged = plannedEngage;
|
||||
currentSlot = plannedSlot;
|
||||
|
||||
|
|
@ -68,6 +104,9 @@ bool Idler::Step() {
|
|||
|
||||
return true;
|
||||
case Failed:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Idler Failed\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,10 @@
|
|||
#include "motion.h"
|
||||
#include "../panic.h"
|
||||
#ifdef DEBUG_LOGIC
|
||||
#include "../hal/usart.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#endif //DEBUG_LOGIC
|
||||
|
||||
// TODO: use proper timer abstraction
|
||||
#ifdef __AVR__
|
||||
|
|
@ -45,6 +50,12 @@ void Motion::StallGuardReset(Axis axis) {
|
|||
}
|
||||
|
||||
void Motion::PlanMoveTo(Axis axis, pos_t pos, steps_t feed_rate, steps_t end_rate) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
char str[30];
|
||||
sprintf_P(str, PSTR("Move axis %d to %u\n"), axis, pos);
|
||||
hu::usart1.puts(str);
|
||||
#endif //DEBUG_LOGIC
|
||||
|
||||
if (axisData[axis].ctrl.PlanMoveTo(pos, feed_rate, end_rate)) {
|
||||
// move was queued, prepare the axis
|
||||
if (!axisData[axis].enabled)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,11 @@
|
|||
#include "leds.h"
|
||||
#include "motion.h"
|
||||
#include "permanent_storage.h"
|
||||
#ifdef DEBUG_LOGIC
|
||||
#include "../hal/usart.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#endif //DEBUG_LOGIC
|
||||
|
||||
namespace modules {
|
||||
namespace selector {
|
||||
|
|
@ -11,21 +16,35 @@ Selector selector;
|
|||
|
||||
void Selector::PrepareMoveToPlannedSlot() {
|
||||
mm::motion.PlanMoveTo<mm::Selector>(SlotPosition(plannedSlot), mm::unitToAxisUnit<mm::S_speed_t>(config::selectorFeedrate));
|
||||
#ifdef DEBUG_LOGIC
|
||||
char str[30];
|
||||
sprintf_P(str, PSTR("Prepare Move Selector slot %d\n"), plannedSlot);
|
||||
hu::usart1.puts(str);
|
||||
#endif //DEBUG_LOGIC
|
||||
}
|
||||
|
||||
void Selector::PlanHomingMove() {
|
||||
mm::motion.PlanMove<mm::Selector>(mm::unitToAxisUnit<mm::S_pos_t>(config::selectorLimits.lenght * 2), mm::unitToAxisUnit<mm::S_speed_t>(config::selectorFeedrate));
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Plan Homing Selector\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
}
|
||||
|
||||
Selector::OperationResult Selector::MoveToSlot(uint8_t slot) {
|
||||
if (state == Moving)
|
||||
if (state == Moving) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Moving --> Selector refused\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
return OperationResult::Refused;
|
||||
|
||||
}
|
||||
plannedSlot = slot;
|
||||
|
||||
if (currentSlot == slot)
|
||||
if (currentSlot == slot) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Moving Selector\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
return OperationResult::Accepted;
|
||||
|
||||
}
|
||||
return InitMovement(mm::Selector);
|
||||
}
|
||||
|
||||
|
|
@ -40,15 +59,27 @@ bool Selector::Step() {
|
|||
switch (state) {
|
||||
case Moving:
|
||||
PerformMove(mm::Selector);
|
||||
#ifdef DEBUG_LOGIC
|
||||
//hu::usart1.puts("Moving Selector\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
return false;
|
||||
case Homing:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Homing Selector\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
PerformHome(mm::Selector);
|
||||
return false;
|
||||
case Ready:
|
||||
#ifdef DEBUG_LOGIC
|
||||
//hu::usart1.puts("Selector Ready\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
currentSlot = plannedSlot;
|
||||
mm::motion.Disable(mm::Selector); // turn off selector motor's power every time
|
||||
return true;
|
||||
case Failed:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Selector Failed\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue