diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000000..cd72efb10d28 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.o +applet/ +*~ +*.orig +*.rej +*.bak +*.DS_Store +*.idea diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000000..8a378c7871a4 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,160 @@ +--- +language: c + +before_install: + - pwd + - wget https://bootstrap.pypa.io/get-pip.py + - wget https://bintray.com/artifact/download/olikraus/u8glib/u8glib_arduino_v1.17.zip +install: + - sudo python get-pip.py + - sudo pip install ino + # add ppa for newer version of Arduino than available in ubuntu 12.04 + - sudo add-apt-repository ppa:michael-gruz/elektronik -y + - sudo apt-get update -q + - sudo apt-get install arduino +before_script: + # add U8glib, LiquidCrystal_I2C & LiquidTWI2 libraries + - sudo unzip u8glib_arduino_v1.17.zip -d /usr/share/arduino/libraries/ + - cd /usr/share/arduino/libraries/ + - sudo git clone https://github.com/kiyoshigawa/LiquidCrystal_I2C.git + - ls -la + - ls -la LiquidCrystal_I2C/ + - sudo git clone https://github.com/lincomatic/LiquidTWI2.git + # remove Robot_Control library to stop compile error! + - sudo rm -rf /usr/share/arduino/libraries/Robot_Control + # change back to home directory for compiling + - cd $TRAVIS_BUILD_DIR + # ino needs files in src directory + - ln -s Marlin src + # remove Marlin.pde as it confuses ino after it finds Marlin.ino + - rm Marlin/Marlin.pde +script: + # build default config + - ino build -m mega2560 + # backup configuration.h + - cp Marlin/Configuration.h Marlin/Configuration.h.backup + - cp Marlin/Configuration_adv.h Marlin/Configuration_adv.h.backup + # change extruder numbers from 1 to 2 + # commented out for the moment fails build but compiles fine in Arduino + #- sed -i 's/#define EXTRUDERS 1/#define EXTRUDERS 2/g' Marlin/Configuration.h + #- rm -rf .build/ + #- ino build -m mega2560 + # change extruder numbers from 2 to 3, needs to be a board with 3 extruders defined in pins.h + #- sed -i 's/#define MOTHERBOARD BOARD_ULTIMAKER/#define MOTHERBOARD BOARD_AZTEEG_X3_PRO/g' Marlin/Configuration.h + #- sed -i 's/#define EXTRUDERS 2/#define EXTRUDERS 3/g' Marlin/Configuration.h + #- rm -rf .build/ + #- ino build -m mega2560 + # enable PIDTEMPBED + - cp Marlin/Configuration.h.backup Marlin/Configuration.h + - sed -i 's/\/\/#define PIDTEMPBED/#define PIDTEMPBED/g' Marlin/Configuration.h + - rm -rf .build/ + - ino build -m mega2560 + # enable THERMAL RUNAWAY PROTECTION for extruders & bed + - cp Marlin/Configuration.h.backup Marlin/Configuration.h + - sed -i 's/\/\/#define THERMAL_RUNAWAY_PROTECTION_PERIOD/#define THERMAL_RUNAWAY_PROTECTION_PERIOD/g' Marlin/Configuration.h + - sed -i 's/\/\/#define THERMAL_RUNAWAY_PROTECTION_HYSTERESIS/#define THERMAL_RUNAWAY_PROTECTION_HYSTERESIS/g' Marlin/Configuration.h + - sed -i 's/\/\/#define THERMAL_RUNAWAY_PROTECTION_BED_PERIOD/#define THERMAL_RUNAWAY_PROTECTION_BED_PERIOD/g' Marlin/Configuration.h + - sed -i 's/\/\/#define THERMAL_RUNAWAY_PROTECTION_BED_HYSTERESIS/#define THERMAL_RUNAWAY_PROTECTION_BED_HYSTERESIS/g' Marlin/Configuration.h + - rm -rf .build/ + - ino build -m mega2560 + # enable AUTO_BED_LEVELING + - cp Marlin/Configuration.h.backup Marlin/Configuration.h + - sed -i 's/\/\/#define ENABLE_AUTO_BED_LEVELING/#define ENABLE_AUTO_BED_LEVELING/g' Marlin/Configuration.h + - rm -rf .build/ + - ino build -m mega2560 + # enable EEPROM_SETTINGS & EEPROM_CHITCHAT + - cp Marlin/Configuration.h.backup Marlin/Configuration.h + - sed -i 's/\/\/#define EEPROM_SETTINGS/#define EEPROM_SETTINGS/g' Marlin/Configuration.h + - sed -i 's/\/\/#define EEPROM_CHITCHAT/#define EEPROM_CHITCHAT/g' Marlin/Configuration.h + - rm -rf .build/ + - ino build -m mega2560 + ### LCDS ### + # ULTIMAKERCONTROLLER + - cp Marlin/Configuration.h.backup Marlin/Configuration.h + - sed -i 's/\/\/#define ULTIMAKERCONTROLLER/#define ULTIMAKERCONTROLLER/g' Marlin/Configuration.h + - rm -rf .build/ + - ino build -m mega2560 + # MAKRPANEL + # Needs to use melzi and sanguino hardware + #- cp Marlin/Configuration.h.backup Marlin/Configuration.h + #- sed -i 's/\/\/#define MAKRPANEL/#define MAKRPANEL/g' Marlin/Configuration.h + #- rm -rf .build/ + #- ino build -m mega2560 + # REPRAP_DISCOUNT_SMART_CONTROLLER + - cp Marlin/Configuration.h.backup Marlin/Configuration.h + - sed -i 's/\/\/#define REPRAP_DISCOUNT_SMART_CONTROLLER/#define REPRAP_DISCOUNT_SMART_CONTROLLER/g' Marlin/Configuration.h + - rm -rf .build/ + - ino build -m mega2560 + # G3D_PANE + - cp Marlin/Configuration.h.backup Marlin/Configuration.h + - sed -i 's/\/\/#define G3D_PANEL/#define G3D_PANEL/g' Marlin/Configuration.h + - rm -rf .build/ + - ino build -m mega2560 + # REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER + - cp Marlin/Configuration.h.backup Marlin/Configuration.h + - sed -i 's/\/\/#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER/#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER/g' Marlin/Configuration.h + - rm -rf .build/ + - ino build -m mega2560 + # REPRAPWORLD_KEYPAD + # Cant find configuration details to get it to compile + #- cp Marlin/Configuration.h.backup Marlin/Configuration.h + #- sed -i 's/\/\/#define ULTRA_LCD/#define ULTRA_LCD/g' Marlin/Configuration.h + #- sed -i 's/\/\/#define REPRAPWORLD_KEYPAD/#define REPRAPWORLD_KEYPAD/g' Marlin/Configuration.h + #- sed -i 's/\/\/#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0/#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0/g' Marlin/Configuration.h + #- rm -rf .build/ + #- ino build -m mega2560 + # RA_CONTROL_PANEL + - cp Marlin/Configuration.h.backup Marlin/Configuration.h + - sed -i 's/\/\/#define RA_CONTROL_PANEL/#define RA_CONTROL_PANEL/g' Marlin/Configuration.h + - rm -rf .build/ + - ino build -m mega2560 + ### I2C PANELS ### + # LCD_I2C_SAINSMART_YWROBOT + # Failing at the moment needs different library + #- cp Marlin/Configuration.h.backup Marlin/Configuration.h + #- sed -i 's/\/\/#define LCD_I2C_SAINSMART_YWROBOT/#define LCD_I2C_SAINSMART_YWROBOT/g' Marlin/Configuration.h + #- rm -rf .build/ + #- ino build -m mega2560 + # LCD_I2C_PANELOLU2 + - cp Marlin/Configuration.h.backup Marlin/Configuration.h + - sed -i 's/\/\/#define LCD_I2C_PANELOLU2/#define LCD_I2C_PANELOLU2/g' Marlin/Configuration.h + - rm -rf .build/ + - ino build -m mega2560 + # LCD_I2C_VIKI + - cp Marlin/Configuration.h.backup Marlin/Configuration.h + - sed -i 's/\/\/#define LCD_I2C_VIKI/#define LCD_I2C_VIKI/g' Marlin/Configuration.h + - rm -rf .build/ + - ino build -m mega2560 + # Enable filament sensor + - cp Marlin/Configuration.h.backup Marlin/Configuration.h + - sed -i 's/\/\/#define FILAMENT_SENSOR/#define FILAMENT_SENSOR/g' Marlin/Configuration.h + - rm -rf .build/ + - ino build -m mega2560 + # Enable filament sensor with LCD display + - cp Marlin/Configuration.h.backup Marlin/Configuration.h + - sed -i 's/\/\/#define ULTIMAKERCONTROLLER/#define ULTIMAKERCONTROLLER/g' Marlin/Configuration.h + - sed -i 's/\/\/#define FILAMENT_SENSOR/#define FILAMENT_SENSOR/g' Marlin/Configuration.h + - sed -i 's/\/\/#define FILAMENT_LCD_DISPLAY/#define FILAMENT_LCD_DISPLAY/g' Marlin/Configuration.h + - rm -rf .build/ + - ino build -m mega2560 + ######## Example Configurations ############## + # Delta Config + - cp Marlin/example_configurations/delta/Configuration* Marlin/ + - rm -rf .build/ + - ino build -m mega2560 + # Makibox Config need to check board type for Teensy++ 2.0 + #- cp Marlin/example_configurations/makibox/Configuration* Marlin/ + #- rm -rf .build/ + #- ino build -m mega2560 + # SCARA Config + - cp Marlin/example_configurations/SCARA/Configuration* Marlin/ + - rm -rf .build/ + - ino build -m mega2560 + # tvrrug Config need to check board type for sanguino atmega644p + #- cp Marlin/example_configurations/tvrrug/Round2/Configuration* Marlin/ + #- rm -rf .build/ + #- ino build -m mega2560 + ######## Board Types ############# + - sed -i 's/#define MOTHERBOARD BOARD_RAMPS_13_EFB/#define MOTHERBOARD BOARD_DUEMILANOVE_328P/g' Marlin/Configuration.h + - rm -rf .build/ + - ino build -m atmega328 \ No newline at end of file diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 980efc5cdf25..92712af20e17 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -392,6 +392,7 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of // these are the offsets to the probe relative to the extruder tip (Hotend - Probe) + // X and Y offsets must be integers #define X_PROBE_OFFSET_FROM_EXTRUDER -25 #define Y_PROBE_OFFSET_FROM_EXTRUDER -29 #define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 @@ -780,6 +781,8 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of +// Send OK to PC, then wait OK_TIMEOUT ms before sending another 'OK', in case the first one was garbled. +#define OK_TIMEOUT 250 diff --git a/Marlin/ConfigurationStore.cpp b/Marlin/ConfigurationStore.cpp index 20e68d09e394..8e4a32805b93 100644 --- a/Marlin/ConfigurationStore.cpp +++ b/Marlin/ConfigurationStore.cpp @@ -38,15 +38,7 @@ void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size) // wrong data being written to the variables. // ALSO: always make sure the variables in the Store and retrieve sections are in the same order. -#define EEPROM_VERSION "V10" -#ifdef DELTA - #undef EEPROM_VERSION - #define EEPROM_VERSION "V11" -#endif -#ifdef SCARA - #undef EEPROM_VERSION - #define EEPROM_VERSION "V12" -#endif +#define EEPROM_VERSION "V13" #ifdef EEPROM_SETTINGS void Config_StoreSettings() @@ -101,6 +93,31 @@ void Config_StoreSettings() #ifdef SCARA EEPROM_WRITE_VAR(i,axis_scaling); // Add scaling for SCARA #endif + #ifdef FWRETRACT + EEPROM_WRITE_VAR(i,autoretract_enabled); + EEPROM_WRITE_VAR(i,retract_length); + #if EXTRUDERS > 1 + EEPROM_WRITE_VAR(i,retract_length_swap); + #endif + EEPROM_WRITE_VAR(i,retract_feedrate); + EEPROM_WRITE_VAR(i,retract_zlift); + EEPROM_WRITE_VAR(i,retract_recover_length); + #if EXTRUDERS > 1 + EEPROM_WRITE_VAR(i,retract_recover_length_swap); + #endif + EEPROM_WRITE_VAR(i,retract_recover_feedrate); + #endif + + // Save filament sizes + EEPROM_WRITE_VAR(i, volumetric_enabled); + EEPROM_WRITE_VAR(i, filament_size[0]); + #if EXTRUDERS > 1 + EEPROM_WRITE_VAR(i, filament_size[1]); + #if EXTRUDERS > 2 + EEPROM_WRITE_VAR(i, filament_size[2]); + #endif + #endif + char ver2[4]=EEPROM_VERSION; i=EEPROM_OFFSET; EEPROM_WRITE_VAR(i,ver2); // validate data @@ -210,11 +227,45 @@ SERIAL_ECHOLNPGM("Scaling factors:"); SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Recover: S=Extra length (mm) F:Speed (mm/m)"); SERIAL_ECHO_START; - SERIAL_ECHOPAIR(" M208 S",retract_recover_length); - SERIAL_ECHOPAIR(" F" ,retract_recover_feedrate*60); - SERIAL_ECHOLN(""); + SERIAL_ECHOPAIR(" M208 S",retract_recover_length); + SERIAL_ECHOPAIR(" F", retract_recover_feedrate*60); + SERIAL_ECHOLN(""); + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("Auto-Retract: S=0 to disable, 1 to interpret extrude-only moves as retracts or recoveries"); + SERIAL_ECHO_START; + SERIAL_ECHOPAIR(" M209 S", (unsigned long)(autoretract_enabled ? 1 : 0)); + SERIAL_ECHOLN(""); +#if EXTRUDERS > 1 + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("Multi-extruder settings:"); + SERIAL_ECHO_START; + SERIAL_ECHOPAIR(" Swap retract length (mm): ", retract_length_swap); + SERIAL_ECHOLN(""); + SERIAL_ECHO_START; + SERIAL_ECHOPAIR(" Swap rec. addl. length (mm): ", retract_recover_length_swap); + SERIAL_ECHOLN(""); #endif -} + SERIAL_ECHO_START; + if (volumetric_enabled) { + SERIAL_ECHOLNPGM("Filament settings:"); + SERIAL_ECHO_START; + SERIAL_ECHOPAIR(" M200 D", filament_size[0]); + SERIAL_ECHOLN(""); +#if EXTRUDERS > 1 + SERIAL_ECHO_START; + SERIAL_ECHOPAIR(" M200 T1 D", filament_size[1]); + SERIAL_ECHOLN(""); +#if EXTRUDERS > 2 + SERIAL_ECHO_START; + SERIAL_ECHOPAIR(" M200 T2 D", filament_size[2]); + SERIAL_ECHOLN(""); +#endif +#endif + } else { + SERIAL_ECHOLNPGM("Filament settings: Disabled"); + } +#endif +} #endif @@ -277,6 +328,30 @@ void Config_RetrieveSettings() EEPROM_READ_VAR(i,axis_scaling); #endif + #ifdef FWRETRACT + EEPROM_READ_VAR(i,autoretract_enabled); + EEPROM_READ_VAR(i,retract_length); + #if EXTRUDERS > 1 + EEPROM_READ_VAR(i,retract_length_swap); + #endif + EEPROM_READ_VAR(i,retract_feedrate); + EEPROM_READ_VAR(i,retract_zlift); + EEPROM_READ_VAR(i,retract_recover_length); + #if EXTRUDERS > 1 + EEPROM_READ_VAR(i,retract_recover_length_swap); + #endif + EEPROM_READ_VAR(i,retract_recover_feedrate); + #endif + + EEPROM_READ_VAR(i, volumetric_enabled); + EEPROM_READ_VAR(i, filament_size[0]); +#if EXTRUDERS > 1 + EEPROM_READ_VAR(i, filament_size[1]); +#if EXTRUDERS > 2 + EEPROM_READ_VAR(i, filament_size[2]); +#endif +#endif + calculate_volumetric_multipliers(); // Call updatePID (similar to when we have processed M301) updatePID(); SERIAL_ECHO_START; @@ -353,6 +428,31 @@ void Config_ResetDefault() #endif//PID_ADD_EXTRUSION_RATE #endif//PIDTEMP +#ifdef FWRETRACT + autoretract_enabled = false; + retract_length = RETRACT_LENGTH; +#if EXTRUDERS > 1 + retract_length_swap = RETRACT_LENGTH_SWAP; +#endif + retract_feedrate = RETRACT_FEEDRATE; + retract_zlift = RETRACT_ZLIFT; + retract_recover_length = RETRACT_RECOVER_LENGTH; +#if EXTRUDERS > 1 + retract_recover_length_swap = RETRACT_RECOVER_LENGTH_SWAP; +#endif + retract_recover_feedrate = RETRACT_RECOVER_FEEDRATE; +#endif + + volumetric_enabled = false; + filament_size[0] = DEFAULT_NOMINAL_FILAMENT_DIA; +#if EXTRUDERS > 1 + filament_size[1] = DEFAULT_NOMINAL_FILAMENT_DIA; +#if EXTRUDERS > 2 + filament_size[2] = DEFAULT_NOMINAL_FILAMENT_DIA; +#endif +#endif + calculate_volumetric_multipliers(); + SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Hardcoded Default Settings Loaded"); diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index 76b348e774e1..13e55523653e 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -30,7 +30,10 @@ # include "Arduino.h" #else # include "WProgram.h" - //Arduino < 1.0.0 does not define this, so we need to do it ourselves +#endif + +// Arduino < 1.0.0 does not define this, so we need to do it ourselves +#ifndef analogInputToDigitalPin # define analogInputToDigitalPin(p) ((p) + A0) #endif @@ -209,7 +212,9 @@ extern float homing_feedrate[]; extern bool axis_relative_modes[]; extern int feedmultiply; extern int extrudemultiply; // Sets extrude multiply factor (in percent) for all extruders +extern bool volumetric_enabled; extern int extruder_multiply[EXTRUDERS]; // sets extrude multiply factor (in percent) for each extruder individually +extern float filament_size[EXTRUDERS]; // cross-sectional area of filament (in millimeters), typically around 1.75 or 2.85, 0 disables the volumetric calculations for the extruder. extern float volumetric_multiplier[EXTRUDERS]; // reciprocal of cross-sectional area of filament (in square millimeters), stored this way to reduce computational burden in planner extern float current_position[NUM_AXIS] ; extern float add_homing[3]; @@ -238,9 +243,9 @@ extern unsigned char fanSpeedSoftPwm; #endif #ifdef FILAMENT_SENSOR - extern float filament_width_nominal; //holds the theoretical filament diameter ie., 3.00 or 1.75 - extern bool filament_sensor; //indicates that filament sensor readings should control extrusion - extern float filament_width_meas; //holds the filament diameter as accurately measured + extern float filament_width_nominal; //holds the theoretical filament diameter ie., 3.00 or 1.75 + extern bool filament_sensor; //indicates that filament sensor readings should control extrusion + extern float filament_width_meas; //holds the filament diameter as accurately measured extern signed char measurement_delay[]; //ring buffer to delay measurement extern int delay_index1, delay_index2; //index into ring buffer extern float delay_dist; //delay distance counter @@ -266,3 +271,6 @@ extern void digipot_i2c_init(); #endif #endif + +extern void calculate_volumetric_multipliers(); + diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index ef3cda04c981..f327788c81ae 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -215,6 +215,15 @@ int extruder_multiply[EXTRUDERS] = {100 #endif #endif }; +bool volumetric_enabled = false; +float filament_size[EXTRUDERS] = { DEFAULT_NOMINAL_FILAMENT_DIA + #if EXTRUDERS > 1 + , DEFAULT_NOMINAL_FILAMENT_DIA + #if EXTRUDERS > 2 + , DEFAULT_NOMINAL_FILAMENT_DIA + #endif + #endif +}; float volumetric_multiplier[EXTRUDERS] = {1.0 #if EXTRUDERS > 1 , 1.0 @@ -367,6 +376,7 @@ const int sensitive_pins[] = SENSITIVE_PINS; // Sensitive pin list for M42 //Inactivity shutdown variables static unsigned long previous_millis_cmd = 0; +static unsigned long previous_millis_ok = 0; static unsigned long max_inactive_time = 0; static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000l; @@ -636,6 +646,7 @@ void loop() else { SERIAL_PROTOCOLLNPGM(MSG_OK); + previous_millis_ok = millis(); } } else @@ -2823,21 +2834,7 @@ SERIAL_PROTOCOLPGM("\n\n"); #endif //BLINKM case 200: // M200 D set filament diameter and set E axis units to cubic millimeters (use S0 to set back to millimeters). { - float area = .0; - float radius = .0; - if(code_seen('D')) { - radius = (float)code_value() * .5; - if(radius == 0) { - area = 1; - } else { - area = M_PI * pow(radius, 2); - } - } else { - //reserved for setting filament diameter via UFID or filament measuring device - break; - - - } + tmp_extruder = active_extruder; if(code_seen('T')) { tmp_extruder = code_value(); @@ -2847,7 +2844,32 @@ SERIAL_PROTOCOLPGM("\n\n"); break; } } - volumetric_multiplier[tmp_extruder] = 1 / area; + + float area = .0; + if(code_seen('D')) { + float diameter = (float)code_value(); + if (diameter == 0.0) { + // setting any extruder filament size disables volumetric on the assumption that + // slicers either generate in extruder values as cubic mm or as as filament feeds + // for all extruders + volumetric_enabled = false; + } else { + filament_size[tmp_extruder] = (float)code_value(); + // make sure all extruders have some sane value for the filament size + filament_size[0] = (filament_size[0] == 0.0 ? DEFAULT_NOMINAL_FILAMENT_DIA : filament_size[0]); + #if EXTRUDERS > 1 + filament_size[1] = (filament_size[1] == 0.0 ? DEFAULT_NOMINAL_FILAMENT_DIA : filament_size[1]); + #if EXTRUDERS > 2 + filament_size[2] = (filament_size[2] == 0.0 ? DEFAULT_NOMINAL_FILAMENT_DIA : filament_size[2]); + #endif + #endif + volumetric_enabled = true; + } + } else { + //reserved for setting filament diameter via UFID or filament measuring device + break; + } + calculate_volumetric_multipliers(); } break; case 201: // M201 @@ -3135,12 +3157,13 @@ SERIAL_PROTOCOLPGM("\n\n"); } } else if (servo_index >= 0) { - SERIAL_PROTOCOL(MSG_OK); + SERIAL_PROTOCOL(MSG_OK); SERIAL_PROTOCOL(" Servo "); SERIAL_PROTOCOL(servo_index); SERIAL_PROTOCOL(": "); SERIAL_PROTOCOL(servos[servo_index].read()); SERIAL_PROTOCOLLN(""); + previous_millis_ok = millis(); } } break; @@ -3215,6 +3238,7 @@ SERIAL_PROTOCOLPGM("\n\n"); SERIAL_PROTOCOL(" d:"); SERIAL_PROTOCOL(unscalePID_d(bedKd)); SERIAL_PROTOCOLLN(""); + previous_millis_ok = millis(); } break; #endif //PIDTEMP @@ -3505,6 +3529,7 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp SERIAL_ECHO_START; SERIAL_ECHOLNPGM(MSG_ZPROBE_ZOFFSET " " MSG_OK); SERIAL_PROTOCOLLN(""); + previous_millis_ok = millis(); } else { @@ -3891,6 +3916,7 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp ClearToSend(); } + void FlushSerialRequestResend() { //char cmdbuffer[bufindr][100]="Resend:"; @@ -3908,6 +3934,7 @@ void ClearToSend() return; #endif //SDSUPPORT SERIAL_PROTOCOLLNPGM(MSG_OK); + previous_millis_ok = millis(); } void get_coordinates() @@ -4332,6 +4359,14 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument s if( (millis() - previous_millis_cmd) > max_inactive_time ) if(max_inactive_time) kill(); + + // If 'OK' is garbled on sending PC won't receive it. Both machines will wait on each other forever. + // This resends OK if nothing is heard from PC for a while to avoid this bad case. + if( (millis() - previous_millis_ok) > OK_TIMEOUT ) { + SERIAL_PROTOCOL(MSG_OK); + previous_millis_ok=millis(); + } + if(stepper_inactive_time) { if( (millis() - previous_millis_cmd) > stepper_inactive_time ) { @@ -4580,3 +4615,29 @@ bool setTargetedHotend(int code){ return false; } + +float calculate_volumetric_multiplier(float diameter) { + float area = .0; + float radius = .0; + + radius = diameter * .5; + if (! volumetric_enabled || radius == 0) { + area = 1; + } + else { + area = M_PI * pow(radius, 2); + } + + return 1.0 / area; +} + +void calculate_volumetric_multipliers() { + volumetric_multiplier[0] = calculate_volumetric_multiplier(filament_size[0]); +#if EXTRUDERS > 1 + volumetric_multiplier[1] = calculate_volumetric_multiplier(filament_size[1]); +#if EXTRUDERS > 2 + volumetric_multiplier[2] = calculate_volumetric_multiplier(filament_size[2]); +#endif +#endif +} + diff --git a/Marlin/LCD Menu Tree.pdf b/Marlin/documentation/LCD Menu Tree.pdf similarity index 100% rename from Marlin/LCD Menu Tree.pdf rename to Marlin/documentation/LCD Menu Tree.pdf diff --git a/Marlin/Menu Plans.xlsx b/Marlin/documentation/Menu Plans.xlsx similarity index 100% rename from Marlin/Menu Plans.xlsx rename to Marlin/documentation/Menu Plans.xlsx diff --git a/Marlin/dogm_lcd_implementation.h b/Marlin/dogm_lcd_implementation.h index 9c0a54448744..95314f683e8f 100644 --- a/Marlin/dogm_lcd_implementation.h +++ b/Marlin/dogm_lcd_implementation.h @@ -366,6 +366,8 @@ static void _drawmenu_setting_edit_generic(uint8_t row, const char* pstr, char p #define lcd_implementation_drawmenu_setting_edit_float3(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr3(*(data))) #define lcd_implementation_drawmenu_setting_edit_float32_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr32(*(data))) #define lcd_implementation_drawmenu_setting_edit_float32(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr32(*(data))) +#define lcd_implementation_drawmenu_setting_edit_float43_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr43(*(data))) +#define lcd_implementation_drawmenu_setting_edit_float43(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr43(*(data))) #define lcd_implementation_drawmenu_setting_edit_float5_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr5(*(data))) #define lcd_implementation_drawmenu_setting_edit_float5(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr5(*(data))) #define lcd_implementation_drawmenu_setting_edit_float52_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr52(*(data))) @@ -384,6 +386,8 @@ static void _drawmenu_setting_edit_generic(uint8_t row, const char* pstr, char p #define lcd_implementation_drawmenu_setting_edit_callback_float3(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr3(*(data))) #define lcd_implementation_drawmenu_setting_edit_callback_float32_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr32(*(data))) #define lcd_implementation_drawmenu_setting_edit_callback_float32(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr32(*(data))) +#define lcd_implementation_drawmenu_setting_edit_callback_float43_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr43(*(data))) +#define lcd_implementation_drawmenu_setting_edit_callback_float43(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr43(*(data))) #define lcd_implementation_drawmenu_setting_edit_callback_float5_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr5(*(data))) #define lcd_implementation_drawmenu_setting_edit_callback_float5(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr5(*(data))) #define lcd_implementation_drawmenu_setting_edit_callback_float52_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr52(*(data))) diff --git a/Marlin/language_an.h b/Marlin/language_an.h index 2d9c5ead51c6..f0b3fa273815 100644 --- a/Marlin/language_an.h +++ b/Marlin/language_an.h @@ -86,6 +86,11 @@ #define MSG_ESTEPS "E trangos/mm" #define MSG_TEMPERATURE "Temperatura" #define MSG_MOTION "Movimiento" +#define MSG_VOLUMETRIC "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" #define MSG_CONTRAST "Contrast" #define MSG_STORE_EPROM "Alzar Memoria" #define MSG_LOAD_EPROM "Cargar Memoria" diff --git a/Marlin/language_ca.h b/Marlin/language_ca.h index c556c027a9fd..ba5d37127f91 100644 --- a/Marlin/language_ca.h +++ b/Marlin/language_ca.h @@ -86,6 +86,11 @@ #define MSG_ESTEPS "Epassos/mm" #define MSG_TEMPERATURE "Temperatura" #define MSG_MOTION "Moviment" +#define MSG_VOLUMETRIC "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" #define MSG_CONTRAST "Contrast de LCD" #define MSG_STORE_EPROM "Desar a memoria" #define MSG_LOAD_EPROM "Carregar de mem." diff --git a/Marlin/language_de.h b/Marlin/language_de.h index a05d85d95882..e442448af6a9 100644 --- a/Marlin/language_de.h +++ b/Marlin/language_de.h @@ -86,6 +86,11 @@ #define MSG_ESTEPS "Esteps/mm" #define MSG_TEMPERATURE "Temperatur" #define MSG_MOTION "Bewegung" +#define MSG_VOLUMETRIC "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" #define MSG_CONTRAST "LCD contrast" #define MSG_STORE_EPROM "EPROM speichern" #define MSG_LOAD_EPROM "EPROM laden" diff --git a/Marlin/language_en.h b/Marlin/language_en.h index c749e98254a3..014b42e51e03 100644 --- a/Marlin/language_en.h +++ b/Marlin/language_en.h @@ -86,6 +86,11 @@ #define MSG_ESTEPS "Esteps/mm" #define MSG_TEMPERATURE "Temperature" #define MSG_MOTION "Motion" +#define MSG_VOLUMETRIC "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" #define MSG_CONTRAST "LCD contrast" #define MSG_STORE_EPROM "Store memory" #define MSG_LOAD_EPROM "Load memory" diff --git a/Marlin/language_es.h b/Marlin/language_es.h index 50e8bb9c395b..064c770604fc 100644 --- a/Marlin/language_es.h +++ b/Marlin/language_es.h @@ -86,6 +86,11 @@ #define MSG_ESTEPS "E pasos/mm" #define MSG_TEMPERATURE "Temperatura" #define MSG_MOTION "Movimiento" +#define MSG_VOLUMETRIC "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" #define MSG_CONTRAST "Contraste" #define MSG_STORE_EPROM "Guardar memoria" #define MSG_LOAD_EPROM "Cargar memoria" diff --git a/Marlin/language_eu.h b/Marlin/language_eu.h index e85218e18c89..7e65ca59d165 100644 --- a/Marlin/language_eu.h +++ b/Marlin/language_eu.h @@ -86,6 +86,11 @@ #define MSG_ESTEPS "E pausoak/mm" #define MSG_TEMPERATURE "Tenperatura" #define MSG_MOTION "Mugimendua" +#define MSG_VOLUMETRIC "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" #define MSG_CONTRAST "LCD kontrastea" #define MSG_STORE_EPROM "Gorde memoria" #define MSG_LOAD_EPROM "Kargatu memoria" diff --git a/Marlin/language_fi.h b/Marlin/language_fi.h index 9117f7787381..0b1ac9cad93b 100644 --- a/Marlin/language_fi.h +++ b/Marlin/language_fi.h @@ -86,6 +86,11 @@ #define MSG_ESTEPS "Esteps/mm" #define MSG_TEMPERATURE "Lampotila" #define MSG_MOTION "Liike" +#define MSG_VOLUMETRIC "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" #define MSG_CONTRAST "LCD contrast" #define MSG_STORE_EPROM "Tallenna muistiin" #define MSG_LOAD_EPROM "Lataa muistista" diff --git a/Marlin/language_fr.h b/Marlin/language_fr.h index ab5ac818cb5c..59066b126807 100644 --- a/Marlin/language_fr.h +++ b/Marlin/language_fr.h @@ -86,6 +86,11 @@ #define MSG_ESTEPS "Epas/mm" #define MSG_TEMPERATURE "Temperature" #define MSG_MOTION "Mouvement" +#define MSG_VOLUMETRIC "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" #define MSG_CONTRAST "Contraste LCD" #define MSG_STORE_EPROM "Sauver config" #define MSG_LOAD_EPROM "Lire config" diff --git a/Marlin/language_it.h b/Marlin/language_it.h index c42e70b2a3da..76845e3bcd56 100644 --- a/Marlin/language_it.h +++ b/Marlin/language_it.h @@ -86,6 +86,11 @@ #define MSG_ESTEPS "Epassi/mm" #define MSG_TEMPERATURE "Temperatura" #define MSG_MOTION "Movimento" +#define MSG_VOLUMETRIC "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" #define MSG_CONTRAST "LCD contrast" #define MSG_STORE_EPROM "Salva in EEPROM" #define MSG_LOAD_EPROM "Carica da EEPROM" diff --git a/Marlin/language_nl.h b/Marlin/language_nl.h index 67ddc7e950e1..e9dc380605b0 100644 --- a/Marlin/language_nl.h +++ b/Marlin/language_nl.h @@ -86,6 +86,11 @@ #define MSG_ESTEPS "Esteps/mm" #define MSG_TEMPERATURE "Temperatuur" #define MSG_MOTION "Beweging" +#define MSG_VOLUMETRIC "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" #define MSG_CONTRAST "LCD contrast" #define MSG_STORE_EPROM "Geheugen opslaan" #define MSG_LOAD_EPROM "Geheugen laden" diff --git a/Marlin/language_pl.h b/Marlin/language_pl.h index 3de1d20909ea..55ec20ee36c5 100644 --- a/Marlin/language_pl.h +++ b/Marlin/language_pl.h @@ -86,6 +86,11 @@ #define MSG_ESTEPS "krokiE/mm" #define MSG_TEMPERATURE "Temperatura" #define MSG_MOTION "Ruch" +#define MSG_VOLUMETRIC "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" #define MSG_CONTRAST "Kontrast LCD" #define MSG_STORE_EPROM "Zapisz w pamieci" #define MSG_LOAD_EPROM "Wczytaj z pamieci" diff --git a/Marlin/language_pt.h b/Marlin/language_pt.h index c11191615c89..09e346748f46 100644 --- a/Marlin/language_pt.h +++ b/Marlin/language_pt.h @@ -86,6 +86,11 @@ #define MSG_ESTEPS "Epasso/mm:" #define MSG_TEMPERATURE "Temperatura" #define MSG_MOTION "Movimento" +#define MSG_VOLUMETRIC "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" #define MSG_CONTRAST "Contrast" #define MSG_STORE_EPROM "Guardar memoria" #define MSG_LOAD_EPROM "Carregar memoria" diff --git a/Marlin/language_ru.h b/Marlin/language_ru.h index ec0285f344c8..ec666f186b93 100644 --- a/Marlin/language_ru.h +++ b/Marlin/language_ru.h @@ -88,6 +88,11 @@ #define MSG_ESTEPS "E шаг/mm:" #define MSG_TEMPERATURE "Температура \x7E" #define MSG_MOTION "Скорости \x7E" +#define MSG_VOLUMETRIC "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" #define MSG_CONTRAST "LCD contrast" #define MSG_STORE_EPROM "Сохранить в EPROM" #define MSG_LOAD_EPROM "Загруз. из EPROM" diff --git a/Marlin/createTemperatureLookupMarlin.py b/Marlin/scripts/createTemperatureLookupMarlin.py similarity index 100% rename from Marlin/createTemperatureLookupMarlin.py rename to Marlin/scripts/createTemperatureLookupMarlin.py diff --git a/Marlin/create_speed_lookuptable.py b/Marlin/scripts/create_speed_lookuptable.py similarity index 100% rename from Marlin/create_speed_lookuptable.py rename to Marlin/scripts/create_speed_lookuptable.py diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 94d257d55004..7acc5ffd87a1 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -1049,7 +1049,7 @@ void thermal_runaway_protection(int *state, unsigned long *timer, float temperat { *timer = millis(); } - else if ( (millis() - *timer) > period_seconds*1000) + else if ( (millis() - *timer) > ((unsigned long) period_seconds) * 1000) { SERIAL_ERROR_START; SERIAL_ERRORLNPGM("Thermal Runaway, system stopped! Heater_ID: "); diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index 83895e2fdab8..42d497958303 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -59,6 +59,7 @@ static void lcd_control_temperature_menu(); static void lcd_control_temperature_preheat_pla_settings_menu(); static void lcd_control_temperature_preheat_abs_settings_menu(); static void lcd_control_motion_menu(); +static void lcd_control_volumetric_menu(); #ifdef DOGLCD static void lcd_set_contrast(); #endif @@ -82,6 +83,7 @@ static void menu_action_setting_edit_bool(const char* pstr, bool* ptr); static void menu_action_setting_edit_int3(const char* pstr, int* ptr, int minValue, int maxValue); static void menu_action_setting_edit_float3(const char* pstr, float* ptr, float minValue, float maxValue); static void menu_action_setting_edit_float32(const char* pstr, float* ptr, float minValue, float maxValue); +static void menu_action_setting_edit_float43(const char* pstr, float* ptr, float minValue, float maxValue); static void menu_action_setting_edit_float5(const char* pstr, float* ptr, float minValue, float maxValue); static void menu_action_setting_edit_float51(const char* pstr, float* ptr, float minValue, float maxValue); static void menu_action_setting_edit_float52(const char* pstr, float* ptr, float minValue, float maxValue); @@ -90,6 +92,7 @@ static void menu_action_setting_edit_callback_bool(const char* pstr, bool* ptr, static void menu_action_setting_edit_callback_int3(const char* pstr, int* ptr, int minValue, int maxValue, menuFunc_t callbackFunc); static void menu_action_setting_edit_callback_float3(const char* pstr, float* ptr, float minValue, float maxValue, menuFunc_t callbackFunc); static void menu_action_setting_edit_callback_float32(const char* pstr, float* ptr, float minValue, float maxValue, menuFunc_t callbackFunc); +static void menu_action_setting_edit_callback_float43(const char* pstr, float* ptr, float minValue, float maxValue, menuFunc_t callbackFunc); static void menu_action_setting_edit_callback_float5(const char* pstr, float* ptr, float minValue, float maxValue, menuFunc_t callbackFunc); static void menu_action_setting_edit_callback_float51(const char* pstr, float* ptr, float minValue, float maxValue, menuFunc_t callbackFunc); static void menu_action_setting_edit_callback_float52(const char* pstr, float* ptr, float minValue, float maxValue, menuFunc_t callbackFunc); @@ -742,6 +745,8 @@ static void lcd_control_menu() MENU_ITEM(back, MSG_MAIN, lcd_main_menu); MENU_ITEM(submenu, MSG_TEMPERATURE, lcd_control_temperature_menu); MENU_ITEM(submenu, MSG_MOTION, lcd_control_motion_menu); + MENU_ITEM(submenu, MSG_VOLUMETRIC, lcd_control_volumetric_menu); + #ifdef DOGLCD // MENU_ITEM_EDIT(int3, MSG_CONTRAST, &lcd_contrast, 0, 63); MENU_ITEM(submenu, MSG_CONTRAST, lcd_set_contrast); @@ -870,6 +875,26 @@ static void lcd_control_motion_menu() END_MENU(); } +static void lcd_control_volumetric_menu() +{ + START_MENU(); + MENU_ITEM(back, MSG_CONTROL, lcd_control_menu); + + MENU_ITEM_EDIT(bool, MSG_VOLUMETRIC_ENABLED, &volumetric_enabled); + + if (volumetric_enabled) { + MENU_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_SIZE_EXTRUDER_0, &filament_size[0], DEFAULT_NOMINAL_FILAMENT_DIA - .5, DEFAULT_NOMINAL_FILAMENT_DIA + .5, calculate_volumetric_multipliers); +#if EXTRUDERS > 1 + MENU_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_SIZE_EXTRUDER_1, &filament_size[1], DEFAULT_NOMINAL_FILAMENT_DIA - .5, DEFAULT_NOMINAL_FILAMENT_DIA + .5, calculate_volumetric_multipliers); +#if EXTRUDERS > 2 + MENU_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_SIZE_EXTRUDER_2, &filament_size[2], DEFAULT_NOMINAL_FILAMENT_DIA - .5, DEFAULT_NOMINAL_FILAMENT_DIA + .5, calculate_volumetric_multipliers); +#endif +#endif + } + + END_MENU(); +} + #ifdef DOGLCD static void lcd_set_contrast() { @@ -1013,6 +1038,7 @@ void lcd_sdcard_menu() menu_edit_type(int, int3, itostr3, 1) menu_edit_type(float, float3, ftostr3, 1) menu_edit_type(float, float32, ftostr32, 100) +menu_edit_type(float, float43, ftostr43, 1000) menu_edit_type(float, float5, ftostr5, 0.01) menu_edit_type(float, float51, ftostr51, 10) menu_edit_type(float, float52, ftostr52, 100) @@ -1482,7 +1508,24 @@ char *ftostr32(const float &x) return conv; } -// Convert float to string with 1.23 format +// Convert float to string with 1.234 format +char *ftostr43(const float &x) +{ + long xx = x * 1000; + if (xx >= 0) + conv[0] = (xx / 1000) % 10 + '0'; + else + conv[0] = '-'; + xx = abs(xx); + conv[1] = '.'; + conv[2] = (xx / 100) % 10 + '0'; + conv[3] = (xx / 10) % 10 + '0'; + conv[4] = (xx) % 10 + '0'; + conv[5] = 0; + return conv; +} + +//Float to string with 1.23 format char *ftostr12ns(const float &x) { long xx=x*100; diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index 351a2654b4c5..a175f4a75717 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -118,6 +118,7 @@ char *ftostr3(const float &x); char *ftostr31ns(const float &x); // float to string without sign character char *ftostr31(const float &x); char *ftostr32(const float &x); +char *ftostr43(const float &x); char *ftostr12ns(const float &x); char *ftostr32sp(const float &x); // remove zero-padding from ftostr32 char *ftostr5(const float &x); diff --git a/Marlin/ultralcd_implementation_hitachi_HD44780.h b/Marlin/ultralcd_implementation_hitachi_HD44780.h index 1a93fe3e6e42..fe0953e56c87 100644 --- a/Marlin/ultralcd_implementation_hitachi_HD44780.h +++ b/Marlin/ultralcd_implementation_hitachi_HD44780.h @@ -693,6 +693,8 @@ static void lcd_implementation_drawmenu_setting_edit_generic_P(uint8_t row, cons #define lcd_implementation_drawmenu_setting_edit_float3(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr3(*(data))) #define lcd_implementation_drawmenu_setting_edit_float32_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr32(*(data))) #define lcd_implementation_drawmenu_setting_edit_float32(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr32(*(data))) +#define lcd_implementation_drawmenu_setting_edit_float43_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr43(*(data))) +#define lcd_implementation_drawmenu_setting_edit_float43(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr43(*(data))) #define lcd_implementation_drawmenu_setting_edit_float5_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr5(*(data))) #define lcd_implementation_drawmenu_setting_edit_float5(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr5(*(data))) #define lcd_implementation_drawmenu_setting_edit_float52_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr52(*(data))) @@ -711,6 +713,8 @@ static void lcd_implementation_drawmenu_setting_edit_generic_P(uint8_t row, cons #define lcd_implementation_drawmenu_setting_edit_callback_float3(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr3(*(data))) #define lcd_implementation_drawmenu_setting_edit_callback_float32_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr32(*(data))) #define lcd_implementation_drawmenu_setting_edit_callback_float32(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr32(*(data))) +#define lcd_implementation_drawmenu_setting_edit_callback_float43_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr43(*(data))) +#define lcd_implementation_drawmenu_setting_edit_callback_float43(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr43(*(data))) #define lcd_implementation_drawmenu_setting_edit_callback_float5_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr5(*(data))) #define lcd_implementation_drawmenu_setting_edit_callback_float5(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, ' ', ftostr5(*(data))) #define lcd_implementation_drawmenu_setting_edit_callback_float52_selected(row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', ftostr52(*(data)))