diff options
-rw-r--r-- | workspace/ts100/inc/Modes.h | 5 | ||||
-rw-r--r-- | workspace/ts100/inc/Settings.h | 22 | ||||
-rw-r--r-- | workspace/ts100/src/Modes.c | 127 | ||||
-rw-r--r-- | workspace/ts100/src/Settings.c | 4 |
4 files changed, 96 insertions, 62 deletions
diff --git a/workspace/ts100/inc/Modes.h b/workspace/ts100/inc/Modes.h index b8f0a2cf..efc071ef 100644 --- a/workspace/ts100/inc/Modes.h +++ b/workspace/ts100/inc/Modes.h @@ -29,7 +29,7 @@ enum { TEMPCAL, //Cal tip temp offset } operatingMode; -#define SETTINGSOPTIONSCOUNT 8 /*Number of settings in the settings menu*/ +#define SETTINGSOPTIONSCOUNT 9 /*Number of settings in the settings menu*/ enum { UVCO = 0, @@ -39,7 +39,8 @@ enum { MOTIONDETECT, MOTIONSENSITIVITY, TEMPDISPLAY, - DISPLAYMODE, + TEMPROUNDING, + DISPUPDATERATE, LEFTY, } settingsPage; diff --git a/workspace/ts100/inc/Settings.h b/workspace/ts100/inc/Settings.h index 13cf1897..f6ceae8b 100644 --- a/workspace/ts100/inc/Settings.h +++ b/workspace/ts100/inc/Settings.h @@ -11,14 +11,21 @@ #define SETTINGS_H_ #include <stdint.h> #include "stm32f10x_flash.h" -#define SETTINGSVERSION 0x06 /*Change this if you change the struct below to prevent people getting out of sync*/ +#define SETTINGSVERSION 0x08 /*Change this if you change the struct below to prevent people getting out of sync*/ +//Motion Sensitivity #define MOTION_HIGH (0x00) #define MOTION_MED (0x10) #define MOTION_LOW (0x20) +//Display Speeds #define DISPLAYMODE_FAST (0x00) -#define DISPLAYMODE_SLOW (0x01) -#define DISPLAYMODE_ROUND (0x02) -#define DISPLAYMODE_NONE (0x03) +#define DISPLAYMODE_MEDIUM (0x01) +#define DISPLAYMODE_SLOW (0x02) +//Rounding Modes +#define ROUNDING_NONE (0x00) +#define ROUNDING_FIVE (0x01) +#define ROUNDING_TEN (0x02) + + /* * This struct must be a multiple of 2 bytes as it is saved / restored from flash in uint16_t chunks */ @@ -31,9 +38,10 @@ struct { uint8_t movementEnabled:1; //If movement is enabled uint8_t displayTempInF:1; //If we need to convert the C reading to F uint8_t flipDisplay:1; //If true we want to invert the display for lefties - uint8_t sensitivity:7; //Sensitivity of accelerometer - uint8_t ShutdownTime:7; //Time until unit shuts down if left alone - uint8_t displayUpdateMode:2; //How fast the display updates / temp showing mode + uint8_t sensitivity:6; //Sensitivity of accelerometer + uint8_t ShutdownTime:6; //Time until unit shuts down if left alone + uint8_t displayUpdateSpeed:2; //How fast the display updates / temp showing mode + uint8_t temperatureRounding:2; //Rounding mode for the temperature uint16_t tempCalibration; //Temperature calibration value uint16_t voltageDiv; //Voltage divisor factor } systemSettings; diff --git a/workspace/ts100/src/Modes.c b/workspace/ts100/src/Modes.c index 5567c49f..73691d3c 100644 --- a/workspace/ts100/src/Modes.c +++ b/workspace/ts100/src/Modes.c @@ -6,12 +6,14 @@ */ #include "Modes.h" const char *SettingsLongNames[] = { " Undervoltage Cutout", - " Sleep Temperature", " Sleep Timeout", " Shutdown Timeout", - " Motion Detection", " Motion Sensitivity", - " Temperature Unit", " Display Update Rate", - " Left Handed Display" }; -const uint8_t SettingsLongNamesLengths[] = - { 25, 23, 19, 22, 22, 24, 22, 25, 25 }; + " Sleep Temperature", " Sleep Timeout", + " Shutdown Timeout", " Motion Detection", + " Motion Sensitivity", " Temperature Unit", + " Temperature Rounding Amount", + " Temperature Display Update Rate", + " Flip Display for Left Hand" }; +const uint8_t SettingsLongNamesLengths[] = { 25, 23, 19, 22, 22, 24, 22, 33, 37, + 25 }; uint8_t CalStatus = 0; //This does the required processing and state changes void ProcessUI() { @@ -102,10 +104,8 @@ void ProcessUI() { saveSettings(); //Save the settings } else { ++settingsPage; //move to the next option - } } else if (Buttons & BUT_B) { - resetLastButtonPress(); //B changes the value selected switch (settingsPage) { case UVCO: @@ -115,7 +115,7 @@ void ProcessUI() { systemSettings.cutoutVoltage = 10; break; case SLEEP_TEMP: - systemSettings.SleepTemp += 100; //Go up 10c at a time + systemSettings.SleepTemp += 100; //Go up 10C at a time if (systemSettings.SleepTemp > 3000) systemSettings.SleepTemp = 1000;//cant sleep higher than 300 break; @@ -133,7 +133,6 @@ void ProcessUI() { case MOTIONDETECT: systemSettings.movementEnabled = !systemSettings.movementEnabled; - break; case TEMPDISPLAY: systemSettings.displayTempInF = !systemSettings.displayTempInF; @@ -142,17 +141,22 @@ void ProcessUI() { systemSettings.flipDisplay = !systemSettings.flipDisplay; break; case MOTIONSENSITIVITY: - systemSettings.sensitivity += 0x10; if (systemSettings.sensitivity > 0x20) systemSettings.sensitivity = 0; //reset to high on wrap break; - case DISPLAYMODE: - systemSettings.displayUpdateMode++; - systemSettings.displayUpdateMode = - systemSettings.displayUpdateMode % 4; + case TEMPROUNDING: + systemSettings.temperatureRounding++; + systemSettings.temperatureRounding = + systemSettings.temperatureRounding % 3; + break; + case DISPUPDATERATE: + systemSettings.displayUpdateSpeed++; + systemSettings.displayUpdateSpeed = + systemSettings.displayUpdateSpeed % 3; break; + default: break; } @@ -292,12 +296,23 @@ void ProcessUI() { /* * Draws the temp with temp conversion if needed */ -void drawTemp(uint16_t temp, uint8_t x) { +void drawTemp(uint16_t temp, uint8_t x, uint8_t roundingMode) { if (systemSettings.displayTempInF) temp = (temp * 9 + 1600) / 5;/*Convert to F -> T*(9/5)+32*/ if (temp % 10 > 5) temp += 10; //round up - OLED_DrawThreeNumber(temp / 10, x); + temp /= 10; + //handle rounding modes + if (roundingMode == ROUNDING_FIVE) { + if (temp % 10 < 5) + temp = (temp / 10) * 10; + else + temp = ((temp / 10) * 10) + 5; + } else if (roundingMode == ROUNDING_TEN) { + temp = (temp / 10) * 10; + } + + OLED_DrawThreeNumber(temp, x); } /* @@ -323,23 +338,19 @@ void DrawUI() { case SOLDERING: //The user is soldering { - if (systemSettings.displayUpdateMode == DISPLAYMODE_SLOW - && (millis() - lastOLEDDrawTime < 1000)) + if (systemSettings.displayUpdateSpeed == DISPLAYMODE_SLOW + && (millis() - lastOLEDDrawTime < 200)) + return; + else if (systemSettings.displayUpdateSpeed == DISPLAYMODE_MEDIUM + && (millis() - lastOLEDDrawTime < 100)) + return; + else if (systemSettings.displayUpdateSpeed == DISPLAYMODE_FAST + && (millis() - lastOLEDDrawTime < 50)) return; - if (systemSettings.displayUpdateMode == DISPLAYMODE_FAST - || systemSettings.displayUpdateMode == DISPLAYMODE_SLOW) { - drawTemp(temp, 0); - lastOLEDDrawTime = millis(); - } - if (systemSettings.displayUpdateMode == DISPLAYMODE_ROUND) { - drawTemp((temp / 100) * 100, 0); + drawTemp(temp, 0, systemSettings.temperatureRounding); - } else if (systemSettings.displayUpdateMode == DISPLAYMODE_NONE) { - OLED_DrawChar(' ', 0); - OLED_DrawChar(' ', 1); - OLED_DrawChar(' ', 2); - } + lastOLEDDrawTime = millis(); //Now draw symbols OLED_DrawChar(' ', 3); OLED_BlankSlot(6 * 12 + 16, 24 - 16);//blank out the tail after the arrows @@ -353,15 +364,10 @@ void DrawUI() { OLED_DrawSymbol(6, 6); } } - if (!(systemSettings.displayUpdateMode == DISPLAYMODE_NONE)) { - if (systemSettings.displayTempInF) { - OLED_DrawSymbol(4, 1); - } else { - OLED_DrawSymbol(4, 0); - } + if (systemSettings.displayTempInF) { + OLED_DrawSymbol(4, 1); } else { - OLED_DrawChar(' ', 4); - OLED_DrawChar(' ', 5); + OLED_DrawSymbol(4, 0); } } @@ -371,7 +377,7 @@ void DrawUI() { //With the nifty arrows OLED_DrawChar(' ', 0); OLED_DrawChar('<', 1); - drawTemp(systemSettings.SolderingTemp, 2); + drawTemp(systemSettings.SolderingTemp, 2, 0); OLED_DrawChar(' ', 5); OLED_DrawChar(' ', 7); OLED_DrawChar('>', 6); @@ -455,22 +461,39 @@ void DrawUI() { } break; - case DISPLAYMODE: + case TEMPROUNDING: //We are prompting the user about their display mode preferences { - switch (systemSettings.displayUpdateMode) { + switch (systemSettings.temperatureRounding) { + case ROUNDING_NONE: + OLED_DrawString("TMPRND 1", 8); + break; + case ROUNDING_FIVE: + OLED_DrawString("TMPRND 5", 8); + break; + case ROUNDING_TEN: + OLED_DrawString("TMPRND10", 8); + break; + default: + OLED_DrawString("TMPRND 1", 8); + break; + } + } + break; + case DISPUPDATERATE: + //We are prompting the user about their display mode preferences + { + switch (systemSettings.displayUpdateSpeed) { case DISPLAYMODE_FAST: - OLED_DrawString("DISPMD F", 8); + OLED_DrawString("TMPSPD F", 8); break; case DISPLAYMODE_SLOW: - OLED_DrawString("DISPMD S", 8); - break; - case DISPLAYMODE_ROUND: - OLED_DrawString("DISPMD R", 8); + OLED_DrawString("TMPSPD S", 8); break; - case DISPLAYMODE_NONE: - OLED_DrawString("DISPMD N", 8); + case DISPLAYMODE_MEDIUM: + OLED_DrawString("TMPSPD M", 8); break; + } } break; @@ -483,7 +506,7 @@ void DrawUI() { //The iron is in sleep temp mode //Draw in temp and sleep OLED_DrawString("SLP", 3); - drawTemp(temp, 4); + drawTemp(temp, 4, systemSettings.temperatureRounding); if (millis() - getLastMovement() > (10 * 60 * 1000) && (millis() - getLastButtonPress() > (10 * 60 * 1000))) { @@ -497,7 +520,7 @@ void DrawUI() { case COOLING: //We are warning the user the tip is cooling OLED_DrawString("COOL ", 5); - drawTemp(temp, 5); + drawTemp(temp, 5, systemSettings.temperatureRounding); break; case UVLOWARN: OLED_DrawString("LOW VOLT", 8); @@ -505,7 +528,7 @@ void DrawUI() { case THERMOMETER: temp = readIronTemp(0, 1, 0xFFFF); //Force a reading as heater is off OLED_DrawString("TEMP ", 5);//extra one to it clears the leftover 'L' from IDLE - drawTemp(temp, 5); + drawTemp(temp, 5, 0); break; case DCINDISP: { uint16_t voltage = readDCVoltage(systemSettings.voltageDiv); //get X10 voltage diff --git a/workspace/ts100/src/Settings.c b/workspace/ts100/src/Settings.c index d25dde95..d1e423e1 100644 --- a/workspace/ts100/src/Settings.c +++ b/workspace/ts100/src/Settings.c @@ -53,6 +53,8 @@ void resetSettings() { systemSettings.tempCalibration=239; //Default to their calibration value systemSettings.voltageDiv=144; //Default divider from schematic systemSettings.ShutdownTime=30; //How many minutes until the unit turns itself off - systemSettings.displayUpdateMode=0; //How fast the LCD updates + systemSettings.displayUpdateSpeed=0; //How fast the LCD updates + systemSettings.temperatureRounding=0; //How the temperature is rounded off + } |