Skip to content

Commit

Permalink
Update display speeds and rounding
Browse files Browse the repository at this point in the history
  • Loading branch information
Ralim committed Jul 7, 2017
1 parent 03f063c commit 3c61513
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 62 deletions.
5 changes: 3 additions & 2 deletions workspace/ts100/inc/Modes.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -39,7 +39,8 @@ enum {
MOTIONDETECT,
MOTIONSENSITIVITY,
TEMPDISPLAY,
DISPLAYMODE,
TEMPROUNDING,
DISPUPDATERATE,
LEFTY,
} settingsPage;

Expand Down
22 changes: 15 additions & 7 deletions workspace/ts100/inc/Settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand All @@ -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;
Expand Down
127 changes: 75 additions & 52 deletions workspace/ts100/src/Modes.c
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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:
Expand All @@ -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;
Expand All @@ -133,7 +133,6 @@ void ProcessUI() {
case MOTIONDETECT:
systemSettings.movementEnabled =
!systemSettings.movementEnabled;

break;
case TEMPDISPLAY:
systemSettings.displayTempInF = !systemSettings.displayTempInF;
Expand All @@ -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;
}
Expand Down Expand Up @@ -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);
}

/*
Expand All @@ -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
Expand All @@ -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);
}

}
Expand All @@ -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);
Expand Down Expand Up @@ -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;
Expand All @@ -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))) {
Expand All @@ -497,15 +520,15 @@ 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);
break;
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
Expand Down
4 changes: 3 additions & 1 deletion workspace/ts100/src/Settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -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

}

0 comments on commit 3c61513

Please sign in to comment.