|
|
|
@ -82,6 +82,7 @@ char version_string[] = "1.0.0 Alpha 1";
|
|
|
|
|
// M27 - Report SD print status
|
|
|
|
|
// M28 - Start SD write (M28 filename.g)
|
|
|
|
|
// M29 - Stop SD write
|
|
|
|
|
// M30 - Output time since last M109 or SD card start to serial
|
|
|
|
|
// M42 - Change pin status via gcode
|
|
|
|
|
// M80 - Turn on Power Supply
|
|
|
|
|
// M81 - Turn off Power Supply
|
|
|
|
@ -172,23 +173,29 @@ bool savetosd = false;
|
|
|
|
|
int16_t n;
|
|
|
|
|
unsigned long autostart_atmillis=0;
|
|
|
|
|
|
|
|
|
|
void initsd(){
|
|
|
|
|
void initsd()
|
|
|
|
|
{
|
|
|
|
|
sdactive = false;
|
|
|
|
|
#if SDSS >- 1
|
|
|
|
|
if(root.isOpen())
|
|
|
|
|
root.close();
|
|
|
|
|
if (!card.init(SPI_FULL_SPEED,SDSS)){
|
|
|
|
|
if (!card.init(SPI_FULL_SPEED,SDSS))
|
|
|
|
|
{
|
|
|
|
|
//if (!card.init(SPI_HALF_SPEED,SDSS))
|
|
|
|
|
Serial.println("SD init fail");
|
|
|
|
|
SERIAL_ECHOLN("SD init fail");
|
|
|
|
|
}
|
|
|
|
|
else if (!volume.init(&card))
|
|
|
|
|
Serial.println("volume.init failed");
|
|
|
|
|
{
|
|
|
|
|
SERIAL_ERRORLN("volume.init failed");
|
|
|
|
|
}
|
|
|
|
|
else if (!root.openRoot(&volume))
|
|
|
|
|
Serial.println("openRoot failed");
|
|
|
|
|
{
|
|
|
|
|
SERIAL_ERRORLN("openRoot failed");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sdactive = true;
|
|
|
|
|
Serial.println("SD card ok");
|
|
|
|
|
SERIAL_ECHOLN("SD card ok");
|
|
|
|
|
}
|
|
|
|
|
#endif //SDSS
|
|
|
|
|
}
|
|
|
|
@ -214,7 +221,7 @@ inline void write_command(char *buf){
|
|
|
|
|
//Serial.println(begin);
|
|
|
|
|
file.write(begin);
|
|
|
|
|
if (file.writeError){
|
|
|
|
|
Serial.println("error writing to file");
|
|
|
|
|
SERIAL_ERRORLN("error writing to file");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif //SDSUPPORT
|
|
|
|
@ -227,7 +234,7 @@ void enquecommand(const char *cmd)
|
|
|
|
|
{
|
|
|
|
|
//this is dangerous if a mixing of serial and this happsens
|
|
|
|
|
strcpy(&(cmdbuffer[bufindw][0]),cmd);
|
|
|
|
|
Serial.print("en:");Serial.println(cmdbuffer[bufindw]);
|
|
|
|
|
SERIAL_ECHOLN("enqueing \""<<cmdbuffer[bufindw]<<"\"");
|
|
|
|
|
bufindw= (bufindw + 1)%BUFSIZE;
|
|
|
|
|
buflen += 1;
|
|
|
|
|
}
|
|
|
|
@ -237,7 +244,7 @@ void setup()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
Serial.begin(BAUDRATE);
|
|
|
|
|
ECHOLN("Marlin "<<version_string);
|
|
|
|
|
SERIAL_ECHOLN("Marlin "<<version_string);
|
|
|
|
|
Serial.println("start");
|
|
|
|
|
#if defined FANCY_LCD || defined SIMPLE_LCD
|
|
|
|
|
lcd_init();
|
|
|
|
@ -478,14 +485,14 @@ inline void get_command()
|
|
|
|
|
sdpos = file.curPosition();
|
|
|
|
|
if(sdpos >= filesize){
|
|
|
|
|
sdmode = false;
|
|
|
|
|
Serial.println("Done printing file");
|
|
|
|
|
Serial.println("echo: Done printing file");
|
|
|
|
|
stoptime=millis();
|
|
|
|
|
char time[30];
|
|
|
|
|
unsigned long t=(stoptime-starttime)/1000;
|
|
|
|
|
int sec,min;
|
|
|
|
|
min=t/60;
|
|
|
|
|
sec=t%60;
|
|
|
|
|
sprintf(time,"%i min, %i sec",min,sec);
|
|
|
|
|
sprintf(time,"echo: %i min, %i sec",min,sec);
|
|
|
|
|
Serial.println(time);
|
|
|
|
|
LCD_MESSAGE(time);
|
|
|
|
|
checkautostart(true);
|
|
|
|
@ -774,7 +781,7 @@ inline void process_commands()
|
|
|
|
|
//processed in write to file routine above
|
|
|
|
|
//savetosd = false;
|
|
|
|
|
break;
|
|
|
|
|
case 30:
|
|
|
|
|
case 30: //M30 take time since the start of the SD print or an M109 command
|
|
|
|
|
{
|
|
|
|
|
stoptime=millis();
|
|
|
|
|
char time[30];
|
|
|
|
@ -782,7 +789,7 @@ inline void process_commands()
|
|
|
|
|
int sec,min;
|
|
|
|
|
min=t/60;
|
|
|
|
|
sec=t%60;
|
|
|
|
|
sprintf(time,"%i min, %i sec",min,sec);
|
|
|
|
|
sprintf(time,"echo: time needed %i min, %i sec",min,sec);
|
|
|
|
|
Serial.println(time);
|
|
|
|
|
LCD_MESSAGE(time);
|
|
|
|
|
}
|
|
|
|
@ -847,7 +854,7 @@ inline void process_commands()
|
|
|
|
|
Serial.println();
|
|
|
|
|
#endif
|
|
|
|
|
#else
|
|
|
|
|
Serial.println("No thermistors - no temp");
|
|
|
|
|
Serial.println("echo: No thermistors - no temp");
|
|
|
|
|
#endif
|
|
|
|
|
return;
|
|
|
|
|
//break;
|
|
|
|
@ -888,7 +895,8 @@ inline void process_commands()
|
|
|
|
|
}
|
|
|
|
|
#endif //TEMP_RESIDENCY_TIME
|
|
|
|
|
}
|
|
|
|
|
LCD_MESSAGE("Marlin ready.");
|
|
|
|
|
LCD_MESSAGE("Heating done.");
|
|
|
|
|
starttime=millis();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 190: // M190 - Wait bed for heater to reach target.
|
|
|
|
@ -1063,9 +1071,9 @@ inline void process_commands()
|
|
|
|
|
if(code_seen('P')) Kp = code_value();
|
|
|
|
|
if(code_seen('I')) Ki = code_value()*PID_dT;
|
|
|
|
|
if(code_seen('D')) Kd = code_value()/PID_dT;
|
|
|
|
|
// ECHOLN("Kp "<<_FLOAT(Kp,2));
|
|
|
|
|
// ECHOLN("Ki "<<_FLOAT(Ki/PID_dT,2));
|
|
|
|
|
// ECHOLN("Kd "<<_FLOAT(Kd*PID_dT,2));
|
|
|
|
|
// SERIAL_ECHOLN("Kp "<<_FLOAT(Kp,2));
|
|
|
|
|
// SERIAL_ECHOLN("Ki "<<_FLOAT(Ki/PID_dT,2));
|
|
|
|
|
// SERIAL_ECHOLN("Kd "<<_FLOAT(Kd*PID_dT,2));
|
|
|
|
|
|
|
|
|
|
// temp_iState_min = 0.0;
|
|
|
|
|
// if (Ki!=0) {
|
|
|
|
@ -1093,8 +1101,9 @@ inline void process_commands()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
Serial.println("Unknown command:");
|
|
|
|
|
Serial.println(cmdbuffer[bufindr]);
|
|
|
|
|
Serial.print("echo: Unknown command:\"");
|
|
|
|
|
Serial.print(cmdbuffer[bufindr]);
|
|
|
|
|
Serial.println("\"");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ClearToSend();
|
|
|
|
@ -1288,7 +1297,7 @@ void kill()
|
|
|
|
|
disable_e();
|
|
|
|
|
|
|
|
|
|
if(PS_ON_PIN > -1) pinMode(PS_ON_PIN,INPUT);
|
|
|
|
|
Serial.println("!! Printer halted. kill() called !!");
|
|
|
|
|
SERIAL_ERRORLN("Printer halted. kill() called !!");
|
|
|
|
|
while(1); // Wait for reset
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|