1
0
forked from me/IronOS

Degrees D support, New idle logo

This commit is contained in:
Ben V. Brown
2017-10-01 13:30:30 +11:00
parent a0e99374b5
commit bb75817e83
10 changed files with 237 additions and 239 deletions

View File

@@ -29,6 +29,7 @@ typedef struct {
uint8_t boostModeEnabled; //Boost mode swaps BUT_A in soldering mode to temporary soldering temp over-ride uint8_t boostModeEnabled; //Boost mode swaps BUT_A in soldering mode to temporary soldering temp over-ride
uint8_t coolingTempBlink; //Should the temperature blink on the cool down screen until its <50C uint8_t coolingTempBlink; //Should the temperature blink on the cool down screen until its <50C
uint8_t advancedScreens; //If enabled we draw more detailed screens with smaller fonts uint8_t advancedScreens; //If enabled we draw more detailed screens with smaller fonts
uint8_t temperatureInF; //Should the temp be in F or C (true is F)
uint16_t voltageDiv; //Voltage divisor factor uint16_t voltageDiv; //Voltage divisor factor
uint16_t BoostTemp; //Boost mode set point for the iron uint16_t BoostTemp; //Boost mode set point for the iron
int16_t CalibrationOffset; //This stores the temperature offset for this tip in the iron. int16_t CalibrationOffset; //This stores the temperature offset for this tip in the iron.

View File

@@ -8,8 +8,8 @@
#ifndef TRANSLATION_H_ #ifndef TRANSLATION_H_
#define TRANSLATION_H_ #define TRANSLATION_H_
extern const char* SettingsLongNames[13]; extern const char* SettingsLongNames[14];
extern const char* SettingsShortNames[13]; extern const char* SettingsShortNames[14];
extern const char* SettingsCalibrationWarning; extern const char* SettingsCalibrationWarning;
extern const char* UVLOWarningString; extern const char* UVLOWarningString;
extern const char SettingTrueChar; extern const char SettingTrueChar;

View File

@@ -36,8 +36,6 @@ extern "C" {
#define SDA_Pin GPIO_PIN_7 #define SDA_Pin GPIO_PIN_7
#define SDA_GPIO_Port GPIOB #define SDA_GPIO_Port GPIOB
uint16_t getHandleTemperature(); uint16_t getHandleTemperature();
uint16_t getTipRawTemp(uint8_t instant); uint16_t getTipRawTemp(uint8_t instant);
uint16_t getInputVoltageX10(); uint16_t getInputVoltageX10();
@@ -46,6 +44,9 @@ uint8_t getTipPWM();
void setTipPWM(uint8_t pulse); void setTipPWM(uint8_t pulse);
uint16_t ctoTipMeasurement(uint16_t temp); uint16_t ctoTipMeasurement(uint16_t temp);
uint16_t tipMeasurementToC(uint16_t raw); uint16_t tipMeasurementToC(uint16_t raw);
uint16_t ftoTipMeasurement(uint16_t temp);
uint16_t tipMeasurementToF(uint16_t raw);
void setCalibrationOffset(int16_t offSet); void setCalibrationOffset(int16_t offSet);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -64,6 +64,10 @@ void OLED::initialize() {
HAL_I2C_Master_Transmit(i2c, DEVICEADDR_OLED, (uint8_t*) OLED_Setup_Array, configLength, 0xFFFF); HAL_I2C_Master_Transmit(i2c, DEVICEADDR_OLED, (uint8_t*) OLED_Setup_Array, configLength, 0xFFFF);
//displayOnOff(true); //displayOnOff(true);
}
//Write out the buffer to the OLEd & call any rendering objects
void OLED::refresh() {
screenBuffer[0] = 0x80; screenBuffer[0] = 0x80;
screenBuffer[1] = 0x21; screenBuffer[1] = 0x21;
screenBuffer[2] = 0x80; screenBuffer[2] = 0x80;
@@ -78,15 +82,8 @@ void OLED::initialize() {
screenBuffer[10] = 0x80; screenBuffer[10] = 0x80;
screenBuffer[11] = 0x01; screenBuffer[11] = 0x01;
screenBuffer[12] = 0x40; screenBuffer[12] = 0x40; //start of data marker
}
//Write out the buffer to the OLEd & call any rendering objects
void OLED::refresh() {
screenBuffer[12] = 0x40; // Ensure it never gets overwritten
screenBuffer[3] = inLeftHandedMode ? 0 : 32;
screenBuffer[5] = inLeftHandedMode ? 95 : 0x7F; // It rolls over when it exceeds this number (this is last writable column)
HAL_I2C_Master_Transmit(i2c, DEVICEADDR_OLED, screenBuffer, 12 + 96 * 2 + 1, 0xFFFF); HAL_I2C_Master_Transmit(i2c, DEVICEADDR_OLED, screenBuffer, 12 + 96 * 2 + 1, 0xFFFF);
} }
@@ -104,7 +101,7 @@ void OLED::drawChar(char c, char PrecursorCommand) {
* *
*/ */
uint16_t index = 0; uint16_t index = 0;
if (!PrecursorCommand) if (PrecursorCommand == 0)
index = (c - ' '); index = (c - ' ');
else { else {

View File

@@ -88,6 +88,7 @@ void resetSettings() {
systemSettings.autoStartMode = 0; //Auto start off for safety systemSettings.autoStartMode = 0; //Auto start off for safety
systemSettings.coolingTempBlink = 0; //Blink the temperature on the cooling screen when its > 50C systemSettings.coolingTempBlink = 0; //Blink the temperature on the cooling screen when its > 50C
systemSettings.CalibrationOffset = 10; systemSettings.CalibrationOffset = 10;
systemSettings.temperatureInF = 0; //default to 0
saveSettings(); saveSettings();
} }

View File

@@ -6,7 +6,7 @@
*/ */
#include "Translation.h" #include "Translation.h"
#define LANG_RU #define LANG_EN
#define LANG #define LANG
#ifndef LANG #ifndef LANG
@@ -18,7 +18,7 @@
#error NO LANGUAGE DEFINED #error NO LANGUAGE DEFINED
#endif #endif
#ifdef LANG_EN #ifdef LANG_EN
const char* SettingsLongNames[13] = { const char* SettingsLongNames[14] = {
/*These are all the help text for all the settings.*/ /*These are all the help text for all the settings.*/
/*No requirements on spacing or length*/ /*No requirements on spacing or length*/
"Power source. Sets cutoff voltage. <DC 10V> <S 3.3V per cell>", // "Power source. Sets cutoff voltage. <DC 10V> <S 3.3V per cell>", //
@@ -26,6 +26,7 @@ const char* SettingsLongNames[13] = {
"Sleep Timeout <Minutes>", // "Sleep Timeout <Minutes>", //
"Shutdown Timeout <Minutes>", // "Shutdown Timeout <Minutes>", //
"Motion Sensitivity <0.Off 1.least sensitive 9.most sensitive>", // "Motion Sensitivity <0.Off 1.least sensitive 9.most sensitive>", //
"Temperature Unit <C=Celsius F=Fahrenheit>", //
"Display detailed information in a smaller font.", // "Display detailed information in a smaller font.", //
"Display Orientation <A. Automatic L. Left Handed R. Right Handed>", // "Display Orientation <A. Automatic L. Left Handed R. Right Handed>", //
"Enable front key enters boost mode 450C mode when soldering", // "Enable front key enters boost mode 450C mode when soldering", //
@@ -51,7 +52,7 @@ const char SettingTempFChar = 'F';
#endif #endif
#ifdef LANG_ES #ifdef LANG_ES
const char* SettingsLongNames[13] = { const char* SettingsLongNames[14] = {
/*These are all the help text for all the settings.*/ /*These are all the help text for all the settings.*/
/*All must start with 6 spaces so they come on screen nicely.*/ /*All must start with 6 spaces so they come on screen nicely.*/
"Fuente de energía. Ajusta el límite inferior de voltaje. <DC=10V S=3.3V por celda>", // "Fuente de energía. Ajusta el límite inferior de voltaje. <DC=10V S=3.3V por celda>", //
@@ -84,7 +85,7 @@ const char SettingTempFChar = 'F';
#endif #endif
#ifdef LANG_DE #ifdef LANG_DE
const char* SettingsLongNames[13] = { const char* SettingsLongNames[14] = {
/*These are all the help text for all the settings.*/ /*These are all the help text for all the settings.*/
/*All must start with 6 spaces so they come on screen nicely.*/ /*All must start with 6 spaces so they come on screen nicely.*/
"Stromversorgung. Setzt Abschaltspannung <DC=10V S=3.3V pro Zelle>", "Stromversorgung. Setzt Abschaltspannung <DC=10V S=3.3V pro Zelle>",
@@ -117,7 +118,7 @@ const char SettingTempFChar = 'F';
#endif #endif
#ifdef LANG_FR #ifdef LANG_FR
const char* SettingsLongNames[13] = { const char* SettingsLongNames[14] = {
/*These are all the help text for all the settings.*/ /*These are all the help text for all the settings.*/
/*All must start with 6 spaces so they come on screen nicely.*/ /*All must start with 6 spaces so they come on screen nicely.*/
"Type d\'alimentation. Regle la tension de coupure. <DC=10V S=3.3V par cellules>", "Type d\'alimentation. Regle la tension de coupure. <DC=10V S=3.3V par cellules>",
@@ -152,7 +153,7 @@ const char SettingTempFChar = 'F';
#endif #endif
#ifdef LANG_IT #ifdef LANG_IT
const char* SettingsLongNames[13] = { const char* SettingsLongNames[14] = {
/*These are all the help text for all the settings.*/ /*These are all the help text for all the settings.*/
"Sorgente di alimentazione. Imposta il limite inferiore di tensione. <DC=10V S=3.3V per cella>", "Sorgente di alimentazione. Imposta il limite inferiore di tensione. <DC=10V S=3.3V per cella>",
"Temperatura modalità riposo <C>", "Temperatura modalità riposo <C>",
@@ -186,7 +187,7 @@ const char SettingTempFChar = 'F';
#endif #endif
#ifdef LANG_SE #ifdef LANG_SE
const char* SettingsLongNames[13] = { const char* SettingsLongNames[14] = {
/*These are all the help text for all the settings.*/ /*These are all the help text for all the settings.*/
"Stromforsorjning. Satt avstagningsvolt. <VX=10V S=3.3V per cell>", "Stromforsorjning. Satt avstagningsvolt. <VX=10V S=3.3V per cell>",
"Vilolage Temperatur <C>", "Vilolage Temperatur <C>",
@@ -220,9 +221,9 @@ const char SettingTempFChar = 'F';
#endif #endif
#ifdef LANG_RU #ifdef LANG_RU
const char* SettingsLongNames[13] = { const char* SettingsLongNames[14] = {
//These are all the help text for all the settings./ //These are all the help text for all the settings./
"ЀИстЀочник питания. Установка напряжения отключения. <DC 10V> <S 3.3 V на батарею>", "Температура Сна <С>", "Источник питания. Установка напряжения отключения. <DC 10V> <S 3.3 V на батарею>", "Температура Сна <С>",
"Переход в режим Сна <Минуты>", "Переходит в режим ожидания <Минуты>", "Переход в режим Сна <Минуты>", "Переходит в режим ожидания <Минуты>",
"Акселерометр <0. Выкл. 1. мин. чувствительный 9. макс. чувствительный>", "Акселерометр <0. Выкл. 1. мин. чувствительный 9. макс. чувствительный>",
"Display detailed information in a smaller font.",// "Display detailed information in a smaller font.",//
@@ -250,12 +251,13 @@ const char SettingTempCChar = 'C';
const char SettingTempFChar = 'F'; const char SettingTempFChar = 'F';
#endif #endif
const char* SettingsShortNames[13] = { /**/ const char* SettingsShortNames[14] = { /**/
"PWRSC ", // Power Source (DC or batt) "PWRSC ", // Power Source (DC or batt)
"STMP ", // Sleep Temperature "STMP ", // Sleep Temperature
"STME ", // Sleep Timeout "STME ", // Sleep Timeout
"SHTME ", // Shutdown Temperature "SHTME ", // Shutdown Temperature
"MSENSE ", // Motion sensitivity level "MSENSE ", // Motion sensitivity level
"TMPUNT ", //Temp in F and C
"ADVDSP ", // Advanced display mode enable "ADVDSP ", // Advanced display mode enable
"DSPROT ", // Display rotation mode "DSPROT ", // Display rotation mode
"BOOST ", // Boost enabled "BOOST ", // Boost enabled

View File

@@ -19,6 +19,8 @@ static void settings_setShutdownTime(void);
static void settings_displayShutdownTime(void); static void settings_displayShutdownTime(void);
static void settings_setSensitivity(void); static void settings_setSensitivity(void);
static void settings_displaySensitivity(void); static void settings_displaySensitivity(void);
static void settings_setTempF(void);
static void settings_displayTempF(void);
static void settings_setAdvancedScreens(void); static void settings_setAdvancedScreens(void);
static void settings_displayAdvancedScreens(void); static void settings_displayAdvancedScreens(void);
static void settings_setDisplayRotation(void); static void settings_setDisplayRotation(void);
@@ -43,14 +45,15 @@ const menuitem settingsMenu[] = { /*Struct used for all settings options in the
{ (const char*) SettingsLongNames[2], { settings_setSleepTime }, { settings_displaySleepTime } }, /*Sleep Time*/ { (const char*) SettingsLongNames[2], { settings_setSleepTime }, { settings_displaySleepTime } }, /*Sleep Time*/
{ (const char*) SettingsLongNames[3], { settings_setShutdownTime }, { settings_displayShutdownTime } }, /*Shutdown Time*/ { (const char*) SettingsLongNames[3], { settings_setShutdownTime }, { settings_displayShutdownTime } }, /*Shutdown Time*/
{ (const char*) SettingsLongNames[4], { settings_setSensitivity }, { settings_displaySensitivity } },/* Motion Sensitivity*/ { (const char*) SettingsLongNames[4], { settings_setSensitivity }, { settings_displaySensitivity } },/* Motion Sensitivity*/
{ (const char*) SettingsLongNames[5], { settings_setAdvancedScreens }, { settings_displayAdvancedScreens } },/* Advanced screens*/ { (const char*) SettingsLongNames[5], { settings_setTempF }, { settings_displayTempF } },/* Motion Sensitivity*/
{ (const char*) SettingsLongNames[6], { settings_setDisplayRotation }, { settings_displayDisplayRotation } }, /**/ { (const char*) SettingsLongNames[6], { settings_setAdvancedScreens }, { settings_displayAdvancedScreens } },/* Advanced screens*/
{ (const char*) SettingsLongNames[7], { settings_setBoostModeEnabled }, { settings_displayBoostModeEnabled } }, /**/ { (const char*) SettingsLongNames[7], { settings_setDisplayRotation }, { settings_displayDisplayRotation } }, /**/
{ (const char*) SettingsLongNames[8], { settings_setBoostTemp }, { settings_displayBoostTemp } }, /**/ { (const char*) SettingsLongNames[8], { settings_setBoostModeEnabled }, { settings_displayBoostModeEnabled } }, /**/
{ (const char*) SettingsLongNames[9], { settings_setAutomaticStartMode }, { settings_displayAutomaticStartMode } },/**/ { (const char*) SettingsLongNames[9], { settings_setBoostTemp }, { settings_displayBoostTemp } }, /**/
{ (const char*) SettingsLongNames[10], { settings_setCoolingBlinkEnabled }, { settings_displayCoolingBlinkEnabled } }, /**/ { (const char*) SettingsLongNames[10], { settings_setAutomaticStartMode }, { settings_displayAutomaticStartMode } },/**/
{ (const char*) SettingsLongNames[11], { settings_setCalibrate }, { settings_displayCalibrate } }, /**/ { (const char*) SettingsLongNames[11], { settings_setCoolingBlinkEnabled }, { settings_displayCoolingBlinkEnabled } }, /**/
{ (const char*) SettingsLongNames[12], { settings_setResetSettings }, { settings_displayResetSettings } }, /**/ { (const char*) SettingsLongNames[12], { settings_setCalibrate }, { settings_displayCalibrate } }, /**/
{ (const char*) SettingsLongNames[13], { settings_setResetSettings }, { settings_displayResetSettings } }, /**/
{ NULL, { NULL }, { NULL } } //end of menu marker. DO NOT REMOVE { NULL, { NULL }, { NULL } } //end of menu marker. DO NOT REMOVE
}; };
@@ -101,6 +104,19 @@ static void settings_displayShutdownTime(void) {
lcd.print(SettingsShortNames[3]); lcd.print(SettingsShortNames[3]);
lcd.printNumber(systemSettings.ShutdownTime, 2); lcd.printNumber(systemSettings.ShutdownTime, 2);
} }
static void settings_setTempF(void) {
systemSettings.temperatureInF = !systemSettings.temperatureInF;
}
static void settings_displayTempF(void) {
lcd.print(SettingsShortNames[5]);
if (systemSettings.temperatureInF)
lcd.drawChar('F');
else
lcd.drawChar('C');
}
static void settings_setSensitivity(void) { static void settings_setSensitivity(void) {
systemSettings.sensitivity++; systemSettings.sensitivity++;
systemSettings.sensitivity = systemSettings.sensitivity % 10; systemSettings.sensitivity = systemSettings.sensitivity % 10;
@@ -114,7 +130,7 @@ static void settings_setAdvancedScreens(void) {
systemSettings.advancedScreens = !systemSettings.advancedScreens; systemSettings.advancedScreens = !systemSettings.advancedScreens;
} }
static void settings_displayAdvancedScreens(void) { static void settings_displayAdvancedScreens(void) {
lcd.print(SettingsShortNames[5]); lcd.print(SettingsShortNames[6]);
if (systemSettings.advancedScreens) if (systemSettings.advancedScreens)
lcd.drawChar('T'); lcd.drawChar('T');
else else
@@ -125,7 +141,7 @@ static void settings_setDisplayRotation(void) {
systemSettings.OrientationMode = systemSettings.OrientationMode % 3; systemSettings.OrientationMode = systemSettings.OrientationMode % 3;
} }
static void settings_displayDisplayRotation(void) { static void settings_displayDisplayRotation(void) {
lcd.print(SettingsShortNames[6]); lcd.print(SettingsShortNames[7]);
switch (systemSettings.OrientationMode) { switch (systemSettings.OrientationMode) {
case 0: case 0:
lcd.drawChar('R'); lcd.drawChar('R');
@@ -143,7 +159,7 @@ static void settings_setBoostModeEnabled(void) {
systemSettings.boostModeEnabled = !systemSettings.boostModeEnabled; systemSettings.boostModeEnabled = !systemSettings.boostModeEnabled;
} }
static void settings_displayBoostModeEnabled(void) { static void settings_displayBoostModeEnabled(void) {
lcd.print(SettingsShortNames[7]); lcd.print(SettingsShortNames[8]);
if (systemSettings.boostModeEnabled) if (systemSettings.boostModeEnabled)
lcd.drawChar('T'); lcd.drawChar('T');
else else
@@ -155,7 +171,7 @@ static void settings_setBoostTemp(void) {
systemSettings.BoostTemp = 250; //loop back at 250 systemSettings.BoostTemp = 250; //loop back at 250
} }
static void settings_displayBoostTemp(void) { static void settings_displayBoostTemp(void) {
lcd.print(SettingsShortNames[8]); lcd.print(SettingsShortNames[9]);
lcd.printNumber(systemSettings.BoostTemp, 3); lcd.printNumber(systemSettings.BoostTemp, 3);
} }
static void settings_setAutomaticStartMode(void) { static void settings_setAutomaticStartMode(void) {
@@ -163,7 +179,7 @@ static void settings_setAutomaticStartMode(void) {
systemSettings.autoStartMode %= 2; systemSettings.autoStartMode %= 2;
} }
static void settings_displayAutomaticStartMode(void) { static void settings_displayAutomaticStartMode(void) {
lcd.print(SettingsShortNames[9]); lcd.print(SettingsShortNames[10]);
switch (systemSettings.autoStartMode) { switch (systemSettings.autoStartMode) {
case 0: case 0:
lcd.drawChar('F'); lcd.drawChar('F');
@@ -179,7 +195,7 @@ static void settings_setCoolingBlinkEnabled(void) {
systemSettings.coolingTempBlink = !systemSettings.coolingTempBlink; systemSettings.coolingTempBlink = !systemSettings.coolingTempBlink;
} }
static void settings_displayCoolingBlinkEnabled(void) { static void settings_displayCoolingBlinkEnabled(void) {
lcd.print(SettingsShortNames[10]); lcd.print(SettingsShortNames[11]);
if (systemSettings.coolingTempBlink) if (systemSettings.coolingTempBlink)
lcd.drawChar('T'); lcd.drawChar('T');
else else
@@ -189,7 +205,7 @@ static void settings_setResetSettings(void) {
settingsResetRequest = !settingsResetRequest; settingsResetRequest = !settingsResetRequest;
} }
static void settings_displayResetSettings(void) { static void settings_displayResetSettings(void) {
lcd.print(SettingsShortNames[12]); lcd.print(SettingsShortNames[13]);
if (settingsResetRequest) if (settingsResetRequest)
lcd.drawChar('T'); lcd.drawChar('T');
else else
@@ -251,5 +267,5 @@ static void settings_setCalibrate(void) {
} }
static void settings_displayCalibrate(void) { static void settings_displayCalibrate(void) {
lcd.print(SettingsShortNames[11]); lcd.print(SettingsShortNames[12]);
} }

View File

@@ -6,12 +6,10 @@
*/ */
//These are all the functions for interacting with the hardware //These are all the functions for interacting with the hardware
#include "hardware.h" #include "hardware.h"
volatile uint16_t PWMSafetyTimer = 0; volatile uint16_t PWMSafetyTimer = 0;
volatile int16_t CalibrationTempOffset = 0; volatile int16_t CalibrationTempOffset = 0;
void setCalibrationOffset(int16_t offSet) void setCalibrationOffset(int16_t offSet) {
{
CalibrationTempOffset = offSet; CalibrationTempOffset = offSet;
} }
uint16_t getHandleTemperature() { uint16_t getHandleTemperature() {
@@ -38,9 +36,19 @@ uint16_t ctoTipMeasurement(uint16_t temp) {
//We need to compensate for cold junction temp //We need to compensate for cold junction temp
return ((temp - (getHandleTemperature() / 10) + CalibrationTempOffset) * 33) + 532; return ((temp - (getHandleTemperature() / 10) + CalibrationTempOffset) * 33) + 532;
} }
uint16_t tipMeasurementToF(uint16_t raw) {
return ((((raw - 532) / 33) + (getHandleTemperature() / 10) - CalibrationTempOffset) * 9) / 5 + 32;
}
uint16_t ftoTipMeasurement(uint16_t temp) {
return (((((temp - 32) * 5) / 9) - (getHandleTemperature() / 10) + CalibrationTempOffset) * 33) + 532;
}
uint16_t getTipInstantTemperature() { uint16_t getTipInstantTemperature() {
uint16_t sum = 0; uint16_t sum;
sum += HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_1); sum = HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_1);
sum += HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_2); sum += HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_2);
sum += HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_3); sum += HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_3);
sum += HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_4); sum += HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_4);
@@ -48,8 +56,10 @@ uint16_t getTipInstantTemperature() {
} }
uint16_t getTipRawTemp(uint8_t instant) { uint16_t getTipRawTemp(uint8_t instant) {
#define filterDepth1 2 #define filterDepth1 1
/*Pre filter used before PID*/
#define filterDepth2 8 #define filterDepth2 8
/*Post filter used for UI display*/
static uint16_t filterLayer1[filterDepth1]; static uint16_t filterLayer1[filterDepth1];
static uint16_t filterLayer2[filterDepth2]; static uint16_t filterLayer2[filterDepth2];
static uint8_t index = 0; static uint8_t index = 0;
@@ -83,8 +93,7 @@ uint16_t getInputVoltageX10() {
//Ideal term is 57.69.... 58 is quite close //Ideal term is 57.69.... 58 is quite close
return getADC(1) / 58; return getADC(1) / 58;
} }
uint8_t getTipPWM() uint8_t getTipPWM() {
{
return htim2.Instance->CCR4; return htim2.Instance->CCR4;
} }
void setTipPWM(uint8_t pulse) { void setTipPWM(uint8_t pulse) {

View File

@@ -194,7 +194,24 @@ static bool checkVoltageForExit() {
} }
return false; return false;
} }
static void gui_drawBatteryIcon() {
if (systemSettings.cutoutSetting) {
//User is on a lithium battery
//we need to calculate which of the 10 levels they are on
uint8_t cellCount = systemSettings.cutoutSetting + 2;
uint16_t cellV = getInputVoltageX10() / cellCount;
//Should give us approx cell voltage X10
//Range is 42 -> 33 = 9 steps therefore we will use battery 1-10
if (cellV < 33)
cellV = 33;
cellV -= 33; //Should leave us a number of 0-9
if (cellV > 9)
cellV = 9;
lcd.drawBattery(cellV + 1);
} else
lcd.drawChar(' '); //print a blank spot if there is no battery symbol
}
static void gui_solderingTempAdjust() { static void gui_solderingTempAdjust() {
uint32_t lastChange = HAL_GetTick(); uint32_t lastChange = HAL_GetTick();
currentlyActiveTemperatureTarget = 0; currentlyActiveTemperatureTarget = 0;
@@ -221,33 +238,46 @@ static void gui_solderingTempAdjust() {
break; break;
case BUTTON_F_SHORT: case BUTTON_F_SHORT:
if (lcd.getRotation()) { if (lcd.getRotation()) {
systemSettings.SolderingTemp += 10; //add 10C systemSettings.SolderingTemp += 10; //add 10
if (systemSettings.SolderingTemp > 450)
systemSettings.SolderingTemp = 450;
} else { } else {
systemSettings.SolderingTemp -= 10; //sub 10C systemSettings.SolderingTemp -= 10; //sub 10
if (systemSettings.SolderingTemp <= 50)
systemSettings.SolderingTemp = 50;
} }
break; break;
case BUTTON_B_SHORT: case BUTTON_B_SHORT:
if (!lcd.getRotation()) { if (!lcd.getRotation()) {
systemSettings.SolderingTemp += 10; //add 10C systemSettings.SolderingTemp += 10; //add 10
if (systemSettings.SolderingTemp > 450)
systemSettings.SolderingTemp = 450;
} else { } else {
systemSettings.SolderingTemp -= 10; //sub 10C systemSettings.SolderingTemp -= 10; //sub 10
if (systemSettings.SolderingTemp <= 50)
systemSettings.SolderingTemp = 50;
} }
break; break;
} }
// constrain between 50-450 C
if (systemSettings.temperatureInF) {
if (systemSettings.SolderingTemp > 850)
systemSettings.SolderingTemp = 850;
} else {
if (systemSettings.SolderingTemp > 450)
systemSettings.SolderingTemp = 450;
}
if (systemSettings.temperatureInF) {
if (systemSettings.SolderingTemp < 120)
systemSettings.SolderingTemp = 120;
} else {
if (systemSettings.SolderingTemp < 50)
systemSettings.SolderingTemp = 50;
}
if (HAL_GetTick() - lastChange > 1500) if (HAL_GetTick() - lastChange > 1500)
return; // exit if user just doesn't press anything for a bit return; // exit if user just doesn't press anything for a bit
lcd.drawChar('<'); lcd.drawChar('<');
lcd.drawChar(' '); lcd.drawChar(' ');
lcd.printNumber(systemSettings.SolderingTemp, 3); lcd.printNumber(systemSettings.SolderingTemp, 3);
if (systemSettings.temperatureInF)
lcd.drawSymbol(0);
else
lcd.drawSymbol(1); lcd.drawSymbol(1);
lcd.drawChar(' ');
lcd.drawChar('>'); lcd.drawChar('>');
lcd.refresh(); lcd.refresh();
osDelay(10); osDelay(10);
@@ -270,11 +300,12 @@ static void gui_settingsMenu() {
} else { } else {
//Draw description //Draw description
//draw string starting from descriptionOffset //draw string starting from descriptionOffset
int16_t maxOffset = strlen(settingsMenu[currentScreen].description); int16_t maxOffset = strlen(settingsMenu[currentScreen].description);
if (descriptionStart == 0) if (descriptionStart == 0)
descriptionStart = HAL_GetTick(); descriptionStart = HAL_GetTick();
int16_t descriptionOffset = ((HAL_GetTick() - descriptionStart) / 150) % maxOffset; int16_t descriptionOffset = ((HAL_GetTick() - descriptionStart) / 150) % maxOffset;
//^ Rolling offset based on time
lcd.setCursor(12 * (7 - descriptionOffset), 0); lcd.setCursor(12 * (7 - descriptionOffset), 0);
lcd.print(settingsMenu[currentScreen].description); lcd.print(settingsMenu[currentScreen].description);
} }
@@ -320,7 +351,12 @@ static void gui_settingsMenu() {
} }
static void gui_showTipTempWarning() { static void gui_showTipTempWarning() {
for (;;) { for (;;) {
uint16_t tipTemp = tipMeasurementToC(getTipRawTemp(0));
uint16_t tipTemp;
if (systemSettings.temperatureInF)
tipTemp = tipMeasurementToF(getTipRawTemp(0));
else
tipTemp = tipMeasurementToC(getTipRawTemp(0));
lcd.clearScreen(); lcd.clearScreen();
lcd.setCursor(0, 0); lcd.setCursor(0, 0);
if (systemSettings.advancedScreens) { if (systemSettings.advancedScreens) {
@@ -363,9 +399,16 @@ static int gui_SolderingSleepingMode() {
if (checkVoltageForExit()) if (checkVoltageForExit())
return 1; //return non-zero on error return 1; //return non-zero on error
if (systemSettings.temperatureInF)
currentlyActiveTemperatureTarget = ftoTipMeasurement(systemSettings.SleepTemp);
else
currentlyActiveTemperatureTarget = ctoTipMeasurement(systemSettings.SleepTemp); currentlyActiveTemperatureTarget = ctoTipMeasurement(systemSettings.SleepTemp);
//draw the lcd //draw the lcd
uint16_t tipTemp = tipMeasurementToC(getTipRawTemp(0)); uint16_t tipTemp;
if (systemSettings.temperatureInF)
tipTemp = tipMeasurementToF(getTipRawTemp(0));
else
tipTemp = tipMeasurementToC(getTipRawTemp(0));
lcd.clearScreen(); lcd.clearScreen();
lcd.setCursor(0, 0); lcd.setCursor(0, 0);
@@ -462,26 +505,16 @@ static void gui_solderingMode() {
//We switch the layout direction depending on the orientation of the lcd. //We switch the layout direction depending on the orientation of the lcd.
if (lcd.getRotation()) { if (lcd.getRotation()) {
// battery // battery
if (systemSettings.cutoutSetting) { gui_drawBatteryIcon();
//User is on a lithium battery
//we need to calculate which of the 10 levels they are on
uint8_t cellCount = systemSettings.cutoutSetting + 2;
uint16_t cellV = getInputVoltageX10() / cellCount;
//Should give us approx cell voltage X10
//Range is 42 -> 33 = 9 steps therefore we will use battery 1-10
if (cellV < 33)
cellV = 33;
cellV -= 33; //Should leave us a number of 0-9
if (cellV > 9)
cellV = 9;
lcd.drawBattery(cellV + 1);
} else
lcd.drawChar(' '); //print a blank spot if there is no battery symbol
lcd.drawChar(' '); // Space out gap between battery <-> temp lcd.drawChar(' '); // Space out gap between battery <-> temp
if (systemSettings.temperatureInF) {
lcd.printNumber(tipMeasurementToF(tipTemp), 3); //Draw current tip temp
lcd.drawSymbol(0); //deg F
} else {
lcd.printNumber(tipMeasurementToC(tipTemp), 3); //Draw current tip temp lcd.printNumber(tipMeasurementToC(tipTemp), 3); //Draw current tip temp
lcd.drawSymbol(1); //deg C lcd.drawSymbol(1); //deg C
}
//We draw boost arrow if boosting, or else gap temp <-> heat indicator //We draw boost arrow if boosting, or else gap temp <-> heat indicator
if (boostModeOn) if (boostModeOn)
@@ -490,16 +523,16 @@ static void gui_solderingMode() {
lcd.drawChar(' '); lcd.drawChar(' ');
// Draw heating/cooling symbols // Draw heating/cooling symbols
//If tip PWM > 25% then we are 'heating' //If tip PWM > 10% then we are 'heating'
if (getTipPWM() > 25) if (getTipPWM() > 10)
lcd.drawSymbol(14); lcd.drawSymbol(14);
else else
lcd.drawSymbol(15); lcd.drawSymbol(15);
} else { } else {
// Draw heating/cooling symbols // Draw heating/cooling symbols
//If tip PWM > 25% then we are 'heating' //If tip PWM > 10% then we are 'heating'
if (getTipPWM() > 25) if (getTipPWM() > 10)
lcd.drawSymbol(14); lcd.drawSymbol(14);
else else
lcd.drawSymbol(15); lcd.drawSymbol(15);
@@ -509,34 +542,33 @@ static void gui_solderingMode() {
else else
lcd.drawChar(' '); lcd.drawChar(' ');
if (systemSettings.temperatureInF) {
lcd.printNumber(tipMeasurementToF(tipTemp), 3); //Draw current tip temp
lcd.drawSymbol(0); //deg F
} else {
lcd.printNumber(tipMeasurementToC(tipTemp), 3); //Draw current tip temp lcd.printNumber(tipMeasurementToC(tipTemp), 3); //Draw current tip temp
lcd.drawSymbol(1); //deg C lcd.drawSymbol(1); //deg C
}
lcd.drawChar(' '); // Space out gap between battery <-> temp lcd.drawChar(' '); // Space out gap between battery <-> temp
if (systemSettings.cutoutSetting) { gui_drawBatteryIcon();
//User is on a lithium battery
//we need to calculate which of the 10 levels they are on
uint8_t cellCount = systemSettings.cutoutSetting + 2;
uint16_t cellV = getInputVoltageX10() / cellCount;
//Should give us approx cell voltage X10
//Range is 42 -> 33 = 9 steps therefore we will use battery 1-10
if (cellV < 33)
cellV = 33;
cellV -= 33; //Should leave us a number of 0-9
if (cellV > 9)
cellV = 9;
lcd.drawBattery(cellV + 1);
} else
lcd.drawChar(' '); //print a blank spot if there is no battery symbol
} }
} }
//Update the setpoints for the temperature //Update the setpoints for the temperature
if (boostModeOn) if (boostModeOn) {
if (systemSettings.temperatureInF)
currentlyActiveTemperatureTarget = ftoTipMeasurement(systemSettings.BoostTemp);
else
currentlyActiveTemperatureTarget = ctoTipMeasurement(systemSettings.BoostTemp); currentlyActiveTemperatureTarget = ctoTipMeasurement(systemSettings.BoostTemp);
} else {
if (systemSettings.temperatureInF)
currentlyActiveTemperatureTarget = ftoTipMeasurement(systemSettings.SolderingTemp);
else else
currentlyActiveTemperatureTarget = ctoTipMeasurement(systemSettings.SolderingTemp); currentlyActiveTemperatureTarget = ctoTipMeasurement(systemSettings.SolderingTemp);
}
//Undervoltage test //Undervoltage test
if (checkVoltageForExit()) { if (checkVoltageForExit()) {
@@ -676,7 +708,10 @@ void startGUITask(void const * argument) {
lcd.print("Tip Disconnected!"); lcd.print("Tip Disconnected!");
} else { } else {
lcd.print("Tip:"); lcd.print("Tip:");
lcd.printNumber(tipTemp, 3); if (systemSettings.temperatureInF)
lcd.printNumber(tipMeasurementToF(getTipRawTemp(0)), 3);
else
lcd.printNumber(tipMeasurementToC(getTipRawTemp(0)), 3);
lcd.print(" "); lcd.print(" ");
lcd.print("Set:"); lcd.print("Set:");
lcd.printNumber(systemSettings.SolderingTemp, 3); lcd.printNumber(systemSettings.SolderingTemp, 3);
@@ -691,20 +726,14 @@ void startGUITask(void const * argument) {
} else { } else {
lcd.setFont(0); lcd.setFont(0);
if (animationStep & 0x80) { if (lcd.getRotation())
if (animationStep & 0x08) lcd.drawArea(0, 0, 96, 16, idleScreenBG);
lcd.drawArea(0, 0, 96, 8, Iron_RightArrow_UP);
else else
lcd.drawArea(0, 0, 96, 8, Iron_RightArrow_DOWN); lcd.drawArea(0, 0, 96, 16, idleScreenBGF);
lcd.setCursor(0, 0);
gui_drawBatteryIcon();
lcd.drawArea(0, 8, 96, 8, Iron_Base);
} else {
if (animationStep & 0x08)
lcd.drawArea(0, 0, 96, 8, Iron_LeftArrow_UP);
else
lcd.drawArea(0, 0, 96, 8, Iron_LeftArrow_DOWN);
lcd.drawArea(0, 8, 96, 8, Iron_Base);
}
} }
lcd.refresh(); lcd.refresh();

View File

@@ -411,99 +411,41 @@ const uint8_t FontSymbols[] = {
0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x04,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x04,//UP block 0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x04,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x04,//UP block
0x00,0x20,0x60,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0x60,0x20,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x03,0x01,0x00,0x00,0x00,//Down block 0x00,0x20,0x60,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0x60,0x20,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x03,0x01,0x00,0x00,0x00,//Down block
}; };
const uint8_t idleScreenBG[] = {
const uint8_t Iron_Base[] ={ //width = 96
0x00,0x20,0x60,0x60,0x60,0x60,0x60,0x60,0x90,0x90,0x90,0x90, //height = 16
0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0,
0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x60,0x60, 0x0C, 0x02, 0x02, 0x01, 0x01, 0x01, 0x81, 0xFD, 0x81, 0x01, 0x01, 0x01, 0x1D, 0xF1, 0xF1, 0x1D, 0x01, 0x01,
0x60,0x60,0x60,0x60,0x60,0x70,0xF8,0x88,0x84,0x82,0x82,0x83, 0x01, 0x01, 0x02, 0x02, 0x0C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0C, 0x02,
0x83,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x83,0x83,0x83, 0x02, 0x01, 0x01, 0x01, 0x0D, 0x1D, 0x29, 0x71, 0xA1, 0xC1, 0x01, 0x01, 0x01, 0x31, 0xC9, 0x01, 0x01, 0x01,
0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x86,0x84,0x84,0x84, 0x02, 0x02, 0x0C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x84,0x84,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x20, 0x40, 0x40, 0x40, 0x4F, 0x4F, 0x4F, 0x40, 0x40, 0x40,
0x4E, 0x43, 0x43, 0x4E, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x20, 0x40, 0x40, 0x40, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x49, 0x4A,
0x4C, 0x49, 0x48, 0x48, 0x40, 0x40, 0x20, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}; };
//The top pixel row for left arrow / on hint
const uint8_t Iron_LeftArrow_UP[] = { const uint8_t idleScreenBGF[] = {
0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0xFE,0x08,0x10,0x20,0xFE,//ON //width = 96
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //height = 16
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88, 0x00, 0x00, 0xF0, 0x0C, 0x02, 0x02, 0x01, 0x01, 0x01, 0xC9, 0x31, 0x01, 0x01, 0x01, 0xC1, 0xA1, 0x71, 0x29,
0x98,0xBF,0xBF,0x98,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1D, 0x0D, 0x01, 0x01, 0x01, 0x02, 0x02, 0x0C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xF0, 0x0C, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x1D, 0xF1, 0xF1, 0x1D, 0x01, 0x01, 0x01, 0x81, 0xFD, 0x81,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x0C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x20, 0x40, 0x40, 0x48, 0x48, 0x49, 0x4C,
0x4A, 0x49, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x40, 0x40, 0x40, 0x20, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x4E, 0x43, 0x43, 0x4E,
0x40, 0x40, 0x40, 0x4F, 0x4F, 0x4F, 0x40, 0x40, 0x40, 0x20, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}; };
const uint8_t Iron_LeftArrow_DOWN[] = {
0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0xFE,0x08,0x10,0x20,0xFE,//ON
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
0x30,0x7E,0x7E,0x30,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
//The top pixel row for both arrows /
const uint8_t Iron_BothArrows[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,
0x98,0xBF,0xBF,0x98,0x88,0x00,0x00,0x00,0x00,0x88,0x98,0xBF,
0xBF,0x98,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
//The top pixel row for right arrow / settings hint
const uint8_t Iron_RightArrow_UP[] = {
0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0xFE,0x92,0x92,0x92,0x82,//SE
0x00,0x02,0x02,0xFE,0x02,0x02,0x00,0x02,0x02,0xFE,0x02,0x02,//TT
0x00,0x00,0x82,0xFE,0x82,0x00,0x00,0xFE,0x08,0x10,0x20,0xFE,//IN
0x00,0x7C,0x82,0x82,0xA2,0x62,0x00,0x8C,0x92,0x92,0x92,0x62,//GS
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x98,0xBF,
0xBF,0x98,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
const uint8_t Iron_RightArrow_DOWN[] = {
0x00,0x8C,0x92,0x92,0x92,0x62,0x00,0xFE,0x92,0x92,0x92,0x82,//SE
0x00,0x02,0x02,0xFE,0x02,0x02,0x00,0x02,0x02,0xFE,0x02,0x02,//TT
0x00,0x00,0x82,0xFE,0x82,0x00,0x00,0xFE,0x08,0x10,0x20,0xFE,//IN
0x00,0x7C,0x82,0x82,0xA2,0x62,0x00,0x8C,0x92,0x92,0x92,0x62,//GS
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x30,0x7E,
0x7E,0x30,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
const uint8_t SymbolTable[]={
0x0E,0x11,0x11,0x0E,0xE0,0xF8,0x0C,0x06,0x03,0x01,0x01,0x01,0x01,0x02,0x1E,0x00,
0x00,0x00,0x00,0x00,0x0F,0x3F,0x70,0xC0,0x80,0x80,0x80,0x80,0x80,0x40,0x20,0x00, // Degrees C
0x08,0x14,0x22,0x14,0x08,0x02,0x02,0xFE,0x06,0x02,0x02,0x02,0xC2,0x02,0x06,0x1E,
0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xFF,0x81,0x81,0x01,0x01,0x03,0x00,0x00,0x00, // Degrees F
0xC0,0x30,0x08,0x04,0x04,0x02,0xFA,0xAA,0xFA,0x02,0x04,0x04,0x08,0x30,0xC0,0x00,
0x07,0x18,0x20,0x40,0x58,0xA4,0xDB,0xDE,0xDB,0xA4,0x58,0x40,0x20,0x18,0x07,0x00, // Temp symbol
0x00,0xF0,0xF0,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0xFC,0xF8,0xF0,0xE0,0xC0,0x80, //Right Arrow
0x00,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x3F,0x1F,0x0F,0x07,0x03,0x01,
0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0xF0,0xF0,0x00, //Left Arrow
0x01,0x03,0x07,0x0F,0x1F,0x3F,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00,
0x11,0x33,0x66,0xCC,0x98,0x30,0x60,0xC0,0xC0,0x60,0x30,0x98,0xCC,0x66,0x33,0x11,
0x01,0x03,0x06,0x0C,0x19,0x33,0x66,0xCC,0xCC,0x66,0x33,0x19,0x0C,0x06,0x03,0x01, //Down Chevron
0x80,0xC0,0x60,0x30,0x98,0xCC,0x66,0x33,0x33,0x66,0xCC,0x98,0x30,0x60,0xC0,0x80,
0x88,0xCC,0x66,0x33,0x19,0x0C,0x06,0x03,0x03,0x06,0x0C,0x19,0x33,0x66,0xCC,0x88, //Up Chevron
0x00,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x00, // Flat Lines
0x00,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x00,
};
const unsigned char ASCII6x8[] = { const unsigned char ASCII6x8[] = {
//1*8*6 һ<><D2BB> //1*8*6 һ<><D2BB>