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