#ifndef ULTI_LCD2_MENU_MATERIAL_H #define ULTI_LCD2_MENU_MATERIAL_H /* EEPROM structure: Location Size Total: 0x0000-0x1000 Settings: 0x0064-0x00E0 0x7C? (careful with this one) ChangeMatSettings: 0x0410-0x0334 (18*2)=0x24 ChangeMatSettings: 0x0440-0x0352 (18)=0x12 FirstRunDone: 0x0400-0x0400 0x01 RuntimeStats: 0x0700-0x071C 0x1C Materials: 0x0800-0x09B1 (8+16)*18+1=0x1B1 ExtraTemperatures: 0x0a00-0x0C40 (16*18*2)=0x240 RetractionSettings:0x0c50-0x0FB0 (16*18*3)=0x360 Byte for retraction speed. Int16 for retraction length. 3 bytes per material+nozzle combo. */ //Introducing extra set of material temperatures, one for each possible nozzle. //Maximum total nozzles configurations per material #define MAX_MATERIAL_NOZZLE_CONFIGURATIONS 16 //Total material temperatures that are currently being used. (0.4, 0.25, 0.6, 0.8, 1.0) #define MATERIAL_NOZZLE_COUNT 5 #define MATERIAL_NAME_SIZE 8 struct materialSettings { int16_t temperature[MAX_MATERIAL_NOZZLE_CONFIGURATIONS]; float retraction_length[MAX_MATERIAL_NOZZLE_CONFIGURATIONS]; float retraction_speed[MAX_MATERIAL_NOZZLE_CONFIGURATIONS]; #if TEMP_SENSOR_BED != 0 int16_t bed_temperature; #endif uint8_t fan_speed; //0-100% of requested speed by GCode int16_t flow; //Flow modification in % float diameter; //Filament diameter in mm char name[MATERIAL_NAME_SIZE]; int16_t change_temperature; //Temperature for the hotend during the change material procedure. int8_t change_preheat_wait_time; //when reaching the change material temperature, wait for this amount of seconds for the temperature to stabalize and the material to heatup. }; extern struct materialSettings material[EXTRUDERS]; #define FILAMENT_REVERSAL_LENGTH (FILAMANT_BOWDEN_LENGTH + 50) #define FILAMENT_REVERSAL_SPEED 80 #define FILAMENT_LONG_MOVE_ACCELERATION 20 #define FILAMENT_LONG_MOVE_JERK 1 #define FILAMENT_FORWARD_LENGTH (FILAMANT_BOWDEN_LENGTH - 50) #define FILAMENT_INSERT_SPEED 2 //Initial insert speed to grab the filament. #define FILAMENT_INSERT_FAST_SPEED 80 //Speed during the forward length #define FILAMENT_INSERT_EXTRUDE_SPEED 1 //Final speed when extruding #define EEPROM_RETRACTION_LENGTH_SCALE 256 #define EEPROM_RETRACTION_SPEED_SCALE 4 #define EEPROM_MATERIAL_SETTINGS_OFFSET 0x800 #define EEPROM_MATERIAL_EXTRA_TEMPERATURES_OFFSET 0xa00 #define EEPROM_MATERIAL_EXTRA_RETRACTION_SETTINGS_OFFSET 0xc50 #define EEPROM_MATERIAL_CHANGE_TEMPERATURE_OFFSET 0x410 #define EEPROM_MATERIAL_CHANGE_WAIT_TIME_OFFSET 0x440 #define EEPROM_MATERIAL_SETTINGS_MAX_COUNT 16 #define EEPROM_MATERIAL_SETTINGS_SIZE (8 + 16) #define EEPROM_MATERIAL_COUNT_OFFSET() ((uint8_t*)(EEPROM_MATERIAL_SETTINGS_OFFSET + 0)) #define EEPROM_MATERIAL_NAME_OFFSET(n) ((uint8_t*)(EEPROM_MATERIAL_SETTINGS_OFFSET + 1 + EEPROM_MATERIAL_SETTINGS_SIZE * uint16_t(n))) #define EEPROM_MATERIAL_TEMPERATURE_OFFSET(n) ((uint16_t*)(EEPROM_MATERIAL_SETTINGS_OFFSET + 1 + EEPROM_MATERIAL_SETTINGS_SIZE * uint16_t(n) + MATERIAL_NAME_SIZE)) #define EEPROM_MATERIAL_EXTRA_TEMPERATURE_OFFSET(n, m) ((uint16_t*)(EEPROM_MATERIAL_EXTRA_TEMPERATURES_OFFSET + MAX_MATERIAL_NOZZLE_CONFIGURATIONS * 2 * uint16_t(n) + 2 * uint16_t(m))) #define EEPROM_MATERIAL_EXTRA_RETRACTION_LENGTH_OFFSET(n, m) ((uint16_t*)(EEPROM_MATERIAL_EXTRA_RETRACTION_SETTINGS_OFFSET + MAX_MATERIAL_NOZZLE_CONFIGURATIONS * 3 * uint16_t(n) + 3 * uint16_t(m))) #define EEPROM_MATERIAL_EXTRA_RETRACTION_SPEED_OFFSET(n, m) ((uint8_t*)(EEPROM_MATERIAL_EXTRA_RETRACTION_SETTINGS_OFFSET + MAX_MATERIAL_NOZZLE_CONFIGURATIONS * 3 * uint16_t(n) + 3 * uint16_t(m) + 2)) #define EEPROM_MATERIAL_BED_TEMPERATURE_OFFSET(n) ((uint16_t*)(EEPROM_MATERIAL_SETTINGS_OFFSET + 1 + EEPROM_MATERIAL_SETTINGS_SIZE * uint16_t(n) + MATERIAL_NAME_SIZE + 2)) #define EEPROM_MATERIAL_FAN_SPEED_OFFSET(n) ((uint8_t*)(EEPROM_MATERIAL_SETTINGS_OFFSET + 1 + EEPROM_MATERIAL_SETTINGS_SIZE * uint16_t(n) + MATERIAL_NAME_SIZE + 4)) #define EEPROM_MATERIAL_FLOW_OFFSET(n) ((uint16_t*)(EEPROM_MATERIAL_SETTINGS_OFFSET + 1 + EEPROM_MATERIAL_SETTINGS_SIZE * uint16_t(n) + MATERIAL_NAME_SIZE + 5)) #define EEPROM_MATERIAL_DIAMETER_OFFSET(n) ((float*)(EEPROM_MATERIAL_SETTINGS_OFFSET + 1 + EEPROM_MATERIAL_SETTINGS_SIZE * uint16_t(n) + MATERIAL_NAME_SIZE + 7)) #define EEPROM_MATERIAL_CHANGE_TEMPERATURE(n) ((uint16_t*)(EEPROM_MATERIAL_CHANGE_TEMPERATURE_OFFSET + uint16_t(n) * 2)) #define EEPROM_MATERIAL_CHANGE_WAIT_TIME(n) ((uint8_t*)(EEPROM_MATERIAL_CHANGE_WAIT_TIME_OFFSET + uint16_t(n))) void lcd_menu_material(); void lcd_change_to_menu_change_material(menuFunc_t return_menu); void lcd_change_to_menu_insert_material(menuFunc_t return_menu); bool lcd_material_verify_material_settings(); void lcd_material_reset_defaults(); void lcd_material_set_material(uint8_t nr, uint8_t e); void lcd_material_store_material(uint8_t nr); void lcd_material_read_current_material(); void lcd_material_store_current_material(); // Oh yes, these totally do not belong here. But I need to put them somewhere. // Anyhow, these functions convert a nozzle size to an index in the material-temperature setting array or vise-versa. uint8_t nozzleSizeToTemperatureIndex(float nozzle_size); float nozzleIndexToNozzleSize(uint8_t nozzle_index); #endif//ULTI_LCD2_MENU_MATERIAL_H