93 lines
5.3 KiB
C
Executable File
93 lines
5.3 KiB
C
Executable File
#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
|