Hyperfine Bed Tuning for MK3

Changed Bed correction from 4 points to 8 to get better results as we got on the MK2/s
Changed langtool.pl to have EN as default
Added tiem and credentials to support info
This commit is contained in:
3d-gussner 2018-01-24 09:45:23 +01:00
parent 17cadf463a
commit a2e0a0a02d
7 changed files with 290 additions and 86 deletions

View File

@ -120,6 +120,13 @@
#define EEPROM_FSENS_AUTOLOAD_ENABLED (EEPROM_SECOND_SERIAL_ACTIVE - 1) #define EEPROM_FSENS_AUTOLOAD_ENABLED (EEPROM_SECOND_SERIAL_ACTIVE - 1)
// Hyperfine Bed Tuning
#define EEPROM_BED_CORRECTION_FRONT_LEFT (EEPROM_FSENS_AUTOLOAD_ENABLED - 1)
#define EEPROM_BED_CORRECTION_FRONT_RIGHT (EEPROM_BED_CORRECTION_FRONT_LEFT - 1)
#define EEPROM_BED_CORRECTION_REAR_RIGHT (EEPROM_BED_CORRECTION_FRONT_RIGHT - 1)
#define EEPROM_BED_CORRECTION_REAR_LEFT (EEPROM_BED_CORRECTION_REAR_RIGHT - 1)
// End Hyperfine Bed Tuning
//TMC2130 configuration //TMC2130 configuration
#define EEPROM_TMC_AXIS_SIZE //axis configuration block size #define EEPROM_TMC_AXIS_SIZE //axis configuration block size
#define EEPROM_TMC_X (EEPROM_TMC + 0 * EEPROM_TMC_AXIS_SIZE) //X axis configuration blok #define EEPROM_TMC_X (EEPROM_TMC + 0 * EEPROM_TMC_AXIS_SIZE) //X axis configuration blok
@ -166,7 +173,7 @@
//#define STRING_VERSION "1.0.2" //#define STRING_VERSION "1.0.2"
#define STRING_VERSION_CONFIG_H __DATE__ " " __TIME__ // build date and time #define STRING_VERSION_CONFIG_H __DATE__ " " __TIME__ // build date and time
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes. #define STRING_CONFIG_H_AUTHOR "(3d-gussner,H)" // Who made the changes.
// SERIAL_PORT selects which serial port should be used for communication with the host. // SERIAL_PORT selects which serial port should be used for communication with the host.
// This allows the connection of wireless adapters (for instance) to non-default port pins. // This allows the connection of wireless adapters (for instance) to non-default port pins.

View File

@ -3636,55 +3636,135 @@ void process_commands()
} }
#endif // SUPPORT_VERBOSITY #endif // SUPPORT_VERBOSITY
for (uint8_t i = 0; i < 4; ++i) { // Hyperfine Bed Tuning
unsigned char codes[4] = { 'L', 'R', 'F', 'B' }; for (uint8_t i = 0; i < 8; ++i) {
unsigned char codes[8] = { 'a', 'b', 'c', 'd' , 'e' , 'f', 'g', 'h'};
long correction = 0; long correction = 0;
if (code_seen(codes[i])) if (code_seen(codes[i]))
correction = code_value_long(); correction = code_value_long();
else if (eeprom_bed_correction_valid) { else if (eeprom_bed_correction_valid) {
unsigned char *addr = (i < 2) ? switch (i) {
((i == 0) ? (unsigned char*)EEPROM_BED_CORRECTION_LEFT : (unsigned char*)EEPROM_BED_CORRECTION_RIGHT) : case 0:
((i == 2) ? (unsigned char*)EEPROM_BED_CORRECTION_FRONT : (unsigned char*)EEPROM_BED_CORRECTION_REAR); {unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT;
correction = eeprom_read_int8(addr); correction = eeprom_read_int8(addr);
}
break;
case 1:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_FRONT;
correction = eeprom_read_int8(addr);
}
break;
case 2:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT;
correction = eeprom_read_int8(addr);
}
break;
case 3:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_RIGHT;
correction = eeprom_read_int8(addr);
}
break;
case 4:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT;
correction = eeprom_read_int8(addr);
}
break;
case 5:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_REAR;
correction = eeprom_read_int8(addr);
}
break;
case 6:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT;
correction = eeprom_read_int8(addr);
}
break;
case 7:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_LEFT;
correction = eeprom_read_int8(addr);
}
break;
} }
if (correction == 0) }
continue; if (correction == 0)
continue;
float offset = float(correction) * 0.001f; float offset = float(correction) * 0.001f;
if (fabs(offset) > 0.101f) { if (fabs(offset) > 0.201f) {
SERIAL_ERROR_START; SERIAL_ERROR_START;
SERIAL_ECHOPGM("Excessive bed leveling correction: "); SERIAL_ECHOPGM("Excessive bed leveling correction: ");
SERIAL_ECHO(offset); SERIAL_ECHO(offset);
SERIAL_ECHOLNPGM(" microns"); SERIAL_ECHOLNPGM(" microns");
} }
else { else {
switch (i) { switch (i) {
case 0: case 0:
for (uint8_t row = 0; row < 3; ++row) { {
mbl.z_values[row][1] += 0.5f * offset; mbl.z_values[0][0] += offset;
mbl.z_values[row][0] += offset; SERIAL_ECHOPGM("FrontLeft a =");
} SERIAL_ECHO(correction+0);
break; SERIAL_ECHOLNPGM(" microns.");
case 1:
for (uint8_t row = 0; row < 3; ++row) {
mbl.z_values[row][1] += 0.5f * offset;
mbl.z_values[row][2] += offset;
}
break;
case 2:
for (uint8_t col = 0; col < 3; ++col) {
mbl.z_values[1][col] += 0.5f * offset;
mbl.z_values[0][col] += offset;
}
break;
case 3:
for (uint8_t col = 0; col < 3; ++col) {
mbl.z_values[1][col] += 0.5f * offset;
mbl.z_values[2][col] += offset;
}
break;
} }
break;
case 1:
{
mbl.z_values[0][1] += offset;
SERIAL_ECHOPGM("FrontCentr b =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 2:
{
mbl.z_values[0][2] += offset;
SERIAL_ECHOPGM("FrontRight c =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 3:
{
mbl.z_values[1][2] += offset;
SERIAL_ECHOPGM("MidRight d =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 4:
{
mbl.z_values[2][2] += offset;
SERIAL_ECHOPGM("RearRight e =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 5:
{
mbl.z_values[2][1] += offset;
SERIAL_ECHOPGM("RearCentr f =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 6:
{
mbl.z_values[2][0] += offset;
SERIAL_ECHOPGM("RearLeft g =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 7:
{
mbl.z_values[1][0] += offset;
SERIAL_ECHOPGM("MidLeft h =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
} }
} }
}
// End Hyperfine Bed Tuning
// SERIAL_ECHOLNPGM("Bed leveling correction finished"); // SERIAL_ECHOLNPGM("Bed leveling correction finished");
mbl.upsample_3x3(); //bilinear interpolation from 3x3 to 7x7 points while using the same array z_values[iy][ix] for storing (just coppying measured data to new destination and interpolating between them) mbl.upsample_3x3(); //bilinear interpolation from 3x3 to 7x7 points while using the same array z_values[iy][ix] for storing (just coppying measured data to new destination and interpolating between them)
// SERIAL_ECHOLNPGM("Upsample finished"); // SERIAL_ECHOLNPGM("Upsample finished");

View File

@ -199,7 +199,7 @@ print $fh <<END
#define LANG_ID_UNDEFINED 255 #define LANG_ID_UNDEFINED 255
// Default language ID, if no language is selected. // Default language ID, if no language is selected.
#define LANG_ID_DEFAULT LANG_ID_CZ #define LANG_ID_DEFAULT LANG_ID_EN
// Number of languages available in the language table. // Number of languages available in the language table.
#define LANG_NUM ${num_languages} #define LANG_NUM ${num_languages}

View File

@ -116,6 +116,21 @@ const char * const MSG_BED_CORRECTION_FRONT_LANG_TABLE[LANG_NUM] PROGMEM = {
MSG_BED_CORRECTION_FRONT_CZ MSG_BED_CORRECTION_FRONT_CZ
}; };
const char MSG_BED_CORRECTION_FRONT_CENTR_EN[] PROGMEM = "Fr.Centr b[um]";
const char * const MSG_BED_CORRECTION_FRONT_CENTR_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_FRONT_CENTR_EN
};
const char MSG_BED_CORRECTION_FRONT_LEFT_EN[] PROGMEM = "Fr.Left a[um]";
const char * const MSG_BED_CORRECTION_FRONT_LEFT_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_FRONT_LEFT_EN
};
const char MSG_BED_CORRECTION_FRONT_RIGHT_EN[] PROGMEM = "Fr.Right c[um]";
const char * const MSG_BED_CORRECTION_FRONT_RIGHT_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_FRONT_RIGHT_EN
};
const char MSG_BED_CORRECTION_LEFT_EN[] PROGMEM = "Left side [um]"; const char MSG_BED_CORRECTION_LEFT_EN[] PROGMEM = "Left side [um]";
const char MSG_BED_CORRECTION_LEFT_CZ[] PROGMEM = "Vlevo [um]"; const char MSG_BED_CORRECTION_LEFT_CZ[] PROGMEM = "Vlevo [um]";
const char * const MSG_BED_CORRECTION_LEFT_LANG_TABLE[LANG_NUM] PROGMEM = { const char * const MSG_BED_CORRECTION_LEFT_LANG_TABLE[LANG_NUM] PROGMEM = {
@ -130,6 +145,16 @@ const char * const MSG_BED_CORRECTION_MENU_LANG_TABLE[LANG_NUM] PROGMEM = {
MSG_BED_CORRECTION_MENU_CZ MSG_BED_CORRECTION_MENU_CZ
}; };
const char MSG_BED_CORRECTION_MID_LEFT_EN[] PROGMEM = "Mi.Left h[um]";
const char * const MSG_BED_CORRECTION_MID_LEFT_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_MID_LEFT_EN
};
const char MSG_BED_CORRECTION_MID_RIGHT_EN[] PROGMEM = "Mi.Right d[um]";
const char * const MSG_BED_CORRECTION_MID_RIGHT_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_MID_RIGHT_EN
};
const char MSG_BED_CORRECTION_REAR_EN[] PROGMEM = "Rear side [um]"; const char MSG_BED_CORRECTION_REAR_EN[] PROGMEM = "Rear side [um]";
const char MSG_BED_CORRECTION_REAR_CZ[] PROGMEM = "Vzadu [um]"; const char MSG_BED_CORRECTION_REAR_CZ[] PROGMEM = "Vzadu [um]";
const char * const MSG_BED_CORRECTION_REAR_LANG_TABLE[LANG_NUM] PROGMEM = { const char * const MSG_BED_CORRECTION_REAR_LANG_TABLE[LANG_NUM] PROGMEM = {
@ -137,6 +162,21 @@ const char * const MSG_BED_CORRECTION_REAR_LANG_TABLE[LANG_NUM] PROGMEM = {
MSG_BED_CORRECTION_REAR_CZ MSG_BED_CORRECTION_REAR_CZ
}; };
const char MSG_BED_CORRECTION_REAR_CENTR_EN[] PROGMEM = "Re.Centr f[um]";
const char * const MSG_BED_CORRECTION_REAR_CENTR_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_REAR_CENTR_EN
};
const char MSG_BED_CORRECTION_REAR_LEFT_EN[] PROGMEM = "Re.Left g[um]";
const char * const MSG_BED_CORRECTION_REAR_LEFT_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_REAR_LEFT_EN
};
const char MSG_BED_CORRECTION_REAR_RIGHT_EN[] PROGMEM = "Re.Right e[um]";
const char * const MSG_BED_CORRECTION_REAR_RIGHT_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_REAR_RIGHT_EN
};
const char MSG_BED_CORRECTION_RESET_EN[] PROGMEM = "Reset"; const char MSG_BED_CORRECTION_RESET_EN[] PROGMEM = "Reset";
const char * const MSG_BED_CORRECTION_RESET_LANG_TABLE[1] PROGMEM = { const char * const MSG_BED_CORRECTION_RESET_LANG_TABLE[1] PROGMEM = {
MSG_BED_CORRECTION_RESET_EN MSG_BED_CORRECTION_RESET_EN

View File

@ -11,7 +11,7 @@
#define LANG_ID_UNDEFINED 255 #define LANG_ID_UNDEFINED 255
// Default language ID, if no language is selected. // Default language ID, if no language is selected.
#define LANG_ID_DEFAULT LANG_ID_CZ #define LANG_ID_DEFAULT LANG_ID_EN
// Number of languages available in the language table. // Number of languages available in the language table.
#define LANG_NUM 2 #define LANG_NUM 2
@ -60,12 +60,28 @@ extern const char* const MSG_BED_LANG_TABLE[1];
#define MSG_BED LANG_TABLE_SELECT_EXPLICIT(MSG_BED_LANG_TABLE, 0) #define MSG_BED LANG_TABLE_SELECT_EXPLICIT(MSG_BED_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_FRONT_LANG_TABLE[LANG_NUM]; extern const char* const MSG_BED_CORRECTION_FRONT_LANG_TABLE[LANG_NUM];
#define MSG_BED_CORRECTION_FRONT LANG_TABLE_SELECT(MSG_BED_CORRECTION_FRONT_LANG_TABLE) #define MSG_BED_CORRECTION_FRONT LANG_TABLE_SELECT(MSG_BED_CORRECTION_FRONT_LANG_TABLE)
extern const char* const MSG_BED_CORRECTION_FRONT_CENTR_LANG_TABLE[1];
#define MSG_BED_CORRECTION_FRONT_CENTR LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_FRONT_CENTR_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_FRONT_LEFT_LANG_TABLE[1];
#define MSG_BED_CORRECTION_FRONT_LEFT LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_FRONT_LEFT_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_FRONT_RIGHT_LANG_TABLE[1];
#define MSG_BED_CORRECTION_FRONT_RIGHT LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_FRONT_RIGHT_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_LEFT_LANG_TABLE[LANG_NUM]; extern const char* const MSG_BED_CORRECTION_LEFT_LANG_TABLE[LANG_NUM];
#define MSG_BED_CORRECTION_LEFT LANG_TABLE_SELECT(MSG_BED_CORRECTION_LEFT_LANG_TABLE) #define MSG_BED_CORRECTION_LEFT LANG_TABLE_SELECT(MSG_BED_CORRECTION_LEFT_LANG_TABLE)
extern const char* const MSG_BED_CORRECTION_MENU_LANG_TABLE[LANG_NUM]; extern const char* const MSG_BED_CORRECTION_MENU_LANG_TABLE[LANG_NUM];
#define MSG_BED_CORRECTION_MENU LANG_TABLE_SELECT(MSG_BED_CORRECTION_MENU_LANG_TABLE) #define MSG_BED_CORRECTION_MENU LANG_TABLE_SELECT(MSG_BED_CORRECTION_MENU_LANG_TABLE)
extern const char* const MSG_BED_CORRECTION_MID_LEFT_LANG_TABLE[1];
#define MSG_BED_CORRECTION_MID_LEFT LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_MID_LEFT_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_MID_RIGHT_LANG_TABLE[1];
#define MSG_BED_CORRECTION_MID_RIGHT LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_MID_RIGHT_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_REAR_LANG_TABLE[LANG_NUM]; extern const char* const MSG_BED_CORRECTION_REAR_LANG_TABLE[LANG_NUM];
#define MSG_BED_CORRECTION_REAR LANG_TABLE_SELECT(MSG_BED_CORRECTION_REAR_LANG_TABLE) #define MSG_BED_CORRECTION_REAR LANG_TABLE_SELECT(MSG_BED_CORRECTION_REAR_LANG_TABLE)
extern const char* const MSG_BED_CORRECTION_REAR_CENTR_LANG_TABLE[1];
#define MSG_BED_CORRECTION_REAR_CENTR LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_REAR_CENTR_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_REAR_LEFT_LANG_TABLE[1];
#define MSG_BED_CORRECTION_REAR_LEFT LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_REAR_LEFT_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_REAR_RIGHT_LANG_TABLE[1];
#define MSG_BED_CORRECTION_REAR_RIGHT LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_REAR_RIGHT_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_RESET_LANG_TABLE[1]; extern const char* const MSG_BED_CORRECTION_RESET_LANG_TABLE[1];
#define MSG_BED_CORRECTION_RESET LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_RESET_LANG_TABLE, 0) #define MSG_BED_CORRECTION_RESET LANG_TABLE_SELECT_EXPLICIT(MSG_BED_CORRECTION_RESET_LANG_TABLE, 0)
extern const char* const MSG_BED_CORRECTION_RIGHT_LANG_TABLE[LANG_NUM]; extern const char* const MSG_BED_CORRECTION_RIGHT_LANG_TABLE[LANG_NUM];

View File

@ -275,10 +275,23 @@
#define(length=20, lines=8) MSG_PAPER "Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately." #define(length=20, lines=8) MSG_PAPER "Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."
#define MSG_BED_CORRECTION_MENU "Bed level correct" #define MSG_BED_CORRECTION_MENU "Bed level correct"
/* Stock Bed correction
#define(length=14,lines=1) MSG_BED_CORRECTION_LEFT "Left side [um]" #define(length=14,lines=1) MSG_BED_CORRECTION_LEFT "Left side [um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_RIGHT "Right side[um]" #define(length=14,lines=1) MSG_BED_CORRECTION_RIGHT "Right side[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_FRONT "Front side[um]" #define(length=14,lines=1) MSG_BED_CORRECTION_FRONT "Front side[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_REAR "Rear side [um]" #define(length=14,lines=1) MSG_BED_CORRECTION_REAR "Rear side [um]"
*/
// Hyperfine Bed Tuning
#define(length=14,lines=1) MSG_BED_CORRECTION_FRONT_LEFT "Fr.Left a[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_FRONT_CENTR "Fr.Centr b[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_FRONT_RIGHT "Fr.Right c[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_MID_RIGHT "Mi.Right d[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_REAR_RIGHT "Re.Right e[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_REAR_CENTR "Re.Centr f[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_REAR_LEFT "Re.Left g[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_MID_LEFT "Mi.Left h[um]"
// end Hyperfine Bed Tuning
#define MSG_BED_CORRECTION_RESET "Reset" #define MSG_BED_CORRECTION_RESET "Reset"
#define MSG_MESH_BED_LEVELING "Mesh Bed Leveling" #define MSG_MESH_BED_LEVELING "Mesh Bed Leveling"

View File

@ -73,6 +73,7 @@ union MenuData
char ip_str[3*4+3+1]; char ip_str[3*4+3+1];
} supportMenu; } supportMenu;
// Hyperfine Bed Tuning
struct AdjustBed struct AdjustBed
{ {
// 6+13+16=35B // 6+13+16=35B
@ -80,16 +81,25 @@ union MenuData
// the return menu and encoder state. // the return menu and encoder state.
struct EditMenuParentState editMenuParentState; struct EditMenuParentState editMenuParentState;
int8_t status; int8_t status;
int8_t left; int8_t front_left;
int8_t right; int8_t front_centr;
int8_t front; int8_t front_right;
int8_t rear; int8_t mid_right;
int left2; int8_t rear_right;
int right2; int8_t rear_centr;
int front2; int8_t rear_left;
int rear2; int8_t mid_left;
int front_left2;
int front_centr2;
int front_right2;
int mid_right2;
int rear_right2;
int rear_centr2;
int rear_left2;
int mid_left2;
} adjustBed; } adjustBed;
// End Hyperfine bed Tuning
// editMenuParentState is used when an edit menu is entered, so it knows // editMenuParentState is used when an edit menu is entered, so it knows
// the return menu and encoder state. // the return menu and encoder state.
struct EditMenuParentState editMenuParentState; struct EditMenuParentState editMenuParentState;
@ -1703,7 +1713,10 @@ static void lcd_support_menu()
MENU_ITEM(back, PSTR("------------"), lcd_main_menu); MENU_ITEM(back, PSTR("------------"), lcd_main_menu);
MENU_ITEM(back, MSG_DATE, lcd_main_menu); MENU_ITEM(back, MSG_DATE, lcd_main_menu);
MENU_ITEM(back, PSTR(__DATE__), lcd_main_menu); MENU_ITEM(back, PSTR(__DATE__), lcd_main_menu);
MENU_ITEM(back, PSTR(__TIME__), lcd_main_menu);
MENU_ITEM(back, PSTR(STRING_CONFIG_H_AUTHOR), lcd_main_menu);
// Show the FlashAir IP address, if the card is available. // Show the FlashAir IP address, if the card is available.
if (menuData.supportMenu.is_flash_air) { if (menuData.supportMenu.is_flash_air) {
MENU_ITEM(back, PSTR("------------"), lcd_main_menu); MENU_ITEM(back, PSTR("------------"), lcd_main_menu);
@ -2301,13 +2314,18 @@ static void lcd_babystep_z() {
static void lcd_adjust_bed(); static void lcd_adjust_bed();
// Hyperfine Bed Tuning
static void lcd_adjust_bed_reset() static void lcd_adjust_bed_reset()
{ {
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1); eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_LEFT , 0); eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, 0); eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT, 0); eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR , 0); eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_LEFT , 0);
lcd_goto_menu(lcd_adjust_bed, 0, false); lcd_goto_menu(lcd_adjust_bed, 0, false);
// Because we did not leave the menu, the menuData did not reset. // Because we did not leave the menu, the menuData did not reset.
// Force refresh of the bed leveling data. // Force refresh of the bed leveling data.
@ -2315,17 +2333,24 @@ static void lcd_adjust_bed_reset()
} }
void adjust_bed_reset() { void adjust_bed_reset() {
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1); eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_LEFT, 0); eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, 0); eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT, 0); eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR, 0); eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT , 0);
menuData.adjustBed.left = menuData.adjustBed.left2 = 0; eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR , 0);
menuData.adjustBed.right = menuData.adjustBed.right2 = 0; eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT , 0);
menuData.adjustBed.front = menuData.adjustBed.front2 = 0; eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_LEFT , 0);
menuData.adjustBed.rear = menuData.adjustBed.rear2 = 0;
} menuData.adjustBed.front_left = menuData.adjustBed.front_left2 = 0;
#define BED_ADJUSTMENT_UM_MAX 50 menuData.adjustBed.front_centr = menuData.adjustBed.front_centr2 = 0;
menuData.adjustBed.front_right = menuData.adjustBed.front_right2 = 0;
menuData.adjustBed.mid_right = menuData.adjustBed.mid_right2 = 0;
menuData.adjustBed.rear_right = menuData.adjustBed.rear_right2 = 0;
menuData.adjustBed.rear_centr = menuData.adjustBed.rear_centr2 = 0;
menuData.adjustBed.rear_left = menuData.adjustBed.rear_left2 = 0;
menuData.adjustBed.mid_left = menuData.adjustBed.mid_left2 = 0;}
#define BED_ADJUSTMENT_UM_MAX 99
static void lcd_adjust_bed() static void lcd_adjust_bed()
{ {
@ -2334,45 +2359,68 @@ static void lcd_adjust_bed()
// Initialize its status. // Initialize its status.
menuData.adjustBed.status = 1; menuData.adjustBed.status = 1;
bool valid = false; bool valid = false;
menuData.adjustBed.left = menuData.adjustBed.left2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_LEFT); menuData.adjustBed.front_left = menuData.adjustBed.front_left2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT);
menuData.adjustBed.right = menuData.adjustBed.right2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_RIGHT); menuData.adjustBed.front_centr = menuData.adjustBed.front_centr2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT);
menuData.adjustBed.front = menuData.adjustBed.front2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT); menuData.adjustBed.front_right = menuData.adjustBed.front_right2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT);
menuData.adjustBed.rear = menuData.adjustBed.rear2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR); menuData.adjustBed.mid_right = menuData.adjustBed.mid_right2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_RIGHT);
menuData.adjustBed.rear_right = menuData.adjustBed.rear_right2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT);
menuData.adjustBed.rear_centr = menuData.adjustBed.rear_centr2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR);
menuData.adjustBed.rear_left = menuData.adjustBed.rear_left2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT);
menuData.adjustBed.mid_left = menuData.adjustBed.mid_left2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_LEFT);
if (eeprom_read_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID) == 1 && if (eeprom_read_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID) == 1 &&
menuData.adjustBed.left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.left <= BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_left <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.right <= BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_centr >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_centr <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.front >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front <= BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_right <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.rear >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear <= BED_ADJUSTMENT_UM_MAX) menuData.adjustBed.mid_right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.mid_right <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.rear_right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear_right <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.rear_centr >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear_centr <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.rear_left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear_left <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.mid_left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.mid_left <= BED_ADJUSTMENT_UM_MAX)
valid = true; valid = true;
if (! valid) { if (! valid) {
// Reset the values: simulate an edit. // Reset the values: simulate an edit.
menuData.adjustBed.left2 = 0; menuData.adjustBed.front_left2 = 0;
menuData.adjustBed.right2 = 0; menuData.adjustBed.front_centr2 = 0;
menuData.adjustBed.front2 = 0; menuData.adjustBed.front_right2 = 0;
menuData.adjustBed.rear2 = 0; menuData.adjustBed.mid_right2 = 0;
menuData.adjustBed.rear_right2 = 0;
menuData.adjustBed.rear_centr2 = 0;
menuData.adjustBed.rear_left2 = 0;
menuData.adjustBed.mid_left2 = 0;
} }
lcdDrawUpdate = 1; lcdDrawUpdate = 1;
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1); eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1);
} }
if (menuData.adjustBed.left != menuData.adjustBed.left2) if (menuData.adjustBed.front_left != menuData.adjustBed.front_left2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_LEFT, menuData.adjustBed.left = menuData.adjustBed.left2); eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT, menuData.adjustBed.front_left = menuData.adjustBed.front_left2);
if (menuData.adjustBed.right != menuData.adjustBed.right2) if (menuData.adjustBed.front_centr != menuData.adjustBed.front_centr2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, menuData.adjustBed.right = menuData.adjustBed.right2); eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT, menuData.adjustBed.front_centr = menuData.adjustBed.front_centr2);
if (menuData.adjustBed.front != menuData.adjustBed.front2) if (menuData.adjustBed.front_right != menuData.adjustBed.front_right2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT, menuData.adjustBed.front = menuData.adjustBed.front2); eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT, menuData.adjustBed.front_right = menuData.adjustBed.front_right2);
if (menuData.adjustBed.rear != menuData.adjustBed.rear2) if (menuData.adjustBed.mid_right != menuData.adjustBed.mid_right2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR, menuData.adjustBed.rear = menuData.adjustBed.rear2); eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, menuData.adjustBed.mid_right = menuData.adjustBed.mid_right2);
if (menuData.adjustBed.rear_right != menuData.adjustBed.rear_right2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT, menuData.adjustBed.rear_right = menuData.adjustBed.rear_right2);
if (menuData.adjustBed.rear_centr != menuData.adjustBed.rear_centr2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR, menuData.adjustBed.rear_centr = menuData.adjustBed.rear_centr2);
if (menuData.adjustBed.rear_left != menuData.adjustBed.rear_left2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT, menuData.adjustBed.rear_left = menuData.adjustBed.rear_left2);
if (menuData.adjustBed.mid_left != menuData.adjustBed.mid_left2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_LEFT, menuData.adjustBed.mid_left = menuData.adjustBed.mid_left2);
START_MENU(); START_MENU();
MENU_ITEM(back, MSG_SETTINGS, lcd_calibration_menu); MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT_LEFT, &menuData.adjustBed.front_left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_LEFT, &menuData.adjustBed.left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT_CENTR, &menuData.adjustBed.front_centr2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_RIGHT, &menuData.adjustBed.right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT_RIGHT, &menuData.adjustBed.front_right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT, &menuData.adjustBed.front2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_MID_RIGHT, &menuData.adjustBed.mid_right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR, &menuData.adjustBed.rear2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX); MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR_RIGHT, &menuData.adjustBed.rear_right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM(function, MSG_BED_CORRECTION_RESET, lcd_adjust_bed_reset); MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR_CENTR, &menuData.adjustBed.rear_centr2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR_LEFT, &menuData.adjustBed.rear_left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_MID_LEFT, &menuData.adjustBed.mid_left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
END_MENU(); END_MENU();
} }
// End Hyperfine Bed Tuning
void pid_extruder() { void pid_extruder() {