diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 512f0176f..cd1490a1c 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -197,7 +197,16 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th //#define ULTRA_LCD //general lcd support, also 16x2 //#define SDSUPPORT // Enable SD Card Support in Hardware Console -#define ULTIPANEL +//#define ULTIMAKERCONTROLLER //as available from the ultimaker online store. +//#define ULTIPANEL //the ultipanel as on thingiverse + + +#ifdef ULTIMAKERCONTROLLER //automatic expansion + #define ULTIPANEL + #define NEWPANEL +#endif + + #ifdef ULTIPANEL // #define NEWPANEL //enable this if you have a click-encoder panel #define SDSUPPORT diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 88fb349af..8be47f8b7 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -609,7 +609,7 @@ void process_commands() feedrate = 0.0; home_all_axis = !((code_seen(axis_codes[0])) || (code_seen(axis_codes[1])) || (code_seen(axis_codes[2]))); #ifdef QUICK_HOME - if( code_seen(axis_codes[X_AXIS]) && code_seen(axis_codes[Y_AXIS]) ) //first diagonal move + if((home_all_axis)||( code_seen(axis_codes[X_AXIS]) && code_seen(axis_codes[Y_AXIS])) ) //first diagonal move { current_position[X_AXIS] = 0;current_position[Y_AXIS] = 0; @@ -1100,6 +1100,12 @@ void process_commands() SERIAL_PROTOCOLLN(""); break; + case 120: // M120 + enable_endstops(false) ; + break; + case 121: // M121 + enable_endstops(true) ; + break; case 119: // M119 #if (X_MIN_PIN > -1) SERIAL_PROTOCOLPGM(MSG_X_MIN); diff --git a/Marlin/language.h b/Marlin/language.h index 0178e21c2..4747ce626 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -29,6 +29,8 @@ #define MSG_MOVE_AXIS " Move Axis \x7E" #define MSG_SPEED " Speed:" #define MSG_NOZZLE " \002Nozzle:" + #define MSG_NOZZLE1 " \002Nozzle2:" + #define MSG_NOZZLE2 " \002Nozzle3:" #define MSG_BED " \002Bed:" #define MSG_FAN_SPEED " Fan speed:" #define MSG_FLOW " Flow:" @@ -174,6 +176,8 @@ #define MSG_MOVE_AXIS " Achsen verfahren \x7E" #define MSG_SPEED " Geschw:" #define MSG_NOZZLE " \002Duese:" + #define MSG_NOZZLE1 " \002Duese2:" + #define MSG_NOZZLE2 " \002Duese3:" #define MSG_BED " \002Bett:" #define MSG_FAN_SPEED " Luefter geschw.:" #define MSG_FLOW " Fluss:" @@ -296,4 +300,4 @@ #define MSG_ERR_LONG_EXTRUDE_STOP " too long extrusion prevented" #endif -#endif // ifndef LANGUAGE_H +#endif // ifndef LANGUAGE_H diff --git a/Marlin/pins.h b/Marlin/pins.h index ced9b350f..0d6b6022e 100644 --- a/Marlin/pins.h +++ b/Marlin/pins.h @@ -729,10 +729,18 @@ #define LCD_PINS_D7 19 //encoder rotation values - #define encrot0 0 - #define encrot1 2 - #define encrot2 3 - #define encrot3 1 + #ifndef ULTIMAKERCONTROLLER + #define encrot0 0 + #define encrot1 2 + #define encrot2 3 + #define encrot3 1 + #else + #define encrot0 0 + #define encrot1 1 + #define encrot2 3 + #define encrot3 2 + + #endif #define SDCARDDETECT -1 //bits in the shift register that carry the buttons for: diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index 29be5c6d9..85e9bbb98 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -85,7 +85,7 @@ volatile char count_direction[NUM_AXIS] = { 1, 1, 1, 1}; #ifdef ENDSTOPS_ONLY_FOR_HOMING #define CHECK_ENDSTOPS if(check_endstops) #else - #define CHECK_ENDSTOPS + #define CHECK_ENDSTOPS if(check_endstops) #endif // intRes = intIn1 * intIn2 >> 16 diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index a8ec619a2..783aa232d 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -710,7 +710,7 @@ void max_temp_error(uint8_t e) { disable_heater(); if(IsStopped() == false) { SERIAL_ERROR_START; - SERIAL_ERRORLN(e); + SERIAL_ERRORLN((int)e); SERIAL_ERRORLNPGM(": Extruder switched off. MAXTEMP triggered !"); } } @@ -719,13 +719,15 @@ void min_temp_error(uint8_t e) { disable_heater(); if(IsStopped() == false) { SERIAL_ERROR_START; - SERIAL_ERRORLN(e); + SERIAL_ERRORLN((int)e); SERIAL_ERRORLNPGM(": Extruder switched off. MINTEMP triggered !"); } } void bed_max_temp_error(void) { +#if HEATER_BED_PIN > -1 WRITE(HEATER_BED_PIN, 0); +#endif if(IsStopped() == false) { SERIAL_ERROR_START; SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !!"); diff --git a/Marlin/temperature.h b/Marlin/temperature.h index e122a31f9..1848c703d 100644 --- a/Marlin/temperature.h +++ b/Marlin/temperature.h @@ -129,6 +129,8 @@ FORCE_INLINE bool isCoolingBed() { #define setTargetHotend1(_celsius) setTargetHotend((_celsius), 1) #define isHeatingHotend1() isHeatingHotend(1) #define isCoolingHotend1() isCoolingHotend(1) +#else +#define setTargetHotend1(_celsius) do{}while(0) #endif #if EXTRUDERS > 2 #define degHotend2() degHotend(2) @@ -136,6 +138,8 @@ FORCE_INLINE bool isCoolingBed() { #define setTargetHotend2(_celsius) setTargetHotend((_celsius), 2) #define isHeatingHotend2() isHeatingHotend(2) #define isCoolingHotend2() isCoolingHotend(2) +#else +#define setTargetHotend2(_celsius) do{}while(0) #endif #if EXTRUDERS > 3 #error Invalid number of extruders diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index e3888903f..c6cd15bb0 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -95,6 +95,7 @@ FORCE_INLINE void clear() void lcd_init() { //beep(); + byte Degree[8] = { B01100, @@ -322,6 +323,8 @@ void MainMenu::showStatus() lcd.setCursor(0,0);lcdprintPGM("\002---/---\001 "); #if defined BED_USES_THERMISTOR || defined BED_USES_AD595 lcd.setCursor(10,0);lcdprintPGM("B---/---\001 "); + #elif EXTRUDERS > 1 + lcd.setCursor(10,0);lcdprintPGM("\002---/---\001 "); #endif } @@ -356,6 +359,23 @@ void MainMenu::showStatus() lcd.print(ftostr3(targetBed)); oldtargetBed=targetBed; } + #elif EXTRUDERS > 1 + static int olddegHotEnd1=-1; + static int oldtargetHotEnd1=-1; + int tHotEnd1=intround(degHotend1()); + if((tHotEnd1!=olddegHotEnd1)||force_lcd_update) + { + lcd.setCursor(11,0); + lcd.print(ftostr3(tHotEnd1)); + olddegHotEnd1=tHotEnd1; + } + int ttHotEnd1=intround(degTargetHotend1()); + if((ttHotEnd1!=oldtargetHotEnd1)||force_lcd_update) + { + lcd.setCursor(15,0); + lcd.print(ftostr3(ttHotEnd1)); + oldtargetHotEnd1=ttHotEnd1; + } #endif //starttime=2; static uint16_t oldtime=0; @@ -430,10 +450,7 @@ void MainMenu::showStatus() if(force_lcd_update) //initial display of content { encoderpos=feedmultiply; - lcd.setCursor(0,0);lcdprintPGM("\002123/567\001 "); - #if defined BED_USES_THERMISTOR || defined BED_USES_AD595 - lcd.setCursor(10,0);lcdprintPGM("B123/567\001 "); - #endif + lcd.setCursor(0,0);lcdprintPGM("\002---/---\001 "); } int tHotEnd0=intround(degHotend0()); @@ -520,7 +537,7 @@ void MainMenu::showPrepare() beepshort(); ); break; case ItemP_cooldown: - MENUITEM( lcdprintPGM(MSG_COOLDOWN) , BLOCK;setTargetHotend0(0);setTargetBed(0);beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_COOLDOWN) , BLOCK;setTargetHotend0(0);setTargetHotend1(0);setTargetHotend2(0);setTargetBed(0);beepshort(); ) ; break; // case ItemP_extrude: // MENUITEM( lcdprintPGM(" Extrude") , BLOCK;enquecommand("G92 E0");enquecommand("G1 F700 E50");beepshort(); ) ; @@ -923,12 +940,18 @@ void MainMenu::showTune() // enum { - ItemCT_exit,ItemCT_nozzle, + ItemCT_exit,ItemCT_nozzle0, #ifdef AUTOTEMP ItemCT_autotempactive, ItemCT_autotempmin,ItemCT_autotempmax,ItemCT_autotempfact, #endif -#if (HEATER_BED_PIN > -1) +#if EXTRUDERS > 1 + ItemCT_nozzle1, +#endif +#if EXTRUDERS > 2 + ItemCT_nozzle2, +#endif +#if defined BED_USES_THERMISTOR || BED_USES_AD595 ItemCT_bed, #endif ItemCT_fan, @@ -946,7 +969,7 @@ void MainMenu::showControlTemp() case ItemCT_exit: MENUITEM( lcdprintPGM(MSG_CONTROL) , BLOCK;status=Main_Control;beepshort(); ) ; break; - case ItemCT_nozzle: + case ItemCT_nozzle0: { if(force_lcd_update) { @@ -980,8 +1003,80 @@ void MainMenu::showControlTemp() } }break; - #ifdef AUTOTEMP - case ItemCT_autotempmin: + #if EXTRUDERS > 1 + case ItemCT_nozzle1: + { + if(force_lcd_update) + { + lcd.setCursor(0,line);lcdprintPGM(MSG_NOZZLE1); + lcd.setCursor(13,line);lcd.print(ftostr3(intround(degTargetHotend1()))); + } + + if((activeline!=line) ) + break; + + if(CLICKED) + { + linechanging=!linechanging; + if(linechanging) + { + encoderpos=intround(degTargetHotend1()); + } + else + { + setTargetHotend1(encoderpos); + encoderpos=activeline*lcdslow; + beepshort(); + } + BLOCK; + } + if(linechanging) + { + if(encoderpos<0) encoderpos=0; + if(encoderpos>260) encoderpos=260; + lcd.setCursor(13,line);lcd.print(itostr3(encoderpos)); + } + + }break; + #endif + #if EXTRUDERS > 2 + case ItemCT_nozzle2: + { + if(force_lcd_update) + { + lcd.setCursor(0,line);lcdprintPGM(MSG_NOZZLE2); + lcd.setCursor(13,line);lcd.print(ftostr3(intround(degTargetHotend2()))); + } + + if((activeline!=line) ) + break; + + if(CLICKED) + { + linechanging=!linechanging; + if(linechanging) + { + encoderpos=intround(degTargetHotend2()); + } + else + { + setTargetHotend1(encoderpos); + encoderpos=activeline*lcdslow; + beepshort(); + } + BLOCK; + } + if(linechanging) + { + if(encoderpos<0) encoderpos=0; + if(encoderpos>260) encoderpos=260; + lcd.setCursor(13,line);lcd.print(itostr3(encoderpos)); + } + + }break; + #endif + #ifdef AUTOTEMP + case ItemCT_autotempmin: { if(force_lcd_update) { @@ -1015,7 +1110,7 @@ void MainMenu::showControlTemp() } }break; - case ItemCT_autotempmax: + case ItemCT_autotempmax: { if(force_lcd_update) { @@ -1049,7 +1144,7 @@ void MainMenu::showControlTemp() } }break; - case ItemCT_autotempfact: + case ItemCT_autotempfact: { if(force_lcd_update) { @@ -1083,7 +1178,7 @@ void MainMenu::showControlTemp() } }break; - case ItemCT_autotempactive: + case ItemCT_autotempactive: { if(force_lcd_update) { @@ -1110,9 +1205,9 @@ void MainMenu::showControlTemp() } }break; - #endif //autotemp - #if (HEATER_BED_PIN > -1) - case ItemCT_bed: + #endif //autotemp + #if defined BED_USES_THERMISTOR || BED_USES_AD595 + case ItemCT_bed: { if(force_lcd_update) { @@ -1145,8 +1240,8 @@ void MainMenu::showControlTemp() lcd.setCursor(13,line);lcd.print(itostr3(encoderpos)); } }break; - #endif - case ItemCT_fan: + #endif + case ItemCT_fan: { if(force_lcd_update) { @@ -1181,8 +1276,8 @@ void MainMenu::showControlTemp() } }break; - #ifdef PIDTEMP - case ItemCT_PID_P: + #ifdef PIDTEMP + case ItemCT_PID_P: { if(force_lcd_update) { @@ -1252,7 +1347,7 @@ void MainMenu::showControlTemp() } }break; - case ItemCT_PID_D: + case ItemCT_PID_D: { if(force_lcd_update) { @@ -1324,8 +1419,8 @@ void MainMenu::showControlTemp() } } - #endif #endif + #endif break; default: break; @@ -2080,6 +2175,7 @@ void MainMenu::update() { force_lcd_update=true; oldcardstatus=CARDINSERTED; + lcd_init(); // to maybe revive the lcd if static electricty killed it. //Serial.println("echo: SD CHANGE"); if(CARDINSERTED) { @@ -2282,4 +2378,4 @@ char *ftostr52(const float &x) #endif //ULTRA_LCD - +