M206 implemented. This commit has the ethernet enabled and heaters set on by 1 (i.e. Duet v0.5 or below).

This commit is contained in:
Adrian Bowyer 2013-11-26 15:12:24 +00:00
parent c0b7b4bace
commit 7b9894e543
6 changed files with 88 additions and 57 deletions

View file

@ -65,6 +65,8 @@ enum Compatibility
// Webserver stuff // Webserver stuff
#define NETWORK true // Set true to turn the ethernet on
#define DEFAULT_PASSWORD "reprap" #define DEFAULT_PASSWORD "reprap"
#define DEFAULT_NAME "My RepRap 1" #define DEFAULT_NAME "My RepRap 1"
#define INDEX_PAGE "reprap.htm" #define INDEX_PAGE "reprap.htm"
@ -75,7 +77,5 @@ enum Compatibility
#define EOF_STRING "<!-- **EoF** -->" #define EOF_STRING "<!-- **EoF** -->"
#define NETWORK false // Set true to turn the ethernet on
#endif #endif

View file

@ -244,7 +244,7 @@ bool GCodes::Pop()
{ {
if(stackPointer <= 0) if(stackPointer <= 0)
{ {
platform->Message(HOST_MESSAGE, "Push(): stack underflow!\n"); platform->Message(HOST_MESSAGE, "Pop(): stack underflow!\n");
return true; return true;
} }
@ -271,6 +271,80 @@ bool GCodes::Pop()
return true; return true;
} }
// Move expects all axis movements to be absolute, and all
// extruder drive moves to be relative. This function serves that.
void GCodes::LoadMoveBufferFromGCode(GCodeBuffer *gb)
{
float absE;
for(uint8_t i = 0; i < DRIVES; i++)
{
if(i < AXES)
{
if(gb->Seen(gCodeLetters[i]))
{
if(axesRelative)
moveBuffer[i] += gb->GetFValue()*distanceScale;
else
moveBuffer[i] = gb->GetFValue()*distanceScale;
}
} else
{
if(gb->Seen(gCodeLetters[i]))
{
if(drivesRelative)
moveBuffer[i] = gb->GetFValue()*distanceScale;
else
{
absE = gb->GetFValue()*distanceScale;
moveBuffer[i] = absE - lastPos[i - AXES];
lastPos[i - AXES] = absE;
}
}
}
}
// Deal with feedrate
if(gb->Seen(gCodeLetters[DRIVES]))
gFeedRate = gb->GetFValue()*distanceScale*0.016666667; // G Code feedrates are in mm/minute; we need mm/sec
moveBuffer[DRIVES] = gFeedRate; // We always set it, as Move may have modified the last one.
}
void GCodes::LoadMoveBufferFromArray(float m[])
{
float absE;
for(uint8_t i = 0; i < DRIVES; i++)
{
if(i < AXES)
{
if(axesRelative)
moveBuffer[i] += m[i];
else
moveBuffer[i] = m[i];
} else
{
if(drivesRelative)
moveBuffer[i] = m[i];
else
{
absE = m[i];
moveBuffer[i] = absE - lastPos[i - AXES];
lastPos[i - AXES] = absE;
}
}
}
// Deal with feedrate
moveBuffer[DRIVES] = m[DRIVES]; // We always set it, as Move may have modified the last one.
}
// This function is called for a G Code that makes a move. // This function is called for a G Code that makes a move.
// If the Move class can't receive the move (i.e. things have to wait) // If the Move class can't receive the move (i.e. things have to wait)
// this returns false, otherwise true. // this returns false, otherwise true.
@ -296,11 +370,11 @@ bool GCodes::SetUpMove(GCodeBuffer *gb)
// The Move class calls this function to find what to do next. // The Move class calls this function to find what to do next.
bool GCodes::ReadMove(float* m, bool& ce) bool GCodes::ReadMove(float m[], bool& ce)
{ {
if(!moveAvailable) if(!moveAvailable)
return false; return false;
for(int8_t i = 0; i <= DRIVES; i++) // 1 more for F for(int8_t i = 0; i <= DRIVES; i++) // 1 more for feedrate
m[i] = moveBuffer[i]; m[i] = moveBuffer[i];
ce = checkEndStops; ce = checkEndStops;
moveAvailable = false; moveAvailable = false;
@ -325,7 +399,7 @@ bool GCodes::DoCannedCycleMove(bool ce)
return true; return true;
} else } else
{ // No. { // No.
if(!Push()) // Wait for the RepRap to finish whatever it was doing and save it's state if(!Push()) // Wait for the RepRap to finish whatever it was doing, save it's state, and load moveBuffer[] with the current position.
return false; return false;
for(int8_t drive = 0; drive <= DRIVES; drive++) for(int8_t drive = 0; drive <= DRIVES; drive++)
{ {
@ -365,7 +439,7 @@ bool GCodes::OffsetAxes(GCodeBuffer* gb)
return false; return false;
for(int8_t drive = 0; drive <= DRIVES; drive++) for(int8_t drive = 0; drive <= DRIVES; drive++)
{ {
if(drive < AXES) if(drive < AXES || drive == DRIVES)
{ {
record[drive] = moveBuffer[drive]; record[drive] = moveBuffer[drive];
moveToDo[drive] = moveBuffer[drive]; moveToDo[drive] = moveBuffer[drive];
@ -386,7 +460,7 @@ bool GCodes::OffsetAxes(GCodeBuffer* gb)
} }
} }
if(gb->Seen(gCodeLetters[DRIVES])) if(gb->Seen(gCodeLetters[DRIVES])) // Has the user specified a feedrate?
{ {
moveToDo[DRIVES] = gb->GetFValue(); moveToDo[DRIVES] = gb->GetFValue();
action[DRIVES] = true; action[DRIVES] = true;
@ -398,7 +472,7 @@ bool GCodes::OffsetAxes(GCodeBuffer* gb)
if(DoCannedCycleMove(false)) if(DoCannedCycleMove(false))
{ {
platform->GetLine()->Write(record[0]); LoadMoveBufferFromArray(record);
reprap.GetMove()->SetLiveCoordinates(record); // This doesn't transform record reprap.GetMove()->SetLiveCoordinates(record); // This doesn't transform record
reprap.GetMove()->SetPositions(record); // This does reprap.GetMove()->SetPositions(record); // This does
offSetSet = false; offSetSet = false;
@ -418,11 +492,12 @@ bool GCodes::DoHome()
for(int8_t drive = 0; drive < DRIVES; drive++) for(int8_t drive = 0; drive < DRIVES; drive++)
action[drive] = false; action[drive] = false;
action[DRIVES] = true; action[DRIVES] = true; // Always set the feedrate
if(homeX) if(homeX)
{ {
action[X_AXIS] = true; action[X_AXIS] = true;
moveToDo[DRIVES] = platform->HomeFeedRate(X_AXIS);
if(platform->HighStopButNotLow(X_AXIS)) if(platform->HighStopButNotLow(X_AXIS))
{ {
if(homeAxisFinalMove) if(homeAxisFinalMove)
@ -443,7 +518,6 @@ bool GCodes::DoHome()
} else } else
{ {
moveToDo[X_AXIS] = -2.0*platform->AxisLength(X_AXIS); moveToDo[X_AXIS] = -2.0*platform->AxisLength(X_AXIS);
moveToDo[DRIVES] = platform->HomeFeedRate(X_AXIS);
if(DoCannedCycleMove(true)) if(DoCannedCycleMove(true))
{ {
homeX = false; homeX = false;
@ -456,6 +530,7 @@ bool GCodes::DoHome()
if(homeY) if(homeY)
{ {
action[Y_AXIS] = true; action[Y_AXIS] = true;
moveToDo[DRIVES] = platform->HomeFeedRate(Y_AXIS);
if(platform->HighStopButNotLow(Y_AXIS)) if(platform->HighStopButNotLow(Y_AXIS))
{ {
if(homeAxisFinalMove) if(homeAxisFinalMove)
@ -476,7 +551,6 @@ bool GCodes::DoHome()
} else } else
{ {
moveToDo[Y_AXIS] = -2.0*platform->AxisLength(Y_AXIS); moveToDo[Y_AXIS] = -2.0*platform->AxisLength(Y_AXIS);
moveToDo[DRIVES] = platform->HomeFeedRate(Y_AXIS);
if(DoCannedCycleMove(true)) if(DoCannedCycleMove(true))
{ {
homeY = false; homeY = false;
@ -825,49 +899,6 @@ bool GCodes::SetOffsets(GCodeBuffer *gb)
return true; return true;
} }
// Move expects all axis movements to be absolute, and all
// extruder drive moves to be relative. This function serves that.
void GCodes::LoadMoveBufferFromGCode(GCodeBuffer *gb)
{
float absE;
for(uint8_t i = 0; i < DRIVES; i++)
{
if(i < AXES)
{
if(gb->Seen(gCodeLetters[i]))
{
if(axesRelative)
moveBuffer[i] += gb->GetFValue()*distanceScale;
else
moveBuffer[i] = gb->GetFValue()*distanceScale;
}
} else
{
if(gb->Seen(gCodeLetters[i]))
{
if(drivesRelative)
moveBuffer[i] = gb->GetFValue()*distanceScale;
else
{
absE = gb->GetFValue()*distanceScale;
moveBuffer[i] = absE - lastPos[i - AXES];
lastPos[i - AXES] = absE;
}
}
}
}
// Deal with feedrate
if(gb->Seen(gCodeLetters[DRIVES]))
gFeedRate = gb->GetFValue()*distanceScale*0.016666667; // G Code feedrates are in mm/minute; we need mm/sec
moveBuffer[DRIVES] = gFeedRate; // We always set it, as Move may have modified the last one.
}
// Does what it says. // Does what it says.
bool GCodes::DisableDrives() bool GCodes::DisableDrives()

View file

@ -91,6 +91,7 @@ class GCodes
bool SetOffsets(GCodeBuffer *gb); bool SetOffsets(GCodeBuffer *gb);
bool SetPositions(GCodeBuffer *gb); bool SetPositions(GCodeBuffer *gb);
void LoadMoveBufferFromGCode(GCodeBuffer *gb); void LoadMoveBufferFromGCode(GCodeBuffer *gb);
void LoadMoveBufferFromArray(float m[]);
bool NoHome(); bool NoHome();
bool Push(); bool Push();
bool Pop(); bool Pop();

View file

@ -255,7 +255,6 @@ void Move::Spin()
void Move::SetPositions(float move[]) void Move::SetPositions(float move[])
{ {
Transform(move); Transform(move);
for(uint8_t drive = 0; drive < DRIVES; drive++) for(uint8_t drive = 0; drive < DRIVES; drive++)
lastMove->SetDriveCoordinateAndZeroEndSpeed(move[drive], drive); lastMove->SetDriveCoordinateAndZeroEndSpeed(move[drive], drive);
lastMove->SetFeedRate(move[DRIVES]); lastMove->SetFeedRate(move[DRIVES]);

View file

@ -125,7 +125,7 @@ Licence: GPL
#define STANDBY_TEMPERATURES {ABS_ZERO, ABS_ZERO} // We specify one for the bed, though it's not needed #define STANDBY_TEMPERATURES {ABS_ZERO, ABS_ZERO} // We specify one for the bed, though it's not needed
#define ACTIVE_TEMPERATURES {ABS_ZERO, ABS_ZERO} #define ACTIVE_TEMPERATURES {ABS_ZERO, ABS_ZERO}
#define COOLING_FAN_PIN 34 #define COOLING_FAN_PIN 34
#define HEAT_ON 0 // 0 for inverted heater (eg Duet v0.6) #define HEAT_ON 1 // 0 for inverted heater (eg Duet v0.6)
#define AD_RANGE 1023.0//16383 // The A->D converter that measures temperatures gives an int this big as its max value #define AD_RANGE 1023.0//16383 // The A->D converter that measures temperatures gives an int this big as its max value

Binary file not shown.