1
0
forked from me/IronOS

Fixing up settings

Split advanced settings
Fix menu button handling
This commit is contained in:
Ben V. Brown
2017-10-18 19:43:55 +11:00
parent aec760e4e7
commit 046f2df6a1
6 changed files with 128 additions and 78 deletions

View File

@@ -21,13 +21,14 @@ typedef struct {
uint16_t SleepTemp; //temp to drop to in sleep
uint8_t SleepTime; //minutes timeout to sleep
uint8_t cutoutSetting; // The voltage we cut out at for under voltage
uint8_t OrientationMode; //If true we want to invert the display for lefties
uint8_t sensitivity; //Sensitivity of accelerometer (5 bits)
uint8_t autoStartMode; //Should the unit automatically jump straight into soldering mode when power is applied
uint8_t OrientationMode:2; //If true we want to invert the display for lefties
uint8_t sensitivity :4; //Sensitivity of accelerometer (5 bits)
uint8_t autoStartMode :2; //Should the unit automatically jump straight into soldering mode when power is applied
uint8_t ShutdownTime; //Time until unit shuts down if left alone
uint8_t boostModeEnabled; //Boost mode swaps BUT_A in soldering mode to temporary soldering temp over-ride
uint8_t coolingTempBlink; //Should the temperature blink on the cool down screen until its <50C
uint8_t advancedScreens; //If enabled we draw more detailed screens with smaller fonts
uint8_t boostModeEnabled :1; //Boost mode swaps BUT_A in soldering mode to temporary soldering temp over-ride
uint8_t coolingTempBlink :1; //Should the temperature blink on the cool down screen until its <50C
uint8_t detailedIDLE :1; //Detailed idle screen
uint8_t detailedSoldering :1; //Detailed soldering screens
uint8_t temperatureInF; //Should the temp be in F or C (true is F)
uint16_t voltageDiv; //Voltage divisor factor
uint16_t BoostTemp; //Boost mode set point for the iron

View File

@@ -8,8 +8,8 @@
#ifndef TRANSLATION_H_
#define TRANSLATION_H_
extern const char* SettingsLongNames[15];
extern const char* SettingsShortNames[15];
extern const char* SettingsLongNames[16];
extern const char* SettingsShortNames[16];
extern const char* SettingsCalibrationWarning;
extern const char* UVLOWarningString;
extern const char* SleepingSimpleString;

View File

@@ -77,7 +77,8 @@ void resetSettings() {
systemSettings.SolderingTemp = 320; //Default soldering temp is 320.0 C
systemSettings.cutoutSetting = 0; //default to no cut-off voltage
systemSettings.version = SETTINGSVERSION; //Store the version number to allow for easier upgrades
systemSettings.advancedScreens = 0; //Do we show detailed screens?
systemSettings.detailedSoldering = 0; // Detailed soldering screen
systemSettings.detailedIDLE=0; // Detailed idle screen (off for first time users)
systemSettings.OrientationMode = 2; //Default to automatic
systemSettings.sensitivity = 7; //Default high sensitivity
systemSettings.voltageDiv = 117; //Default divider from schematic

View File

@@ -7,7 +7,7 @@
#include "Translation.h"
#ifdef LANG_EN
const char* SettingsLongNames[15] = {
const char* SettingsLongNames[16] = {
/*These are all the help text for all the settings.*/
/*No requirements on spacing or length*/
"Power source. Sets cutoff voltage. <DC 10V> <S 3.3V per cell>", //Power Source
@@ -16,7 +16,7 @@ const char* SettingsLongNames[15] = {
"Shutdown Timeout <Minutes>", //Shutdown Time
"Motion Sensitivity <0.Off 1.least sensitive 9.most sensitive>", //Motion Sensitivity
"Temperature Unit <C=Celsius F=Fahrenheit>", //Temp Unit
"Display detailed information in a smaller font.", //Detailed Information
"Display detailed information in a smaller font on the idle screen.", //Detailed Information
"Display Orientation <A. Automatic L. Left Handed R. Right Handed>", //Orientation
"Enable front key enters boost mode 450C mode when soldering", //Boost enable
"Temperature when in \"boost\" mode", //Boost Temp
@@ -25,11 +25,12 @@ const char* SettingsLongNames[15] = {
"Calibrate tip offset.", //Calibrate Tip
"Reset all settings", //Reset Settings
"VIN Calibration. Buttons adjust, long press to exit", //VIN Cal
"Display detailed information while soldering",//ADV SLD
};
const char* SettingsCalibrationWarning = "Please ensure the tip is at room temperature before continuing!";
const char* UVLOWarningString = "LOW VOLT"; //Fixed width 8 chars
const char* SleepingSimpleString = "ZZzz"; // Must be <= 4 chars
const char* SleepingSimpleString = "Zzzz"; // Must be <= 4 chars
const char* SleepingAdvancedString = "Sleeping..."; // <=17 chars
const char* WarningSimpleString = "HOT!"; //Must be <= 4 chars
const char* WarningAdvancedString = "WARNING! TIP HOT!";
@@ -41,14 +42,14 @@ const char SettingLeftChar = 'L';
const char SettingAutoChar = 'A';
#endif
const char* SettingsShortNames[15] = { /**/
const char* SettingsShortNames[16] = { /**/
"PWRSC ", // Power Source (DC or batt)
"STMP ", // Sleep Temperature
"STME ", // Sleep Timeout
"SHTME ", // Shutdown Temperature
"MSENSE ", // Motion sensitivity level
"TMPUNT ", //Temp in F and C
"ADVDSP ", // Advanced display mode enable
"ADVIDL ", // Advanced idle display mode enable
"DSPROT ", // Display rotation mode
"BOOST ", // Boost enabled
"BTMP ", // Boost temperature
@@ -56,4 +57,6 @@ const char* SettingsShortNames[15] = { /**/
"CLBLNK ", // Cooldown blink
"TMP CAL?", // Temperature calibration enter menu
"RESET? ", // Settings reset command
"CAL VIN?", };
"CAL VIN?",
"ADVSLD ", //advanced soldering screens
};

View File

@@ -21,8 +21,11 @@ static void settings_setSensitivity(void);
static void settings_displaySensitivity(void);
static void settings_setTempF(void);
static void settings_displayTempF(void);
static void settings_setAdvancedScreens(void);
static void settings_displayAdvancedScreens(void);
static void settings_setAdvancedSolderingScreens(void);
static void settings_displayAdvancedSolderingScreens(void);
static void settings_setAdvancedIDLEScreens(void);
static void settings_displayAdvancedIDLEScreens(void);
static void settings_setDisplayRotation(void);
static void settings_displayDisplayRotation(void);
static void settings_setBoostModeEnabled(void);
@@ -48,7 +51,8 @@ const menuitem settingsMenu[] = { /*Struct used for all settings options in the
{ (const char*) SettingsLongNames[3], { settings_setShutdownTime }, { settings_displayShutdownTime } }, /*Shutdown Time*/
{ (const char*) SettingsLongNames[4], { settings_setSensitivity }, { settings_displaySensitivity } },/* Motion Sensitivity*/
{ (const char*) SettingsLongNames[5], { settings_setTempF }, { settings_displayTempF } },/* Motion Sensitivity*/
{ (const char*) SettingsLongNames[6], { settings_setAdvancedScreens }, { settings_displayAdvancedScreens } },/* Advanced screens*/
{ (const char*) SettingsLongNames[6], { settings_setAdvancedIDLEScreens }, { settings_displayAdvancedIDLEScreens } },/* Advanced screens*/
{ (const char*) SettingsLongNames[15], { settings_setAdvancedSolderingScreens }, { settings_displayAdvancedSolderingScreens } },/* Advanced screens*/
{ (const char*) SettingsLongNames[7], { settings_setDisplayRotation }, { settings_displayDisplayRotation } }, /*Display Rotation*/
{ (const char*) SettingsLongNames[8], { settings_setBoostModeEnabled }, { settings_displayBoostModeEnabled } }, /*Enable Boost*/
{ (const char*) SettingsLongNames[9], { settings_setBoostTemp }, { settings_displayBoostTemp } }, /*Boost Temp*/
@@ -129,16 +133,29 @@ static void settings_displaySensitivity(void) {
lcd.printNumber(systemSettings.sensitivity, 1);
}
static void settings_setAdvancedScreens(void) {
systemSettings.advancedScreens = !systemSettings.advancedScreens;
static void settings_setAdvancedSolderingScreens(void) {
systemSettings.detailedSoldering = !systemSettings.detailedSoldering;
}
static void settings_displayAdvancedScreens(void) {
lcd.print(SettingsShortNames[6]);
if (systemSettings.advancedScreens)
static void settings_displayAdvancedSolderingScreens(void) {
lcd.print(SettingsShortNames[15]);
if (systemSettings.detailedSoldering)
lcd.drawChar(SettingTrueChar);
else
lcd.drawChar(SettingFalseChar);
}
static void settings_setAdvancedIDLEScreens(void) {
systemSettings.detailedIDLE = !systemSettings.detailedIDLE;
}
static void settings_displayAdvancedIDLEScreens(void) {
lcd.print(SettingsShortNames[6]);
if (systemSettings.detailedIDLE)
lcd.drawChar(SettingTrueChar);
else
lcd.drawChar(SettingFalseChar);
}
static void settings_setDisplayRotation(void) {
systemSettings.OrientationMode++;
systemSettings.OrientationMode = systemSettings.OrientationMode % 3;
@@ -169,9 +186,14 @@ static void settings_displayBoostModeEnabled(void) {
lcd.drawChar(SettingFalseChar);
}
static void settings_setBoostTemp(void) {
systemSettings.BoostTemp += 10; //Go up 10C at a time
if (systemSettings.BoostTemp > 450)
systemSettings.BoostTemp = 250; //loop back at 250
systemSettings.BoostTemp += 10; //Go up 10 at a time
if (systemSettings.temperatureInF) {
if (systemSettings.BoostTemp > 850)
systemSettings.BoostTemp = 480; //loop back at 250
} else {
if (systemSettings.BoostTemp > 450)
systemSettings.BoostTemp = 250; //loop back at 250
}
}
static void settings_displayBoostTemp(void) {
lcd.print(SettingsShortNames[9]);

View File

@@ -173,7 +173,7 @@ static bool checkVoltageForExit() {
if ((v < lookupVoltageLevel(systemSettings.cutoutSetting))) {
lcd.clearScreen();
lcd.setCursor(0, 0);
if (systemSettings.advancedScreens) {
if (systemSettings.detailedSoldering) {
lcd.setFont(1);
lcd.print("Undervoltage");
lcd.setCursor(0, 8);
@@ -295,13 +295,49 @@ static void gui_settingsMenu() {
lcd.setFont(0);
lcd.clearScreen();
lcd.setCursor(0, 0);
ButtonState buttons = getButtonState();
switch (buttons) {
case BUTTON_BOTH:
earlyExit = true; //will make us exit next loop
break;
case BUTTON_F_SHORT:
//increment
if (descriptionStart == 0)
settingsMenu[currentScreen].incrementHandler.func();
else
descriptionStart = 0;
break;
case BUTTON_B_SHORT:
if (descriptionStart == 0)
currentScreen++;
else
descriptionStart = 0;
break;
case BUTTON_F_LONG:
if (HAL_GetTick() - autoRepeatTimer > 200) {
settingsMenu[currentScreen].incrementHandler.func();
autoRepeatTimer = HAL_GetTick();
}
break;
case BUTTON_B_LONG:
if (HAL_GetTick() - autoRepeatTimer > 200) {
currentScreen++;
autoRepeatTimer = HAL_GetTick();
}
break;
case BUTTON_NONE:
break;
}
if (HAL_GetTick() - lastButtonTime < 4000) {
settingsMenu[currentScreen].draw.func();
descriptionStart = 0;
} else {
//Draw description
//draw string starting from descriptionOffset
int16_t maxOffset = strlen(settingsMenu[currentScreen].description)+5;
int16_t maxOffset = strlen(settingsMenu[currentScreen].description) + 5;
if (descriptionStart == 0)
descriptionStart = HAL_GetTick();
@@ -310,37 +346,7 @@ static void gui_settingsMenu() {
lcd.setCursor(12 * (7 - descriptionOffset), 0);
lcd.print(settingsMenu[currentScreen].description);
}
ButtonState buttons = getButtonState();
if (descriptionStart | (HAL_GetTick() - descriptionStart < 500))
buttons = BUTTON_NONE;
else {
switch (buttons) {
case BUTTON_BOTH:
earlyExit = true; //will make us exit next loop
break;
case BUTTON_F_SHORT:
//increment
settingsMenu[currentScreen].incrementHandler.func();
break;
case BUTTON_B_SHORT:
currentScreen++;
break;
case BUTTON_F_LONG:
if (HAL_GetTick() - autoRepeatTimer > 200) {
settingsMenu[currentScreen].incrementHandler.func();
autoRepeatTimer = HAL_GetTick();
}
break;
case BUTTON_B_LONG:
if (HAL_GetTick() - autoRepeatTimer > 200) {
currentScreen++;
autoRepeatTimer = HAL_GetTick();
}
break;
case BUTTON_NONE:
break;
}
}
lcd.refresh(); //update the LCD
GUIDelay();
HAL_IWDG_Refresh(&hiwdg);
@@ -350,13 +356,13 @@ static void gui_settingsMenu() {
resetSettings();
saveSettings();
}
static void gui_showTipTempWarning() {
static int gui_showTipTempWarning() {
for (;;) {
uint16_t tipTemp = tipMeasurementToC(getTipRawTemp(0));
lcd.clearScreen();
lcd.setCursor(0, 0);
if (systemSettings.advancedScreens) {
if (systemSettings.detailedSoldering) {
lcd.setFont(1);
lcd.print(WarningAdvancedString);
lcd.setCursor(0, 8);
@@ -389,11 +395,13 @@ static void gui_showTipTempWarning() {
}
lcd.refresh();
ButtonState buttons = getButtonState();
if (buttons == BUTTON_B_SHORT || buttons == BUTTON_F_SHORT || buttons == BUTTON_BOTH)
return;
if (buttons == BUTTON_F_SHORT)
return 1;
else if (buttons == BUTTON_B_SHORT || buttons == BUTTON_BOTH)
return 0;
if (tipTemp < 30)
return;
return 0;
HAL_IWDG_Refresh(&hiwdg);
GUIDelay();
@@ -424,7 +432,7 @@ static int gui_SolderingSleepingMode() {
lcd.clearScreen();
lcd.setCursor(0, 0);
if (systemSettings.advancedScreens) {
if (systemSettings.detailedSoldering) {
lcd.setFont(1);
lcd.print(SleepingAdvancedString);
lcd.setCursor(0, 8);
@@ -449,7 +457,7 @@ static int gui_SolderingSleepingMode() {
else
lcd.drawSymbol(1);
}
if (systemSettings.ShutdownTime)//only allow shutdown exit if time > 0
if (systemSettings.ShutdownTime) //only allow shutdown exit if time > 0
if (lastMovementTime)
if (((uint32_t) (HAL_GetTick() - lastMovementTime))
> (uint32_t) (systemSettings.ShutdownTime * 60 * 1000)) {
@@ -646,15 +654,9 @@ void startGUITask(void const * argument) {
/*
for (;;) {
HAL_IWDG_Refresh(&hiwdg);
lcd.clearScreen();
lcd.setCursor(0, 0);
lcd.setFont(0);
lcd.print("");
lcd.refresh();
osDelay(100);
HAL_IWDG_Refresh(&hiwdg);
}*/
}
*/
//^ Kept here for a way to block this thread
for (;;) {
ButtonState buttons = getButtonState();
@@ -717,7 +719,8 @@ void startGUITask(void const * argument) {
if (tempWarningState == 0) {
currentlyActiveTemperatureTarget = 0; //ensure tip is off
lcd.displayOnOff(true); //force LCD on
gui_showTipTempWarning();
if (gui_showTipTempWarning() == 1)
gui_solderingMode(); //re-enter into soldering mode if user pressed the front button
tempWarningState = 1;
}
} else
@@ -725,7 +728,7 @@ void startGUITask(void const * argument) {
// Clear the lcd buffer
lcd.clearScreen();
lcd.setCursor(0, 0);
if (systemSettings.advancedScreens) {
if (systemSettings.detailedIDLE) {
lcd.setFont(1);
if (tipTemp > 470) {
lcd.print("Tip Disconnected!");
@@ -853,7 +856,28 @@ void startMOVTask(void const * argument) {
datay[currentPointer] = ty;
dataz[currentPointer] = tz;
currentPointer = (currentPointer + 1) % MOVFilter;
#if ACCELDEBUG
//Debug for Accel
avgx = avgy = avgz = 0;
for (uint8_t i = 0; i < MOVFilter; i++) {
avgx += datax[i];
avgy += datay[i];
avgz += dataz[i];
}
avgx /= MOVFilter;
avgy /= MOVFilter;
avgz /= MOVFilter;
lcd.setFont(1);
lcd.setCursor(0,0);
lcd.printNumber(abs(avgx - tx), 5);
lcd.print(" ");
lcd.printNumber(abs(avgy - ty), 5);
lcd.setCursor(0, 8);
lcd.printNumber(abs(avgz - tz), 5);
lcd.refresh();
#endif
//Only run the actual processing if the sensitivity is set (aka we are enabled)
if (systemSettings.sensitivity) {
//calculate averages
@@ -874,7 +898,6 @@ void startMOVTask(void const * argument) {
lastMovementTime = HAL_GetTick();
}
}
osDelay(20); //Slow down update rate