Update display speeds and rounding
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
OLED_DrawString("TMPSPD S", 8);
|
||||
break;
|
||||
case DISPLAYMODE_ROUND:
|
||||
OLED_DrawString("DISPMD R", 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
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user