1
0
forked from me/IronOS

Fix voltage on home screen

This commit is contained in:
Ben V. Brown
2020-09-20 16:24:39 +10:00
parent 60e3616c79
commit 89522027b7
3 changed files with 84 additions and 124 deletions

View File

@@ -57,10 +57,7 @@ uint16_t getHandleTemperature() {
#endif
}
uint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample) {
// ADC maximum is 32767 == 3.3V at input == 28.05V at VIN
// Therefore we can divide down from there
// Multiplying ADC max by 4 for additional calibration options,
// ideal term is 467
static uint8_t preFillneeded = 10;
static uint32_t samples[BATTFILTERDEPTH];

View File

@@ -17,10 +17,9 @@
#ifdef MODEL_Pinecil
#define POW_PD
//#define POW_QC
#define POW_QC
#define TEMP_TMP36
//#define ACCEL_BMA
#define ACCEL_BMA
#define BATTFILTERDEPTH 32
#endif

View File

@@ -123,7 +123,27 @@ static bool checkVoltageForExit() {
}
#endif
static void gui_drawBatteryIcon() {
#ifdef MODEL_TS100
#if defined(POW_PD) || defined(POW_QC)
// On TS80 we replace this symbol with the voltage we are operating on
// If <9V then show single digit, if not show duals
uint8_t V = getInputVoltageX10(systemSettings.voltageDiv, 0);
if (V % 10 >= 5)
V = V / 10 + 1; // round up
else
V = V / 10;
if (V >= 10) {
int16_t xPos = OLED::getCursorX();
OLED::setFont(1);
OLED::printNumber(V / 10, 1);
OLED::setCursor(xPos, 8);
OLED::printNumber(V % 10, 1);
OLED::setFont(0);
OLED::setCursor(xPos + 12, 0); // need to reset this as if we drew a wide char
} else {
OLED::printNumber(V, 1);
}
#else
if (systemSettings.cutoutSetting) {
// User is on a lithium battery
// we need to calculate which of the 10 levels they are on
@@ -140,26 +160,8 @@ static void gui_drawBatteryIcon() {
OLED::drawBattery(cellV + 1);
} else
OLED::drawSymbol(15); // Draw the DC Logo
#else
// On TS80 we replace this symbol with the voltage we are operating on
// If <9V then show single digit, if not show duals
uint8_t V = getInputVoltageX10(systemSettings.voltageDiv, 0);
if (V % 10 >= 5)
V = V / 10 + 1; // round up
else
V = V / 10;
if (V >= 10) {
int16_t xPos = OLED::getCursorX();
OLED::setFont(1);
OLED::printNumber(1, 1);
OLED::setCursor(xPos, 8);
OLED::printNumber(V % 10, 1);
OLED::setFont(0);
OLED::setCursor(xPos + 12, 0); // need to reset this as if we drew a wide char
} else {
OLED::printNumber(V, 1);
}
#endif
}
static void gui_solderingTempAdjust() {
uint32_t lastChange = xTaskGetTickCount();
@@ -182,14 +184,11 @@ static void gui_solderingTempAdjust() {
return;
break;
case BUTTON_B_LONG:
if (xTaskGetTickCount() - autoRepeatTimer
+ autoRepeatAcceleration> PRESS_ACCEL_INTERVAL_MAX) {
if (xTaskGetTickCount() - autoRepeatTimer + autoRepeatAcceleration > PRESS_ACCEL_INTERVAL_MAX) {
if (systemSettings.ReverseButtonTempChangeEnabled) {
systemSettings.SolderingTemp +=
systemSettings.TempChangeLongStep;
systemSettings.SolderingTemp += systemSettings.TempChangeLongStep;
} else
systemSettings.SolderingTemp -=
systemSettings.TempChangeLongStep;
systemSettings.SolderingTemp -= systemSettings.TempChangeLongStep;
autoRepeatTimer = xTaskGetTickCount();
autoRepeatAcceleration += PRESS_ACCEL_STEP;
@@ -197,40 +196,31 @@ static void gui_solderingTempAdjust() {
break;
case BUTTON_B_SHORT:
if (systemSettings.ReverseButtonTempChangeEnabled) {
systemSettings.SolderingTemp +=
systemSettings.TempChangeShortStep;
systemSettings.SolderingTemp += systemSettings.TempChangeShortStep;
} else
systemSettings.SolderingTemp -=
systemSettings.TempChangeShortStep;
systemSettings.SolderingTemp -= systemSettings.TempChangeShortStep;
break;
case BUTTON_F_LONG:
if (xTaskGetTickCount() - autoRepeatTimer
+ autoRepeatAcceleration> PRESS_ACCEL_INTERVAL_MAX) {
if (xTaskGetTickCount() - autoRepeatTimer + autoRepeatAcceleration > PRESS_ACCEL_INTERVAL_MAX) {
if (systemSettings.ReverseButtonTempChangeEnabled) {
systemSettings.SolderingTemp -=
systemSettings.TempChangeLongStep;
systemSettings.SolderingTemp -= systemSettings.TempChangeLongStep;
} else
systemSettings.SolderingTemp +=
systemSettings.TempChangeLongStep;
systemSettings.SolderingTemp += systemSettings.TempChangeLongStep;
autoRepeatTimer = xTaskGetTickCount();
autoRepeatAcceleration += PRESS_ACCEL_STEP;
}
break;
case BUTTON_F_SHORT:
if (systemSettings.ReverseButtonTempChangeEnabled) {
systemSettings.SolderingTemp -=
systemSettings.TempChangeShortStep; // add 10
systemSettings.SolderingTemp -= systemSettings.TempChangeShortStep; // add 10
} else
systemSettings.SolderingTemp +=
systemSettings.TempChangeShortStep; // add 10
systemSettings.SolderingTemp += systemSettings.TempChangeShortStep; // add 10
break;
default:
break;
}
if ((PRESS_ACCEL_INTERVAL_MAX - autoRepeatAcceleration)
< PRESS_ACCEL_INTERVAL_MIN) {
autoRepeatAcceleration = PRESS_ACCEL_INTERVAL_MAX
- PRESS_ACCEL_INTERVAL_MIN;
if ((PRESS_ACCEL_INTERVAL_MAX - autoRepeatAcceleration) < PRESS_ACCEL_INTERVAL_MIN) {
autoRepeatAcceleration = PRESS_ACCEL_INTERVAL_MAX - PRESS_ACCEL_INTERVAL_MIN;
}
// constrain between 10-450 C
#ifdef ENABLED_FAHRENHEIT_SUPPORT
@@ -254,13 +244,9 @@ static void gui_solderingTempAdjust() {
#else
if (OLED::getRotation()) {
#endif
OLED::print(
systemSettings.ReverseButtonTempChangeEnabled ?
SymbolPlus : SymbolMinus);
OLED::print(systemSettings.ReverseButtonTempChangeEnabled ? SymbolPlus : SymbolMinus);
} else {
OLED::print(
systemSettings.ReverseButtonTempChangeEnabled ?
SymbolMinus : SymbolPlus);
OLED::print(systemSettings.ReverseButtonTempChangeEnabled ? SymbolMinus : SymbolPlus);
}
OLED::print(SymbolSpace);
@@ -279,13 +265,9 @@ static void gui_solderingTempAdjust() {
#else
if (OLED::getRotation()) {
#endif
OLED::print(
systemSettings.ReverseButtonTempChangeEnabled ?
SymbolMinus : SymbolPlus);
OLED::print(systemSettings.ReverseButtonTempChangeEnabled ? SymbolMinus : SymbolPlus);
} else {
OLED::print(
systemSettings.ReverseButtonTempChangeEnabled ?
SymbolPlus : SymbolMinus);
OLED::print(systemSettings.ReverseButtonTempChangeEnabled ? SymbolPlus : SymbolMinus);
}
OLED::refresh();
GUIDelay();
@@ -299,10 +281,7 @@ static int gui_SolderingSleepingMode(bool stayOff) {
ButtonState buttons = getButtonState();
if (buttons)
return 0;
if ((xTaskGetTickCount() > 1000)
&& ((accelInit
&& (xTaskGetTickCount() - lastMovementTime < 1000))
|| (xTaskGetTickCount() - lastButtonTime < 1000)))
if ((xTaskGetTickCount() > 1000) && ((accelInit && (xTaskGetTickCount() - lastMovementTime < 1000)) || (xTaskGetTickCount() - lastButtonTime < 1000)))
return 0; // user moved or pressed a button, go back to soldering
#ifdef MODEL_TS100
if (checkVoltageForExit())
@@ -314,11 +293,7 @@ static int gui_SolderingSleepingMode(bool stayOff) {
} else
#endif
{
currentTempTargetDegC =
stayOff ?
0 :
min(systemSettings.SleepTemp,
systemSettings.SolderingTemp);
currentTempTargetDegC = stayOff ? 0 : min(systemSettings.SleepTemp, systemSettings.SolderingTemp);
}
// draw the lcd
uint16_t tipTemp;
@@ -366,8 +341,7 @@ static int gui_SolderingSleepingMode(bool stayOff) {
}
if (systemSettings.ShutdownTime) // only allow shutdown exit if time > 0
if (lastMovementTime)
if (((uint32_t) (xTaskGetTickCount() - lastMovementTime))
> (uint32_t) (systemSettings.ShutdownTime * 60 * 1000)) {
if (((uint32_t) (xTaskGetTickCount() - lastMovementTime)) > (uint32_t) (systemSettings.ShutdownTime * 60 * 1000)) {
// shutdown
currentTempTargetDegC = 0;
return 1; // we want to exit soldering mode
@@ -383,9 +357,7 @@ static void display_countdown(int sleepThres) {
* Print seconds or minutes (if > 99 seconds) until sleep
* mode is triggered.
*/
int lastEventTime =
lastButtonTime < lastMovementTime ?
lastMovementTime : lastButtonTime;
int lastEventTime = lastButtonTime < lastMovementTime ? lastMovementTime : lastButtonTime;
int downCount = sleepThres - xTaskGetTickCount() + lastEventTime;
if (downCount > 99000) {
OLED::printNumber(downCount / 60000 + 1, 2);
@@ -544,8 +516,7 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
#endif
if (systemSettings.sensitivity && systemSettings.SleepTime)
if (xTaskGetTickCount() - lastMovementTime > sleepThres
&& xTaskGetTickCount() - lastButtonTime > sleepThres) {
if (xTaskGetTickCount() - lastMovementTime > sleepThres && xTaskGetTickCount() - lastButtonTime > sleepThres) {
if (gui_SolderingSleepingMode(false)) {
return; // If the function returns non-0 then exit
}
@@ -593,8 +564,7 @@ void showDebugMenu(void) {
{
uint32_t temp = systemSettings.CalibrationOffset;
systemSettings.CalibrationOffset = 0;
OLED::printNumber(
TipThermoModel::convertTipRawADCTouV(getTipRawTemp(1)), 6);
OLED::printNumber(TipThermoModel::convertTipRawADCTouV(getTipRawTemp(1)), 6);
systemSettings.CalibrationOffset = temp;
}
break;
@@ -642,8 +612,7 @@ void startGUITask(void const *argument __unused) {
//flipped is generated by flipping each row
for (int row = 0; row < 2; row++) {
for (int x = 0; x < 84; x++) {
idleScreenBGF[(row * 84) + x] = idleScreenBG[(row * 84)
+ (83 - x)];
idleScreenBGF[(row * 84) + x] = idleScreenBG[(row * 84) + (83 - x)];
}
}
}
@@ -736,11 +705,7 @@ void startGUITask(void const *argument __unused) {
// button presses) in a while.
OLED::setDisplayState(OLED::DisplayState::ON);
if ((tipTemp < 50) && systemSettings.sensitivity
&& (((xTaskGetTickCount() - lastMovementTime)
> MOVEMENT_INACTIVITY_TIME)
&& ((xTaskGetTickCount() - lastButtonTime)
> BUTTON_INACTIVITY_TIME))) {
if ((tipTemp < 50) && systemSettings.sensitivity && (((xTaskGetTickCount() - lastMovementTime) > MOVEMENT_INACTIVITY_TIME) && ((xTaskGetTickCount() - lastButtonTime) > BUTTON_INACTIVITY_TIME))) {
OLED::setDisplayState(OLED::DisplayState::OFF);
}
@@ -799,8 +764,7 @@ void startGUITask(void const *argument __unused) {
OLED::setCursor(0, 0);
}
// draw in the temp
if (!(systemSettings.coolingTempBlink
&& (xTaskGetTickCount() % 25 < 16)))
if (!(systemSettings.coolingTempBlink && (xTaskGetTickCount() % 25 < 16)))
gui_drawTipTemp(false); // draw in the temp
}
}