aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--workspace/ts100/inc/Modes.h5
-rw-r--r--workspace/ts100/inc/Settings.h22
-rw-r--r--workspace/ts100/src/Modes.c127
-rw-r--r--workspace/ts100/src/Settings.c4
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
+
}