chiark / gitweb /
overworked autotemp, removed one layer of nesting from the ultralcd.
authorBernhard <bkubicek@x201.(none)>
Sun, 4 Dec 2011 08:48:53 +0000 (09:48 +0100)
committerBernhard <bkubicek@x201.(none)>
Sun, 4 Dec 2011 08:48:53 +0000 (09:48 +0100)
Marlin/Marlin.pde
Marlin/cardreader.pde
Marlin/planner.cpp
Marlin/temperature.h
Marlin/ultralcd.pde

index 39f42f0ac6b67de035ef1f48c2d1c3647bf072ea..b0e375fd36451d4ac3f839c4f50f4533932cfd87 100644 (file)
@@ -670,6 +670,7 @@ FORCE_INLINE void process_commands()
       SERIAL_ECHO_START;
       SERIAL_ECHOLN(time);
       LCD_MESSAGE(time);
+      autotempShutdown();
     }
     break;
     case 42: //M42 -Change pin status via gcode
index 03f3f46386109c001308a38562a1affeff11676d..d355ea3ef3441205dca415491af59ad2b8869e7a 100644 (file)
@@ -436,5 +436,6 @@ void CardReader::printingHasFinished()
  {
    finishAndDisableSteppers();
  }
+ autotempShutdown();
 }
 #endif //SDSUPPORT
\ No newline at end of file
index 1674fcc7d9cba202757d670dc917d6065a754597..bef74a2e89f9d80a833045bf3fb495fb58f96017 100644 (file)
@@ -91,7 +91,7 @@ static float previous_nominal_speed; // Nominal speed of previous path line segm
 #ifdef AUTOTEMP
     float autotemp_max=250;
     float autotemp_min=210;
-    float autotemp_factor=1;
+    float autotemp_factor=0.1;
     bool autotemp_enabled=false;
 #endif
 
index ba1043b6dacd0c9c026db0dba2dad9f2a3cdb519..e9395e008cc26e1aed5b6643d74fdbcd513f8352 100644 (file)
@@ -108,6 +108,16 @@ FORCE_INLINE float isCoolingHotend(uint8_t extruder){
 };\r
 FORCE_INLINE bool isCoolingBed() {return target_raw[TEMPSENSOR_BED] < current_raw[TEMPSENSOR_BED];};\r
 \r
+FORCE_INLINE void autotempShutdown(){\r
+ #ifdef AUTOTEMP\r
+ if(autotemp_enabled)\r
+ {\r
+  autotemp_enabled=false;\r
+  if(degTargetHotend0()>autotemp_min)\r
+    setTargetHotend0(0);\r
+ }\r
+ #endif\r
+}\r
 void disable_heater();\r
 void setWatch();\r
 void updatePID();\r
index 4ca93aa0c7d1fbf36b01111a33769a33d4f43f61..54ea809df5c98a2b667a90d10a170f500a7e3f37 100644 (file)
@@ -503,31 +503,32 @@ void MainMenu::showTune()
         lcd.setCursor(13,line);lcd.print(ftostr3(feedmultiply));\r
       }\r
       \r
-      if((activeline==line) )\r
+      if((activeline!=line) )\r
+        break;\r
+      \r
+      if(CLICKED) //nalogWrite(FAN_PIN,  fanpwm);\r
       {\r
-        if(CLICKED) //nalogWrite(FAN_PIN,  fanpwm);\r
+        linechanging=!linechanging;\r
+        if(linechanging)\r
         {\r
-          linechanging=!linechanging;\r
-          if(linechanging)\r
-          {\r
-              encoderpos=feedmultiply;\r
-          }\r
-          else\r
-          {\r
-            encoderpos=activeline*lcdslow;\r
-            beepshort();\r
-          }\r
-          BLOCK;\r
+            encoderpos=feedmultiply;\r
         }\r
-        if(linechanging)\r
+        else\r
         {\r
-          if(encoderpos<1) encoderpos=1;\r
-          if(encoderpos>400) encoderpos=400;\r
-          feedmultiply = encoderpos;\r
-          feedmultiplychanged=true;\r
-          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+          encoderpos=activeline*lcdslow;\r
+          beepshort();\r
         }\r
+        BLOCK;\r
+      }\r
+      if(linechanging)\r
+      {\r
+        if(encoderpos<1) encoderpos=1;\r
+        if(encoderpos>400) encoderpos=400;\r
+        feedmultiply = encoderpos;\r
+        feedmultiplychanged=true;\r
+        lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
       }\r
+      \r
     }break;\r
     case ItemT_nozzle:\r
       {\r
@@ -537,29 +538,29 @@ void MainMenu::showTune()
           lcd.setCursor(13,line);lcd.print(ftostr3(intround(degTargetHotend0())));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=intround(degTargetHotend0());\r
-            }\r
-            else\r
-            {\r
-              setTargetHotend0(encoderpos);\r
-              encoderpos=activeline*lcdslow;\r
-              beepshort();\r
-            }\r
-            BLOCK;\r
+              encoderpos=intround(degTargetHotend0());\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<0) encoderpos=0;\r
-            if(encoderpos>260) encoderpos=260;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+            setTargetHotend0(encoderpos);\r
+            encoderpos=activeline*lcdslow;\r
+            beepshort();\r
           }\r
+          BLOCK;\r
+        }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<0) encoderpos=0;\r
+          if(encoderpos>260) encoderpos=260;\r
+          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
         }\r
       }break;\r
       \r
@@ -571,31 +572,32 @@ void MainMenu::showTune()
           lcd.setCursor(13,line);lcd.print(ftostr3(fanpwm));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED) //nalogWrite(FAN_PIN,  fanpwm);\r
         {\r
-          if(CLICKED) //nalogWrite(FAN_PIN,  fanpwm);\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=fanpwm;\r
-            }\r
-            else\r
-            {\r
-              encoderpos=activeline*lcdslow;\r
-              beepshort();\r
-            }\r
-            BLOCK;\r
+              encoderpos=fanpwm;\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<0) encoderpos=0;\r
-            if(encoderpos>255) encoderpos=255;\r
-            fanpwm=encoderpos;\r
-              analogWrite(FAN_PIN,  fanpwm);\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+            encoderpos=activeline*lcdslow;\r
+            beepshort();\r
           }\r
+          BLOCK;\r
         }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<0) encoderpos=0;\r
+          if(encoderpos>255) encoderpos=255;\r
+          fanpwm=encoderpos;\r
+            analogWrite(FAN_PIN,  fanpwm);\r
+          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+        }\r
+        \r
       }break;\r
       case ItemT_flow://axis_steps_per_unit[i] = code_value();\r
          {\r
@@ -605,34 +607,35 @@ void MainMenu::showTune()
           lcd.setCursor(13,line);lcd.print(itostr4(axis_steps_per_unit[3]));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=(int)axis_steps_per_unit[3];\r
-            }\r
-            else\r
-            {\r
-              float factor=float(encoderpos)/float(axis_steps_per_unit[3]);\r
-              position[E_AXIS]=lround(position[E_AXIS]*factor);\r
-              //current_position[3]*=factor;\r
-              axis_steps_per_unit[E_AXIS]= encoderpos;\r
-              encoderpos=activeline*lcdslow;\r
-                \r
-            }\r
-            BLOCK;\r
-            beepshort();\r
+              encoderpos=(int)axis_steps_per_unit[3];\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<5) encoderpos=5;\r
-            if(encoderpos>9999) encoderpos=9999;\r
-            lcd.setCursor(13,line);lcd.print(itostr4(encoderpos));\r
+            float factor=float(encoderpos)/float(axis_steps_per_unit[3]);\r
+            position[E_AXIS]=lround(position[E_AXIS]*factor);\r
+            //current_position[3]*=factor;\r
+            axis_steps_per_unit[E_AXIS]= encoderpos;\r
+            encoderpos=activeline*lcdslow;\r
+              \r
           }\r
+          BLOCK;\r
+          beepshort();\r
         }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<5) encoderpos=5;\r
+          if(encoderpos>9999) encoderpos=9999;\r
+          lcd.setCursor(13,line);lcd.print(itostr4(encoderpos));\r
+        }\r
+        \r
       }break; \r
     default:   \r
       break;\r
@@ -688,30 +691,31 @@ void MainMenu::showControlTemp()
           lcd.setCursor(13,line);lcd.print(ftostr3(intround(degTargetHotend0())));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=intround(degTargetHotend0());\r
-            }\r
-            else\r
-            {\r
-              setTargetHotend0(encoderpos);\r
-              encoderpos=activeline*lcdslow;\r
-              beepshort();\r
-            }\r
-            BLOCK;\r
+              encoderpos=intround(degTargetHotend0());\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<0) encoderpos=0;\r
-            if(encoderpos>260) encoderpos=260;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+            setTargetHotend0(encoderpos);\r
+            encoderpos=activeline*lcdslow;\r
+            beepshort();\r
           }\r
+          BLOCK;\r
+        }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<0) encoderpos=0;\r
+          if(encoderpos>260) encoderpos=260;\r
+          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
         }\r
+        \r
       }break;\r
       #ifdef AUTOTEMP\r
       case ItemCT_autotempmin:\r
@@ -719,33 +723,34 @@ void MainMenu::showControlTemp()
         if(force_lcd_update)\r
         {\r
           lcd.setCursor(0,line);lcdprintPGM(" \002 Min:");\r
-          lcd.setCursor(13,line);lcd.print(ftostr3(autotemp_max));\r
+          lcd.setCursor(13,line);lcd.print(ftostr3(autotemp_min));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=intround(autotemp_max);\r
-            }\r
-            else\r
-            {\r
-              autotemp_max=encoderpos;\r
-              encoderpos=activeline*lcdslow;\r
-              beepshort();\r
-            }\r
-            BLOCK;\r
+              encoderpos=intround(autotemp_min);\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<0) encoderpos=0;\r
-            if(encoderpos>260) encoderpos=260;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+            autotemp_min=encoderpos;\r
+            encoderpos=activeline*lcdslow;\r
+            beepshort();\r
           }\r
+          BLOCK;\r
+        }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<0) encoderpos=0;\r
+          if(encoderpos>260) encoderpos=260;\r
+          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
         }\r
+        \r
       }break;  \r
       case ItemCT_autotempmax:\r
       {\r
@@ -755,30 +760,31 @@ void MainMenu::showControlTemp()
           lcd.setCursor(13,line);lcd.print(ftostr3(autotemp_max));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=intround(autotemp_max);\r
-            }\r
-            else\r
-            {\r
-              autotemp_max=encoderpos;\r
-              encoderpos=activeline*lcdslow;\r
-              beepshort();\r
-            }\r
-            BLOCK;\r
+              encoderpos=intround(autotemp_max);\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<0) encoderpos=0;\r
-            if(encoderpos>260) encoderpos=260;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+            autotemp_max=encoderpos;\r
+            encoderpos=activeline*lcdslow;\r
+            beepshort();\r
           }\r
+          BLOCK;\r
         }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<0) encoderpos=0;\r
+          if(encoderpos>260) encoderpos=260;\r
+          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+        }\r
+        \r
       }break;  \r
       case ItemCT_autotempfact:\r
       {\r
@@ -788,30 +794,31 @@ void MainMenu::showControlTemp()
           lcd.setCursor(13,line);lcd.print(ftostr32(autotemp_factor));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=intround(autotemp_factor*100);\r
-            }\r
-            else\r
-            {\r
-              autotemp_max=encoderpos;\r
-              encoderpos=activeline*lcdslow;\r
-              beepshort();\r
-            }\r
-            BLOCK;\r
+              encoderpos=intround(autotemp_factor*100);\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<0) encoderpos=0;\r
-            if(encoderpos>99) encoderpos=99;\r
-            lcd.setCursor(13,line);lcd.print(ftostr32(encoderpos/100.));\r
+            autotemp_max=encoderpos;\r
+            encoderpos=activeline*lcdslow;\r
+            beepshort();\r
           }\r
+          BLOCK;\r
+        }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<0) encoderpos=0;\r
+          if(encoderpos>99) encoderpos=99;\r
+          lcd.setCursor(13,line);lcd.print(ftostr32(encoderpos/100.));\r
         }\r
+        \r
       }break;\r
       case ItemCT_autotempactive:\r
       {\r
@@ -819,20 +826,26 @@ void MainMenu::showControlTemp()
         {\r
           lcd.setCursor(0,line);lcdprintPGM(" Autotemp:");\r
           lcd.setCursor(13,line);\r
-         if(autotemp_enabled)\r
-           lcdprintPGM("On");\r
-         else\r
-           lcdprintPGM("Off");\r
+          if(autotemp_enabled)\r
+            lcdprintPGM("On");\r
+          else\r
+            lcdprintPGM("Off");\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
-          {\r
-            autotemp_enabled=!autotemp_enabled;\r
-            BLOCK;\r
-          }\r
+          autotemp_enabled=!autotemp_enabled;\r
+          lcd.setCursor(13,line);\r
+          if(autotemp_enabled)\r
+            lcdprintPGM("On ");\r
+          else\r
+            lcdprintPGM("Off");\r
+          BLOCK;\r
         }\r
+        \r
       }break;  \r
       #endif //autotemp\r
       case ItemCT_fan:\r
@@ -843,31 +856,32 @@ void MainMenu::showControlTemp()
           lcd.setCursor(13,line);lcd.print(ftostr3(fanpwm));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED) //nalogWrite(FAN_PIN,  fanpwm);\r
         {\r
-          if(CLICKED) //nalogWrite(FAN_PIN,  fanpwm);\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=fanpwm;\r
-            }\r
-            else\r
-            {\r
-              encoderpos=activeline*lcdslow;\r
-              beepshort();\r
-            }\r
-            BLOCK;\r
+              encoderpos=fanpwm;\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<0) encoderpos=0;\r
-            if(encoderpos>255) encoderpos=255;\r
-            fanpwm=encoderpos;\r
-              analogWrite(FAN_PIN,  fanpwm);\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+            encoderpos=activeline*lcdslow;\r
+            beepshort();\r
           }\r
+          BLOCK;\r
+        }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<0) encoderpos=0;\r
+          if(encoderpos>255) encoderpos=255;\r
+          fanpwm=encoderpos;\r
+            analogWrite(FAN_PIN,  fanpwm);\r
+          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
         }\r
+        \r
       }break;\r
       case ItemCT_PID_P: \r
       {\r
@@ -877,31 +891,32 @@ void MainMenu::showControlTemp()
           lcd.setCursor(13,line);lcd.print(itostr4(Kp));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=(int)Kp;\r
-            }\r
-            else\r
-            {\r
-              Kp= encoderpos;\r
-              encoderpos=activeline*lcdslow;\r
-                \r
-            }\r
-            BLOCK;\r
-            beepshort();\r
+              encoderpos=(int)Kp;\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<1) encoderpos=1;\r
-            if(encoderpos>9990) encoderpos=9990;\r
-            lcd.setCursor(13,line);lcd.print(itostr4(encoderpos));\r
+            Kp= encoderpos;\r
+            encoderpos=activeline*lcdslow;\r
+              \r
           }\r
+          BLOCK;\r
+          beepshort();\r
+        }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<1) encoderpos=1;\r
+          if(encoderpos>9990) encoderpos=9990;\r
+          lcd.setCursor(13,line);lcd.print(itostr4(encoderpos));\r
         }\r
+        \r
       }break;\r
     case ItemCT_PID_I: \r
       {\r
@@ -911,31 +926,32 @@ void MainMenu::showControlTemp()
           lcd.setCursor(13,line);lcd.print(ftostr51(Ki/PID_dT));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=(int)(Ki*10/PID_dT);\r
-            }\r
-            else\r
-            {\r
-              Ki= encoderpos/10.*PID_dT;\r
-              encoderpos=activeline*lcdslow;\r
-                \r
-            }\r
-            BLOCK;\r
-            beepshort();\r
+              encoderpos=(int)(Ki*10/PID_dT);\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<0) encoderpos=0;\r
-            if(encoderpos>9990) encoderpos=9990;\r
-            lcd.setCursor(13,line);lcd.print(ftostr51(encoderpos/10.));\r
+            Ki= encoderpos/10.*PID_dT;\r
+            encoderpos=activeline*lcdslow;\r
+              \r
           }\r
+          BLOCK;\r
+          beepshort();\r
         }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<0) encoderpos=0;\r
+          if(encoderpos>9990) encoderpos=9990;\r
+          lcd.setCursor(13,line);lcd.print(ftostr51(encoderpos/10.));\r
+        }\r
+        \r
       }break;\r
       case ItemCT_PID_D: \r
       {\r
@@ -945,31 +961,33 @@ void MainMenu::showControlTemp()
           lcd.setCursor(13,line);lcd.print(itostr4(Kd*PID_dT));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=(int)(Kd/5./PID_dT);\r
-            }\r
-            else\r
-            {\r
-              Kd= encoderpos;\r
-              encoderpos=activeline*lcdslow;\r
-                \r
-            }\r
-            BLOCK;\r
-            beepshort();\r
+              encoderpos=(int)(Kd/5./PID_dT);\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<0) encoderpos=0;\r
-            if(encoderpos>9990) encoderpos=9990;\r
-            lcd.setCursor(13,line);lcd.print(itostr4(encoderpos));\r
+            Kd= encoderpos;\r
+            encoderpos=activeline*lcdslow;\r
+              \r
           }\r
+          BLOCK;\r
+          beepshort();\r
+        }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<0) encoderpos=0;\r
+          if(encoderpos>9990) encoderpos=9990;\r
+          lcd.setCursor(13,line);lcd.print(itostr4(encoderpos));\r
         }\r
+       \r
       }break;   \r
     case ItemCT_PID_C: \r
       #ifdef PID_ADD_EXTRUSION_RATE\r
@@ -980,31 +998,32 @@ void MainMenu::showControlTemp()
           lcd.setCursor(13,line);lcd.print(itostr3(Kc));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=(int)Kc;\r
-            }\r
-            else\r
-            {\r
-              Kc= encoderpos;\r
-              encoderpos=activeline*lcdslow;\r
-                \r
-            }\r
-            BLOCK;\r
-            beepshort();\r
+              encoderpos=(int)Kc;\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<0) encoderpos=0;\r
-            if(encoderpos>990) encoderpos=990;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+            Kc= encoderpos;\r
+            encoderpos=activeline*lcdslow;\r
+              \r
           }\r
+          BLOCK;\r
+          beepshort();\r
         }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<0) encoderpos=0;\r
+          if(encoderpos>990) encoderpos=990;\r
+          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+        }\r
+        \r
       }\r
       #endif\r
       break;\r
@@ -1051,30 +1070,31 @@ void MainMenu::showControlMotion()
           lcd.setCursor(13,line);lcd.print(itostr3(acceleration/100));lcdprintPGM("00");\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=(int)acceleration/100;\r
-            }\r
-            else\r
-            {\r
-              acceleration= encoderpos*100;\r
-              encoderpos=activeline*lcdslow;\r
-            }\r
-            BLOCK;\r
-            beepshort();\r
+              encoderpos=(int)acceleration/100;\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<5) encoderpos=5;\r
-            if(encoderpos>990) encoderpos=990;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcdprintPGM("00");\r
+            acceleration= encoderpos*100;\r
+            encoderpos=activeline*lcdslow;\r
           }\r
+          BLOCK;\r
+          beepshort();\r
         }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<5) encoderpos=5;\r
+          if(encoderpos>990) encoderpos=990;\r
+          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcdprintPGM("00");\r
+        }\r
+        \r
       }break;\r
     case ItemCM_xyjerk: //max_xy_jerk\r
       {\r
@@ -1084,31 +1104,32 @@ void MainMenu::showControlMotion()
           lcd.setCursor(13,line);lcd.print(itostr3(max_xy_jerk));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=(int)max_xy_jerk;\r
-            }\r
-            else\r
-            {\r
-              max_xy_jerk= encoderpos;\r
-              encoderpos=activeline*lcdslow;\r
-                \r
-            }\r
-            BLOCK;\r
-            beepshort();\r
+              encoderpos=(int)max_xy_jerk;\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<1) encoderpos=1;\r
-            if(encoderpos>990) encoderpos=990;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+            max_xy_jerk= encoderpos;\r
+            encoderpos=activeline*lcdslow;\r
+              \r
           }\r
+          BLOCK;\r
+          beepshort();\r
         }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<1) encoderpos=1;\r
+          if(encoderpos>990) encoderpos=990;\r
+          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+        }\r
+        \r
       }break;\r
       \r
     case ItemCM_vmaxx:\r
@@ -1126,31 +1147,32 @@ void MainMenu::showControlMotion()
           lcd.setCursor(13,line);lcd.print(itostr3(max_feedrate[i-ItemCM_vmaxx]));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=(int)max_feedrate[i-ItemCM_vmaxx];\r
-            }\r
-            else\r
-            {\r
-              max_feedrate[i-ItemCM_vmaxx]= encoderpos;\r
-              encoderpos=activeline*lcdslow;\r
-                \r
-            }\r
-            BLOCK;\r
-            beepshort();\r
+              encoderpos=(int)max_feedrate[i-ItemCM_vmaxx];\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<1) encoderpos=1;\r
-            if(encoderpos>990) encoderpos=990;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+            max_feedrate[i-ItemCM_vmaxx]= encoderpos;\r
+            encoderpos=activeline*lcdslow;\r
+              \r
           }\r
+          BLOCK;\r
+          beepshort();\r
+        }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<1) encoderpos=1;\r
+          if(encoderpos>990) encoderpos=990;\r
+          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
         }\r
+        \r
       }break;\r
     \r
     case ItemCM_vmin:\r
@@ -1161,31 +1183,32 @@ void MainMenu::showControlMotion()
           lcd.setCursor(13,line);lcd.print(itostr3(minimumfeedrate));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=(int)(minimumfeedrate);\r
-            }\r
-            else\r
-            {\r
-              minimumfeedrate= encoderpos;\r
-              encoderpos=activeline*lcdslow;\r
-                \r
-            }\r
-            BLOCK;\r
-            beepshort();\r
+              encoderpos=(int)(minimumfeedrate);\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<0) encoderpos=0;\r
-            if(encoderpos>990) encoderpos=990;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+            minimumfeedrate= encoderpos;\r
+            encoderpos=activeline*lcdslow;\r
+              \r
           }\r
+          BLOCK;\r
+          beepshort();\r
+        }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<0) encoderpos=0;\r
+          if(encoderpos>990) encoderpos=990;\r
+          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
         }\r
+        \r
       }break;\r
     case ItemCM_vtravmin:\r
     {\r
@@ -1195,31 +1218,32 @@ void MainMenu::showControlMotion()
           lcd.setCursor(13,line);lcd.print(itostr3(mintravelfeedrate));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=(int)mintravelfeedrate;\r
-            }\r
-            else\r
-            {\r
-              mintravelfeedrate= encoderpos;\r
-              encoderpos=activeline*lcdslow;\r
-                \r
-            }\r
-            BLOCK;\r
-            beepshort();\r
+              encoderpos=(int)mintravelfeedrate;\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<0) encoderpos=0;\r
-            if(encoderpos>990) encoderpos=990;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
+            mintravelfeedrate= encoderpos;\r
+            encoderpos=activeline*lcdslow;\r
+              \r
           }\r
+          BLOCK;\r
+          beepshort();\r
+        }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<0) encoderpos=0;\r
+          if(encoderpos>990) encoderpos=990;\r
+          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));\r
         }\r
+        \r
       }break;\r
     \r
     case ItemCM_amaxx:      \r
@@ -1237,30 +1261,31 @@ void MainMenu::showControlMotion()
           lcd.setCursor(13,line);lcd.print(itostr3(max_acceleration_units_per_sq_second[i-ItemCM_amaxx]/100));lcdprintPGM("00");\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=(int)max_acceleration_units_per_sq_second[i-ItemCM_amaxx]/100;\r
-            }\r
-            else\r
-            {\r
-              max_acceleration_units_per_sq_second[i-ItemCM_amaxx]= encoderpos*100;\r
-              encoderpos=activeline*lcdslow;\r
-            }\r
-            BLOCK;\r
-            beepshort();\r
+              encoderpos=(int)max_acceleration_units_per_sq_second[i-ItemCM_amaxx]/100;\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<1) encoderpos=1;\r
-            if(encoderpos>990) encoderpos=990;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcdprintPGM("00");\r
+            max_acceleration_units_per_sq_second[i-ItemCM_amaxx]= encoderpos*100;\r
+            encoderpos=activeline*lcdslow;\r
           }\r
+          BLOCK;\r
+          beepshort();\r
+        }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<1) encoderpos=1;\r
+          if(encoderpos>990) encoderpos=990;\r
+          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcdprintPGM("00");\r
         }\r
+        \r
       }break;\r
     case ItemCM_aret://float retract_acceleration = 7000;\r
     {\r
@@ -1270,31 +1295,32 @@ void MainMenu::showControlMotion()
           lcd.setCursor(13,line);lcd.print(ftostr3(retract_acceleration/100));lcdprintPGM("00");\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=(int)retract_acceleration/100;\r
-            }\r
-            else\r
-            {\r
-              retract_acceleration= encoderpos*100;\r
-              encoderpos=activeline*lcdslow;\r
-                \r
-            }\r
-            BLOCK;\r
-            beepshort();\r
+              encoderpos=(int)retract_acceleration/100;\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<10) encoderpos=10;\r
-            if(encoderpos>990) encoderpos=990;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcdprintPGM("00");\r
+            retract_acceleration= encoderpos*100;\r
+            encoderpos=activeline*lcdslow;\r
+              \r
           }\r
+          BLOCK;\r
+          beepshort();\r
+        }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<10) encoderpos=10;\r
+          if(encoderpos>990) encoderpos=990;\r
+          lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcdprintPGM("00");\r
         }\r
+        \r
       }break;\r
     case ItemCM_esteps://axis_steps_per_unit[i] = code_value();\r
          {\r
@@ -1304,34 +1330,35 @@ void MainMenu::showControlMotion()
           lcd.setCursor(13,line);lcd.print(itostr4(axis_steps_per_unit[3]));\r
         }\r
         \r
-        if((activeline==line) )\r
+        if((activeline!=line) )\r
+          break;\r
+        \r
+        if(CLICKED)\r
         {\r
-          if(CLICKED)\r
+          linechanging=!linechanging;\r
+          if(linechanging)\r
           {\r
-            linechanging=!linechanging;\r
-            if(linechanging)\r
-            {\r
-               encoderpos=(int)axis_steps_per_unit[3];\r
-            }\r
-            else\r
-            {\r
-              float factor=float(encoderpos)/float(axis_steps_per_unit[3]);\r
-              position[E_AXIS]=lround(position[E_AXIS]*factor);\r
-              //current_position[3]*=factor;\r
-              axis_steps_per_unit[E_AXIS]= encoderpos;\r
-              encoderpos=activeline*lcdslow;\r
-                \r
-            }\r
-            BLOCK;\r
-            beepshort();\r
+              encoderpos=(int)axis_steps_per_unit[3];\r
           }\r
-          if(linechanging)\r
+          else\r
           {\r
-            if(encoderpos<5) encoderpos=5;\r
-            if(encoderpos>9999) encoderpos=9999;\r
-            lcd.setCursor(13,line);lcd.print(itostr4(encoderpos));\r
+            float factor=float(encoderpos)/float(axis_steps_per_unit[3]);\r
+            position[E_AXIS]=lround(position[E_AXIS]*factor);\r
+            //current_position[3]*=factor;\r
+            axis_steps_per_unit[E_AXIS]= encoderpos;\r
+            encoderpos=activeline*lcdslow;\r
+              \r
           }\r
+          BLOCK;\r
+          beepshort();\r
         }\r
+        if(linechanging)\r
+        {\r
+          if(encoderpos<5) encoderpos=5;\r
+          if(encoderpos>9999) encoderpos=9999;\r
+          lcd.setCursor(13,line);lcd.print(itostr4(encoderpos));\r
+        }\r
+        \r
       }break; \r
     default:   \r
       break;\r