char ver2[4]=EEPROM_VERSION;
i=EEPROM_OFFSET;
EEPROM_writeAnything(i,ver2); // validate data
- ECHOLN("Settings Stored");
+ SERIAL_ECHOLN("Settings Stored");
}
char stored_ver[4];
char ver[4]=EEPROM_VERSION;
EEPROM_readAnything(i,stored_ver); //read stored version
-// ECHOLN("Version: [" << ver << "] Stored version: [" << stored_ver << "]");
+// SERIAL_ECHOLN("Version: [" << ver << "] Stored version: [" << stored_ver << "]");
if ((!def)&&(strncmp(ver,stored_ver,3)==0)) { // version number match
EEPROM_readAnything(i,axis_steps_per_unit);
EEPROM_readAnything(i,max_feedrate);
EEPROM_readAnything(i,Ki);
EEPROM_readAnything(i,Kd);
- ECHOLN("Stored settings retreived:");
+ SERIAL_ECHOLN("Stored settings retreived:");
}
else {
float tmp1[]=DEFAULT_AXIS_STEPS_PER_UNIT;
mintravelfeedrate=DEFAULT_MINTRAVELFEEDRATE;
max_xy_jerk=DEFAULT_XYJERK;
max_z_jerk=DEFAULT_ZJERK;
- ECHOLN("Using Default settings:");
+ SERIAL_ECHOLN("Using Default settings:");
}
- ECHOLN("Steps per unit:");
- ECHOLN(" M92 X" <<_FLOAT(axis_steps_per_unit[0],3) << " Y" << _FLOAT(axis_steps_per_unit[1],3) << " Z" << _FLOAT(axis_steps_per_unit[2],3) << " E" << _FLOAT(axis_steps_per_unit[3],3));
- ECHOLN("Maximum feedrates (mm/s):");
- ECHOLN(" M203 X" <<_FLOAT(max_feedrate[0]/60,2)<<" Y" << _FLOAT(max_feedrate[1]/60,2) << " Z" << _FLOAT(max_feedrate[2]/60,2) << " E" << _FLOAT(max_feedrate[3]/60,2));
- ECHOLN("Maximum Acceleration (mm/s2):");
- ECHOLN(" M201 X" <<_FLOAT(max_acceleration_units_per_sq_second[0],0) << " Y" << _FLOAT(max_acceleration_units_per_sq_second[1],0) << " Z" << _FLOAT(max_acceleration_units_per_sq_second[2],0) << " E" << _FLOAT(max_acceleration_units_per_sq_second[3],0));
- ECHOLN("Acceleration: S=acceleration, T=retract acceleration");
- ECHOLN(" M204 S" <<_FLOAT(acceleration,2) << " T" << _FLOAT(retract_acceleration,2));
- ECHOLN("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum xY jerk (mm/s), Z=maximum Z jerk (mm/s)");
- ECHOLN(" M205 S" <<_FLOAT(minimumfeedrate/60,2) << " T" << _FLOAT(mintravelfeedrate/60,2) << " B" << _FLOAT(minsegmenttime,2) << " X" << _FLOAT(max_xy_jerk/60,2) << " Z" << _FLOAT(max_z_jerk/60,2));
+ SERIAL_ECHOLN("Steps per unit:");
+ SERIAL_ECHOLN(" M92 X" <<_FLOAT(axis_steps_per_unit[0],3) << " Y" << _FLOAT(axis_steps_per_unit[1],3) << " Z" << _FLOAT(axis_steps_per_unit[2],3) << " E" << _FLOAT(axis_steps_per_unit[3],3));
+ SERIAL_ECHOLN("Maximum feedrates (mm/s):");
+ SERIAL_ECHOLN(" M203 X" <<_FLOAT(max_feedrate[0]/60,2)<<" Y" << _FLOAT(max_feedrate[1]/60,2) << " Z" << _FLOAT(max_feedrate[2]/60,2) << " E" << _FLOAT(max_feedrate[3]/60,2));
+ SERIAL_ECHOLN("Maximum Acceleration (mm/s2):");
+ SERIAL_ECHOLN(" M201 X" <<_FLOAT(max_acceleration_units_per_sq_second[0],0) << " Y" << _FLOAT(max_acceleration_units_per_sq_second[1],0) << " Z" << _FLOAT(max_acceleration_units_per_sq_second[2],0) << " E" << _FLOAT(max_acceleration_units_per_sq_second[3],0));
+ SERIAL_ECHOLN("Acceleration: S=acceleration, T=retract acceleration");
+ SERIAL_ECHOLN(" M204 S" <<_FLOAT(acceleration,2) << " T" << _FLOAT(retract_acceleration,2));
+ SERIAL_ECHOLN("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum xY jerk (mm/s), Z=maximum Z jerk (mm/s)");
+ SERIAL_ECHOLN(" M205 S" <<_FLOAT(minimumfeedrate/60,2) << " T" << _FLOAT(mintravelfeedrate/60,2) << " B" << _FLOAT(minsegmenttime,2) << " X" << _FLOAT(max_xy_jerk/60,2) << " Z" << _FLOAT(max_z_jerk/60,2));
#ifdef PIDTEMP
- ECHOLN("PID settings:");
- ECHOLN(" M301 P" << _FLOAT(Kp,3) << " I" << _FLOAT(Ki,3) << " D" << _FLOAT(Kd,3));
+ SERIAL_ECHOLN("PID settings:");
+ SERIAL_ECHOLN(" M301 P" << _FLOAT(Kp,3) << " I" << _FLOAT(Ki,3) << " D" << _FLOAT(Kd,3));
#endif
}
UPLOAD_PROTOCOL = stk500v2
BUILD_MCU = atmega2560
BUILD_F_CPU = 16000000L
+TERM=bash
# getting undefined reference to `__cxa_pure_virtual'
#~ [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1254180518 Arduino Forum - Makefile]
#include <WProgram.h>
#include "fastio.h"
-
-#define ECHO(x) Serial << "echo: " << x;
-#define ECHOLN(x) Serial << "echo: "<<x<<endl;
+#include "streaming.h"
+#define SERIAL_ECHO(x) Serial << "echo: " << x;
+#define SERIAL_ECHOLN(x) Serial << "echo: "<<x<<endl;
+#define SERIAL_ERROR(x) Serial << "echo: ERROR: " << x;
+#define SERIAL_ERRORLN(x) Serial << "echo: ERROR: " << x<<endl;
void get_command();
void process_commands();
//void plan_set_position(float x, float y, float z, float e);
//void st_wake_up();
//void st_synchronize();
-void enquecommand(const char *cmd);
+void enquecommand(const char *cmd); //put an ascii command at the end of the current buffer.
#ifndef CRITICAL_SECTION_START
// 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
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
}
//Serial.println(begin);
file.write(begin);
if (file.writeError){
- Serial.println("error writing to file");
+ SERIAL_ERRORLN("error writing to file");
}
}
#endif //SDSUPPORT
{
//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;
}
{
Serial.begin(BAUDRATE);
- ECHOLN("Marlin "<<version_string);
+ SERIAL_ECHOLN("Marlin "<<version_string);
Serial.println("start");
#if defined FANCY_LCD || defined SIMPLE_LCD
lcd_init();
sdpos = file.curPosition();
if(sdpos >= filesize){
sdmode = false;
- Serial.println("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);
- Serial.println(time);
- LCD_MESSAGE(time);
- checkautostart(true);
+ 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,"echo: %i min, %i sec",min,sec);
+ Serial.println(time);
+ LCD_MESSAGE(time);
+ checkautostart(true);
}
if(!serial_count) return; //if empty line
cmdbuffer[bufindw][serial_count] = 0; //terminate string
case 24: //M24 - Start SD print
if(sdactive){
sdmode = true;
- starttime=millis();
+ starttime=millis();
}
break;
case 25: //M25 - Pause SD print
//processed in write to file routine above
//savetosd = false;
break;
- case 30:
- {
- 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);
- Serial.println(time);
- LCD_MESSAGE(time);
- }
- break;
+ case 30: //M30 take time since the start of the SD print or an M109 command
+ {
+ stoptime=millis();
+ char time[30];
+ unsigned long t=(stoptime-starttime)/1000;
+ int sec,min;
+ min=t/60;
+ sec=t%60;
+ sprintf(time,"echo: time needed %i min, %i sec",min,sec);
+ Serial.println(time);
+ LCD_MESSAGE(time);
+ }
+ break;
#endif //SDSUPPORT
case 42: //M42 -Change pin status via gcode
if (code_seen('S'))
Serial.println();
#endif
#else
- Serial.println("No thermistors - no temp");
+ Serial.println("echo: No thermistors - no temp");
#endif
return;
//break;
}
#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.
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) {
}
}
else{
- Serial.println("Unknown command:");
- Serial.println(cmdbuffer[bufindr]);
+ Serial.print("echo: Unknown command:\"");
+ Serial.print(cmdbuffer[bufindr]);
+ Serial.println("\"");
}
ClearToSend();
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
}
{
// int acceleration_manager_was_enabled = plan_is_acceleration_manager_enabled();
// plan_set_acceleration_manager_enabled(false); // disable acceleration management for the duration of the arc
- Serial.println("mc_arc");
+ SERIAL_ECHOLN("mc_arc.");
float center_axis0 = position[axis_0] + offset[axis_0];
float center_axis1 = position[axis_1] + offset[axis_1];
float linear_travel = target[axis_linear] - position[axis_linear];
// It pops blocks from the block_buffer and executes them by pulsing the stepper pins appropriately. \r
ISR(TIMER1_COMPA_vect)\r
{ \r
- if(busy){ Serial.print(*(unsigned short *)OCR1A); Serial.println(" BUSY");\r
+ if(busy){ SERIAL_ERRORLN(*(unsigned short *)OCR1A<< " ISR overtaking itself.");\r
return; \r
} // The busy-flag is used to avoid reentering this interrupt\r
\r
}\r
#endif //PID_OPENLOOP\r
#ifdef PID_DEBUG\r
- Serial.print(" Input ");\r
- Serial.print(pid_input);\r
- Serial.print(" Output ");\r
- Serial.print(pid_output); \r
- Serial.print(" pTerm ");\r
- Serial.print(pTerm); \r
- Serial.print(" iTerm ");\r
- Serial.print(iTerm); \r
- Serial.print(" dTerm ");\r
- Serial.print(dTerm); \r
- Serial.println();\r
+ SERIAL_ECHOLN(" PIDDEBUG Input "<<pid_input<<" Output "<<pid_output" pTerm "<<pTerm<<" iTerm "<<iTerm<<" dTerm "<<dTerm); \r
+ \r
#endif //PID_DEBUG\r
analogWrite(HEATER_0_PIN, pid_output);\r
#endif //PIDTEMP\r
temp_count++;\r
break;\r
default:\r
- Serial.println("!! Temp measurement error !!");\r
+ SERIAL_ERRORLN("Temp measurement error!");\r
break;\r
}\r
\r
if(current_raw[TEMPSENSOR_HOTEND_0] >= maxttemp_0) {\r
target_raw[TEMPSENSOR_HOTEND_0] = 0;\r
analogWrite(HEATER_0_PIN, 0);\r
- Serial.println("!! Temperature extruder 0 switched off. MAXTEMP triggered !!");\r
+ SERIAL_ERRORLN("Temperature extruder 0 switched off. MAXTEMP triggered !!");\r
kill();\r
}\r
#endif\r
target_raw[TEMPSENSOR_HOTEND_1] = 0;\r
if(current_raw[2] >= maxttemp_1) {\r
analogWrite(HEATER_2_PIN, 0);\r
- Serial.println("!! Temperature extruder 1 switched off. MAXTEMP triggered !!");\r
+ SERIAL_ERRORLN("Temperature extruder 1 switched off. MAXTEMP triggered !!");\r
kill()\r
}\r
#endif\r
if(current_raw[TEMPSENSOR_HOTEND_0] <= minttemp_0) {\r
target_raw[TEMPSENSOR_HOTEND_0] = 0;\r
analogWrite(HEATER_0_PIN, 0);\r
- Serial.println("!! Temperature extruder 0 switched off. MINTEMP triggered !!");\r
+ SERIAL_ERRORLN("Temperature extruder 0 switched off. MINTEMP triggered !!");\r
kill();\r
}\r
#endif\r
if(current_raw[TEMPSENSOR_HOTEND_1] <= minttemp_1) {\r
target_raw[TEMPSENSOR_HOTEND_1] = 0;\r
analogWrite(HEATER_2_PIN, 0);\r
- Serial.println("!! Temperature extruder 1 switched off. MINTEMP triggered !!");\r
+ SERIAL_ERRORLN("Temperature extruder 1 switched off. MINTEMP triggered !!");\r
kill();\r
}\r
#endif\r
if(current_raw[1] <= bed_minttemp) {\r
target_raw[1] = 0;\r
WRITE(HEATER_1_PIN, 0);\r
- Serial.println("!! Temperatur heated bed switched off. MINTEMP triggered !!");\r
+ SERIAL_ERRORLN("Temperatur heated bed switched off. MINTEMP triggered !!");\r
kill();\r
}\r
#endif\r
if(current_raw[1] >= bed_maxttemp) {\r
target_raw[1] = 0;\r
WRITE(HEATER_1_PIN, 0);\r
- Serial.println("!! Temperature heated bed switched off. MAXTEMP triggered !!");\r
+ SERIAL_ERRORLN("Temperature heated bed switched off. MAXTEMP triggered !!");\r
kill();\r
}\r
#endif\r
}break;\r
#endif\r
default: \r
- Serial.println('NEVER say never');\r
+ SERIAL_ERRORLN("Something is wrong in the MenuStructure.");\r
break;\r
}\r
}\r
{\r
force_lcd_update=true;\r
oldcardstatus=CARDINSERTED;\r
- //Serial.println("SD CHANGE");\r
+ //Serial.println("echo: SD CHANGE");\r
if(CARDINSERTED)\r
{\r
initsd();\r
#ifdef RESET_MANUAL
LCD_MESSAGE("Please Reset!");
- ECHOLN("echo_: Something is wrong, please turn off the printer.");
+ SERIAL_ERRORLN("Something is wrong, please turn off the printer.");
#else
LCD_MESSAGE("Timeout, resetting!");
#endif