From 046f2df6a10d74aee48bcfd7b54008a90d211a8c Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Wed, 18 Oct 2017 19:43:55 +1100 Subject: [PATCH] Fixing up settings Split advanced settings Fix menu button handling --- workspace/TS100/inc/Settings.h | 13 +-- workspace/TS100/inc/Translation.h | 4 +- workspace/TS100/src/Settings.cpp | 3 +- workspace/TS100/src/Translation.c | 15 ++-- workspace/TS100/src/gui.cpp | 44 ++++++++--- workspace/TS100/src/main.cpp | 127 ++++++++++++++++++------------ 6 files changed, 128 insertions(+), 78 deletions(-) diff --git a/workspace/TS100/inc/Settings.h b/workspace/TS100/inc/Settings.h index cfe6a55e..7bfec946 100644 --- a/workspace/TS100/inc/Settings.h +++ b/workspace/TS100/inc/Settings.h @@ -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 diff --git a/workspace/TS100/inc/Translation.h b/workspace/TS100/inc/Translation.h index d0ed1b36..28ae4840 100644 --- a/workspace/TS100/inc/Translation.h +++ b/workspace/TS100/inc/Translation.h @@ -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; diff --git a/workspace/TS100/src/Settings.cpp b/workspace/TS100/src/Settings.cpp index 27b527f2..11d6677c 100644 --- a/workspace/TS100/src/Settings.cpp +++ b/workspace/TS100/src/Settings.cpp @@ -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 diff --git a/workspace/TS100/src/Translation.c b/workspace/TS100/src/Translation.c index be91fa7a..a9fb22e8 100644 --- a/workspace/TS100/src/Translation.c +++ b/workspace/TS100/src/Translation.c @@ -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. ", //Power Source @@ -16,7 +16,7 @@ const char* SettingsLongNames[15] = { "Shutdown Timeout ", //Shutdown Time "Motion Sensitivity <0.Off 1.least sensitive 9.most sensitive>", //Motion Sensitivity "Temperature Unit ", //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 ", //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 + }; diff --git a/workspace/TS100/src/gui.cpp b/workspace/TS100/src/gui.cpp index 0947210b..c9ce36d6 100644 --- a/workspace/TS100/src/gui.cpp +++ b/workspace/TS100/src/gui.cpp @@ -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]); diff --git a/workspace/TS100/src/main.cpp b/workspace/TS100/src/main.cpp index 19158c93..bf685790 100644 --- a/workspace/TS100/src/main.cpp +++ b/workspace/TS100/src/main.cpp @@ -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