diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index b437bfb01f..722cb9642d 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -61,11 +61,11 @@ const bool ENDSTOPS_INVERTING = true; // set to true to invert the logic of the #define ULTIPANEL #define ULTIPANEL #ifdef ULTIPANEL - //#define NEWPANEL //enable this if you have a click-encoder panel - #define SDSUPPORT - #define ULTRA_LCD - #define LCD_WIDTH 20 -#define LCD_HEIGHT 4 + //#define NEWPANEL //enable this if you have a click-encoder panel + #define SDSUPPORT + #define ULTRA_LCD + #define LCD_WIDTH 20 + #define LCD_HEIGHT 4 #else //no panel but just lcd #ifdef ULTRA_LCD #define LCD_WIDTH 16 @@ -251,4 +251,8 @@ const int dropsegments=5; //everything with this number of steps will be ignore #define BLOCK_BUFFER_SIZE 16 // maximize block buffer #endif +//The ASCII buffer for recieving from the serial: +#define MAX_CMD_SIZE 96 +#define BUFSIZE 4 + #endif //__CONFIGURATION_H diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 6c2c6c87a4..5a489ec522 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -107,68 +107,82 @@ char version_string[] = "1.0.0 Alpha 1"; //Stepper Movement Variables -const char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'}; -float destination[NUM_AXIS] = { 0.0, 0.0, 0.0, 0.0}; -float current_position[NUM_AXIS] = { 0.0, 0.0, 0.0, 0.0}; -float offset[3] = {0.0, 0.0, 0.0}; -bool home_all_axis = true; -float feedrate = 1500.0, next_feedrate, saved_feedrate; -long gcode_N, gcode_LastN; +//=========================================================================== +//=============================imported variables============================ +//=========================================================================== +extern float HeaterPower; +//public variables float homing_feedrate[] = HOMING_FEEDRATE; bool axis_relative_modes[] = AXIS_RELATIVE_MODES; - -bool relative_mode = false; //Determines Absolute or Relative Coordinates -bool relative_mode_e = false; //Determines Absolute or Relative E Codes while in Absolute Coordinates mode. E is always relative in Relative Coordinates mode. - -uint8_t fanpwm=0; - volatile int feedmultiply=100; //100->1 200->2 int saved_feedmultiply; volatile bool feedmultiplychanged=false; +//=========================================================================== +//=============================private variables============================= +//=========================================================================== +const char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'}; +static float destination[NUM_AXIS] = { 0.0, 0.0, 0.0, 0.0}; +static float current_position[NUM_AXIS] = { 0.0, 0.0, 0.0, 0.0}; +static float offset[3] = {0.0, 0.0, 0.0}; +static bool home_all_axis = true; +static float feedrate = 1500.0, next_feedrate, saved_feedrate; +static long gcode_N, gcode_LastN; + + + +static bool relative_mode = false; //Determines Absolute or Relative Coordinates +static bool relative_mode_e = false; //Determines Absolute or Relative E Codes while in Absolute Coordinates mode. E is always relative in Relative Coordinates mode. + +static uint8_t fanpwm=0; + + // comm variables -#define MAX_CMD_SIZE 96 -#define BUFSIZE 4 -char cmdbuffer[BUFSIZE][MAX_CMD_SIZE]; -bool fromsd[BUFSIZE]; -int bufindr = 0; -int bufindw = 0; -int buflen = 0; -int i = 0; -char serial_char; -int serial_count = 0; -boolean comment_mode = false; -char *strchr_pointer; // just a pointer to find chars in the cmd string like X, Y, Z, E, etc -extern float HeaterPower; + +static char cmdbuffer[BUFSIZE][MAX_CMD_SIZE]; +static bool fromsd[BUFSIZE]; +static int bufindr = 0; +static int bufindw = 0; +static int buflen = 0; +static int i = 0; +static char serial_char; +static int serial_count = 0; +static boolean comment_mode = false; +static char *strchr_pointer; // just a pointer to find chars in the cmd string like X, Y, Z, E, etc const int sensitive_pins[] = SENSITIVE_PINS; // Sensitive pin list for M42 -float tt = 0, bt = 0; +static float tt = 0, bt = 0; //Inactivity shutdown variables -unsigned long previous_millis_cmd = 0; -unsigned long max_inactive_time = 0; -unsigned long stepper_inactive_time = 0; +static unsigned long previous_millis_cmd = 0; +static unsigned long max_inactive_time = 0; +static unsigned long stepper_inactive_time = 0; + +static unsigned long starttime=0; +static unsigned long stoptime=0; -unsigned long starttime=0; -unsigned long stoptime=0; #ifdef SDSUPPORT - Sd2Card card; - SdVolume volume; - SdFile root; - SdFile file; - uint32_t filesize = 0; - uint32_t sdpos = 0; - bool sdmode = false; - bool sdactive = false; - bool savetosd = false; - int16_t n; - unsigned long autostart_atmillis=0; + static Sd2Card card; + static SdVolume volume; + static SdFile root; + static SdFile file; + static uint32_t filesize = 0; + static uint32_t sdpos = 0; + static bool sdmode = false; + static bool sdactive = false; + static bool savetosd = false; + static int16_t n; + static unsigned long autostart_atmillis=0; - bool autostart_stilltocheck=true; //the sd start is delayed, because otherwise the serial cannot answer fast enought to make contact with the hostsoftware. - + static bool autostart_stilltocheck=true; //the sd start is delayed, because otherwise the serial cannot answer fast enought to make contact with the hostsoftware. +#endif //SDSUPPORT +//=========================================================================== +//=============================ROUTINES============================= +//=========================================================================== +#ifdef SDSUPPORT void initsd() { sdactive = false; @@ -223,6 +237,65 @@ unsigned long stoptime=0; SERIAL_ERRORLN("error writing to file"); } } + + + void checkautostart(bool force) + { + //this is to delay autostart and hence the initialisaiton of the sd card to some seconds after the normal init, so the device is available quick after a reset + if(!force) + { + if(!autostart_stilltocheck) + return; + if(autostart_atmillis 0) + { + for(int i=0;i<(int)strlen((char*)p.name);i++) + p.name[i]=tolower(p.name[i]); + //Serial.print((char*)p.name); + //Serial.print(" "); + //Serial.println(autoname); + if(p.name[9]!='~') //skip safety copies + if(strncmp((char*)p.name,autoname,5)==0) + { + char cmd[30]; + + sprintf(cmd,"M23 %s",autoname); + //sprintf(cmd,"M115"); + //enquecommand("G92 Z0"); + //enquecommand("G1 Z10 F2000"); + //enquecommand("G28 X-105 Y-105"); + enquecommand(cmd); + enquecommand("M24"); + found=true; + } + } + if(!found) + lastnr=-1; + else + lastnr++; + } +#else //NO SD SUPORT + inline void checkautostart(bool x){}; + #endif //SDSUPPORT @@ -272,66 +345,6 @@ void setup() tp_init(); // Initialize temperature loop } -#ifdef SDSUPPORT - -void checkautostart(bool force) -{ -//this is to delay autostart and hence the initialisaiton of the sd card to some seconds after the normal init, so the device is available quick after a reset - if(!force) - { - if(!autostart_stilltocheck) - return; - if(autostart_atmillis 0) - { - for(int i=0;i<(int)strlen((char*)p.name);i++) - p.name[i]=tolower(p.name[i]); - //Serial.print((char*)p.name); - //Serial.print(" "); - //Serial.println(autoname); - if(p.name[9]!='~') //skip safety copies - if(strncmp((char*)p.name,autoname,5)==0) - { - char cmd[30]; - - sprintf(cmd,"M23 %s",autoname); - //sprintf(cmd,"M115"); - //enquecommand("G92 Z0"); - //enquecommand("G1 Z10 F2000"); - //enquecommand("G28 X-105 Y-105"); - enquecommand(cmd); - enquecommand("M24"); - found=true; - } - } - if(!found) - lastnr=-1; - else - lastnr++; -} -#else //NO SD SUPORT - inline void checkautostart(bool x){} -#endif - void loop() {