mirror of
https://github.com/wagiminator/ATmega-Soldering-Station.git
synced 2025-08-07 13:00:30 +03:00
v1.8t7
1.校准模式增加9段温度曲线拟合,使温度读数更加精准 Add 9 sections of temperature curve fitting to the calibration mode to make the temperature reading more accurate 2.烙铁头设定数量增加到30个上限 Increase the number of tips to 30
This commit is contained in:
6
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/arduino.json
vendored
Normal file
6
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/arduino.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"board": "arduino:avr:uno",
|
||||
"programmer": "Arduino as ISP",
|
||||
"port": "COM3",
|
||||
"sketch": "1.8t6.ino"
|
||||
}
|
25
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/c_cpp_properties.json
vendored
Normal file
25
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/c_cpp_properties.json
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Win32",
|
||||
"includePath": [
|
||||
"D:/Program Files (x86)/Arduino/libraries",
|
||||
"D:/Program Files (x86)/Arduino/hardware/arduino/avr/**",
|
||||
"D:/Program Files (x86)/Arduino/hardware/tools/avr/avr/include",
|
||||
"D:/Program Files (x86)/Arduino/hardware/tools/avr/lib/gcc/avr/7.3.0/include",
|
||||
"D:/Program Files (x86)/Arduino/hardware/tools/avr/lib/gcc/avr/7.3.0/include-fixed",
|
||||
"D:/Program Files (x86)/Arduino/tools/**",
|
||||
"D:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\**",
|
||||
"D:\\Program Files (x86)\\Arduino\\tools\\**"
|
||||
],
|
||||
"forcedInclude": [
|
||||
"D:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino\\Arduino.h"
|
||||
],
|
||||
"intelliSenseMode": "msvc-x64",
|
||||
"compilerPath": "D:\\mingw64\\bin\\gcc.exe",
|
||||
"cStandard": "gnu17",
|
||||
"cppStandard": "gnu++14"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
29
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/launch.json
vendored
Normal file
29
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
// 使用 IntelliSense 了解相关属性。
|
||||
// 悬停以查看现有属性的描述。
|
||||
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "g++.exe - 生成和调试活动文件",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
|
||||
"args": [],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "${workspaceFolder}",
|
||||
"environment": [],
|
||||
"externalConsole": false,
|
||||
"MIMode": "gdb",
|
||||
"miDebuggerPath": "D:\\mingw64\\bin\\gdb.exe",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "为 gdb 启用整齐打印",
|
||||
"text": "-enable-pretty-printing",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"preLaunchTask": "C/C++: g++.exe build active file"
|
||||
}
|
||||
]
|
||||
}
|
27
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/tasks.json
vendored
Normal file
27
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/.vscode/tasks.json
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"tasks": [
|
||||
{
|
||||
"type": "cppbuild",
|
||||
"label": "C/C++: g++.exe build active file",
|
||||
"command": "D:\\mingw64\\bin\\g++.exe",
|
||||
"args": [
|
||||
"-g",
|
||||
"${file}",
|
||||
"-o",
|
||||
"${fileDirname}\\${fileBasenameNoExtension}.exe"
|
||||
],
|
||||
"options": {
|
||||
"cwd": "D:\\mingw64\\bin"
|
||||
},
|
||||
"problemMatcher": [
|
||||
"$gcc"
|
||||
],
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"detail": "Generated task by Debugger"
|
||||
}
|
||||
],
|
||||
"version": "2.0.0"
|
||||
}
|
328
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/1.8t6.ino
Normal file
328
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/1.8t6.ino
Normal file
@@ -0,0 +1,328 @@
|
||||
/*License: http://creativecommons.org/licenses/by-sa/3.0/
|
||||
采用CC3.0协议共享此程序
|
||||
您可以自由地
|
||||
共享 — 在任何媒介以任何形式复制、发行本作品
|
||||
演绎 — 修改、翻译或以本作品为基础进行创作
|
||||
在任何用途下,甚至商业目的。
|
||||
本许可协议为“自由文化作品(Free Cultural Works)”所接受。
|
||||
只要你遵守许可协议条款,许可人就无法收回你的这些权利。
|
||||
|
||||
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
|
||||
This is a human-readable summary of (and not a substitute for) the license. Disclaimer.
|
||||
You are free to:
|
||||
Share — copy and redistribute the material in any medium or format
|
||||
Adapt — remix, transform, and build upon the material
|
||||
for any purpose, even commercially.
|
||||
This license is acceptable for Free Cultural Works.
|
||||
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
||||
*/
|
||||
// SolderingStation2
|
||||
//
|
||||
// ATmega328-controlled Soldering Station for Hakko T12 Tips.
|
||||
// 此v1.8t6版本功能简介
|
||||
// This 1.8t5 version of the code implements:
|
||||
// - 烙铁头温度实时监测
|
||||
// - Temperature measurement of the tip
|
||||
// - PID温度控制
|
||||
// - Direct or PID control of the heater
|
||||
// - 可以通过编码器进行控制温度
|
||||
// - Temperature control via rotary encoder
|
||||
// - 短按编码器进入短时升温模式
|
||||
// - Boost mode by short pressing rotary encoder switch
|
||||
// - 长按编码器进入主菜单
|
||||
// - Setup menu by long pressing rotary encoder switch
|
||||
// - 手柄震动检测(需要手柄含有震动传感器)
|
||||
// - Handle movement detection (by checking ball switch)
|
||||
// - 手柄连接检测(通过判断烙铁头温度是否能够被读取来实现)
|
||||
// - Iron unconnected detection (by idenfying invalid temperature readings)
|
||||
// - 定时器设定 - 随眠,关机时间
|
||||
// - Time driven sleep/power off mode if iron is unused (movement detection)
|
||||
// - 可以测量主控芯片电压以及温度
|
||||
// - Measurement of input voltage, Vcc and ATmega's internal temperature
|
||||
// - 在OLED上实现信息显示
|
||||
// - Information display on OLED
|
||||
// - 支持无源蜂鸣器
|
||||
// - Buzzer
|
||||
// - 允许设置不同烙铁头的温度校准值
|
||||
// - Calibrating and managing different soldering tips
|
||||
// - 设置被保存在EEPROM,掉电不丢失
|
||||
// - Storing user settings into the EEPROM
|
||||
// - 允许热插拔烙铁头,并弹出烙铁头配置选择菜单
|
||||
// - Tip change detection
|
||||
// - 芯片过热以及低电压报警
|
||||
// - Chip overheating and low voltage alarm
|
||||
// - 更好的实时温度条以及实时功率条
|
||||
// - Better real-time temperature bar and real-time power bar
|
||||
// - 拥有过渡动画
|
||||
// - Have transition animation
|
||||
// - 内置屏幕保护程序
|
||||
// - Built in screen saver
|
||||
// - 屏幕翻转设置
|
||||
// - Screen flip settings
|
||||
// - 内置英文、中文、日文语言包
|
||||
// - Built in English, Chinese and Japanese language pack
|
||||
// - 开机密码设置
|
||||
// - System Password
|
||||
// - 允许设置旋钮方向
|
||||
// - Knob direction setting menu
|
||||
// - 内嵌看门狗,宕机自动重启
|
||||
// - Watchdog timer automatic reset the MCU
|
||||
|
||||
// Power supply should be in the range of 16V/2A to 24V/3A and well
|
||||
// stabilized.
|
||||
//
|
||||
// For calibration you need a soldering iron tips thermometer. For best results
|
||||
// wait at least three minutes after switching on the soldering station before
|
||||
// you start the calibration process.
|
||||
//
|
||||
// Controller: ATmega328p
|
||||
// Core: Barebones ATmega (https://github.com/carlosefr/atmega)
|
||||
// Clockspeed: 16 MHz external
|
||||
//
|
||||
// 2019/2020 by Stefan Wagner with great support from John Glavinos
|
||||
// 2020-8 UI upgrade by LHW-createskyblue 、lihaoyun6
|
||||
// Project Page: https://easyeda.com/wagiminator
|
||||
|
||||
|
||||
bool lastbutton;
|
||||
#include <Arduboy2.h> //注意 这里使用被阉割的图形库,只有绘图功能,并非通用的版本
|
||||
Arduboy2 arduboy;
|
||||
|
||||
#include <EEPROM.h>
|
||||
#include <PID_v1.h>
|
||||
#include <avr/sleep.h>
|
||||
// Firmware version
|
||||
#define VERSION "v1.8t6"
|
||||
|
||||
// Type of rotary encoder
|
||||
#define ROTARY_TYPE 1 // 0: 2 increments/step; 1: 4 increments/step
|
||||
|
||||
// Pins
|
||||
#define SENSOR_PIN A0 // temperature sense
|
||||
#define VIN_PIN A1 // input voltage sense
|
||||
#define BUZZER_PIN 5 // buzzer
|
||||
#define BUTTON_PIN 6 // rotary encoder switch
|
||||
#define ROTARY_1_PIN 7 // rotary encoder 1
|
||||
#define ROTARY_2_PIN 8 // rotary encoder 2
|
||||
#define CONTROL_PIN 9 // heater MOSFET PWM control
|
||||
#define SWITCH_PIN 10 // handle vibration switch
|
||||
|
||||
// Default temperature control values (recommended soldering temperature: 300-380°C)
|
||||
#define TEMP_MIN 100 // min selectable temperature
|
||||
#define TEMP_MAX 400 // max selectable temperature
|
||||
#define TEMP_DEFAULT 320 // default start setpoint
|
||||
#define TEMP_SLEEP 150 // temperature in sleep mode
|
||||
#define TEMP_BOOST 60 // temperature increase in boost mode
|
||||
#define TEMP_STEP 10 // rotary encoder temp change steps
|
||||
|
||||
// Default tip temperature calibration values
|
||||
#define TEMPCHP 30 // chip temperature while calibration
|
||||
#define TIPMAX 2 // max number of tips
|
||||
#define TIPNAMELENGTH 6 // max length of tip names (including termination)
|
||||
#define TIPNAME "SZtip" // default tip name
|
||||
|
||||
|
||||
// Default timer values (0 = disabled)
|
||||
#define TIME2SLEEP 5 // time to enter sleep mode in minutes
|
||||
#define TIME2OFF 15 // time to shut off heater in minutes
|
||||
#define TIMEOFBOOST 40 // time to stay in boost mode in seconds
|
||||
|
||||
// Control values
|
||||
#define TIME2SETTLE 950 // time in microseconds to allow OpAmp output to settle
|
||||
#define SMOOTHIE 0.05 // OpAmp output smooth factor (1=no smoothing; 0.05 default)
|
||||
#define PID_ENABLE true // enable PID control
|
||||
#define BEEP_ENABLE false // enable/disable buzzer
|
||||
#define MAINSCREEN 1 // type of main screen (0: big numbers; 1: more infos)
|
||||
|
||||
// EEPROM identifier
|
||||
#define EEPROM_IDENT 0x140B // to identify if EEPROM was written by this program
|
||||
|
||||
//Beep
|
||||
#define SetBeepCoolTime 200
|
||||
unsigned long BeepCoolTime;
|
||||
|
||||
// Define the aggressive and conservative PID tuning parameters
|
||||
double aggKp = 11, aggKi = 0.5, aggKd = 1;
|
||||
double consKp = 11, consKi = 3, consKd = 5;
|
||||
|
||||
// Default values that can be changed by the user and stored in the EEPROM
|
||||
uint16_t DefaultTemp = TEMP_DEFAULT;
|
||||
uint16_t SleepTemp = TEMP_SLEEP;
|
||||
uint8_t BoostTemp = TEMP_BOOST;
|
||||
uint8_t Time2sleep = TIME2SLEEP;
|
||||
uint8_t Time2off = TIME2OFF;
|
||||
uint8_t TimeOfBoost = TIMEOFBOOST;
|
||||
uint8_t MainScrType = MAINSCREEN;
|
||||
bool PIDenable = PID_ENABLE;
|
||||
bool BeepEnable = BEEP_ENABLE;
|
||||
|
||||
//温度拟合
|
||||
#define TempP1 10.2675914764
|
||||
#define TempP2 1.7323191166
|
||||
#define TempP3 -0.0033245713
|
||||
#define TempP4 0.0000045338
|
||||
float PTemp[TIPMAX][4] = {TempP1, TempP2, TempP3, TempP4}; //温度拟合系数
|
||||
const uint16_t CalTemp[9] = {50,100,150,200,250,300,350,400,450};
|
||||
char TipName[TIPMAX][TIPNAMELENGTH] = {TIPNAME};
|
||||
uint8_t CurrentTip = 0;
|
||||
uint8_t NumberOfTips = 1;
|
||||
|
||||
// Variables for pin change interrupt
|
||||
volatile uint8_t a0, b0, c0, d0;
|
||||
volatile bool ab0;
|
||||
volatile int Count, CountMin, CountMax, CountStep;
|
||||
volatile bool handleMoved;
|
||||
|
||||
// Variables for temperature control
|
||||
uint16_t SetTemp, ShowTemp, gap, Step;
|
||||
double Input, Output, Setpoint, RawTemp, CurrentTemp, ChipTemp;
|
||||
|
||||
// Variables for voltage readings
|
||||
uint16_t Vcc, Vin;
|
||||
|
||||
// State variables
|
||||
bool InSleepMode = false;
|
||||
bool InOffMode = false;
|
||||
bool InBoostMode = false;
|
||||
bool InCalibMode = false;
|
||||
bool IsWorky = true;
|
||||
bool BeepIfWorky = true;
|
||||
bool TipIsPresent = true;
|
||||
bool FlipState = false;
|
||||
// Timing variables
|
||||
uint32_t Sleepmillis;
|
||||
uint32_t Boostmillis;
|
||||
uint32_t Buttonmillis;
|
||||
uint8_t GoneMinutes;
|
||||
uint8_t GoneSeconds;
|
||||
uint8_t SensorCounter = 255;
|
||||
//串口助手
|
||||
//int x, y, a, b;
|
||||
//欠压报警
|
||||
byte UnderVoltage = 0;
|
||||
// Control variables
|
||||
uint16_t Time2settle = 300;
|
||||
|
||||
//模拟数字滚轮 Numerical scrolling effect
|
||||
int Value;
|
||||
int LastValue[3];
|
||||
int SlidingAnimationY[3];
|
||||
|
||||
//开机密码 BootPassword
|
||||
int Password = 0;
|
||||
|
||||
//屏幕保护-主题:密集运算
|
||||
byte Line[4];
|
||||
|
||||
//编码器旋转调整方向设定
|
||||
bool RotaryD = false;
|
||||
|
||||
//开机非线性动画
|
||||
byte BootAnimationY=64;
|
||||
|
||||
// Specify the links and initial PID tuning parameters
|
||||
PID ctrl(&Input, &Output, &Setpoint, aggKp, aggKi, aggKd, REVERSE);
|
||||
|
||||
//NMOS - PMOS软件切换
|
||||
#define UsePMOS false
|
||||
|
||||
//LANG 语言支持
|
||||
/* 0 - 中文 CHINESE
|
||||
1 - 英文 ENGLISH
|
||||
2 - 日语 x (此版本不支持)
|
||||
*/
|
||||
byte LANG = 0;
|
||||
|
||||
|
||||
|
||||
void setup() {
|
||||
//设置看门狗自动复位
|
||||
set_wdt_mod(3, 7);
|
||||
|
||||
//启动arduboy内核
|
||||
arduboy.begin();
|
||||
arduboy.setFrameRate(30);
|
||||
|
||||
//Serial.begin(115200);
|
||||
|
||||
// set the pin modes
|
||||
//设置IO
|
||||
pinMode(SENSOR_PIN, INPUT);
|
||||
pinMode(VIN_PIN, INPUT);
|
||||
pinMode(BUZZER_PIN, OUTPUT);
|
||||
pinMode(CONTROL_PIN, OUTPUT);
|
||||
pinMode(ROTARY_1_PIN, INPUT_PULLUP);
|
||||
pinMode(ROTARY_2_PIN, INPUT_PULLUP);
|
||||
pinMode(BUTTON_PIN, INPUT_PULLUP);
|
||||
pinMode(SWITCH_PIN, INPUT_PULLUP);
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 0);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, 255); // this shuts off the heater
|
||||
#endif
|
||||
digitalWrite(BUZZER_PIN, LOW); // must be LOW when buzzer not in use
|
||||
|
||||
//初始化ADC
|
||||
//setup ADC
|
||||
ADCSRA |= bit (ADPS0) | bit (ADPS1) | bit (ADPS2); // set ADC prescaler to 128
|
||||
ADCSRA |= bit (ADIE); // enable ADC interrupt
|
||||
interrupts (); // enable global interrupts
|
||||
|
||||
//初始化编码器IO
|
||||
// setup pin change interrupt for rotary encoder
|
||||
PCMSK0 = bit (PCINT0); // Configure pin change interrupt on Pin8
|
||||
PCICR = bit (PCIE0); // Enable pin change interrupt
|
||||
PCIFR = bit (PCIF0); // Clear interrupt flag
|
||||
|
||||
//从EEPROM读取设置
|
||||
// get default values from EEPROM
|
||||
getEEPROM();
|
||||
|
||||
//设置屏幕反转状态
|
||||
Flip(FlipState);
|
||||
|
||||
//设置屏幕亮度
|
||||
SetOLEDLightLevel(32); //降低屏幕亮度 延长OLED使用寿命
|
||||
|
||||
//初始化屏幕保护动画
|
||||
for (byte a = 0; a < 4; a++) Line[a] = 32 * a;
|
||||
|
||||
//密码保护
|
||||
BootPassword();
|
||||
// read supply voltages in mV
|
||||
Vcc = getVCC(); Vin = getVIN();
|
||||
// read and set current iron temperature
|
||||
SetTemp = DefaultTemp;
|
||||
RawTemp = denoiseAnalog(SENSOR_PIN);
|
||||
ChipTemp = getChipTemp();
|
||||
calculateTemp();
|
||||
// turn on heater if iron temperature is well below setpoint
|
||||
#if UsePMOS
|
||||
if ((CurrentTemp + 20) < DefaultTemp) analogWrite(CONTROL_PIN, 255);
|
||||
#else
|
||||
if ((CurrentTemp + 20) < DefaultTemp) analogWrite(CONTROL_PIN, 0);
|
||||
#endif
|
||||
// tell the PID to range between 0 and the full window size
|
||||
ctrl.SetOutputLimits(0, 255);
|
||||
// start PID
|
||||
ctrl.SetMode(AUTOMATIC);
|
||||
// set initial rotary encoder values
|
||||
a0 = PINB & 1; b0 = PIND >> 7 & 1; ab0 = (a0 == b0);
|
||||
setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, DefaultTemp);
|
||||
// reset sleep timer
|
||||
Sleepmillis = millis();
|
||||
|
||||
// long beep for setup completion
|
||||
beep(); beep();
|
||||
ShowVersion();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
//HelpMeSerialer();
|
||||
ROTARYCheck(); // check rotary encoder (temp/boost setting, enter setup menu)
|
||||
SLEEPCheck(); // check and activate/deactivate sleep modes
|
||||
SENSORCheck(); // reads temperature and vibration switch of the iron
|
||||
Thermostat(0); // heater control
|
||||
MainScreen(); // updates the main page on the OLED
|
||||
//beep(0);
|
||||
}
|
@@ -0,0 +1,85 @@
|
||||
|
||||
//关于界面-项目页面二维码 ->为了加入欠压报警只能阉割掉关于页面的二维码
|
||||
//const unsigned char QRCode[] PROGMEM = { 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x1f, 0xfe, 0x3f, 0xc1, 0x8c, 0x0c, 0x7f, 0xf8, 0x1f, 0xfe, 0x3f, 0xc1, 0x8c, 0x0c, 0x7f, 0xf8, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x3e, 0x0f, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3e, 0x0f, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x1f, 0xfe, 0x3e, 0x30, 0x70, 0x0c, 0x7f, 0xf8, 0x1f, 0xfe, 0x3e, 0x30, 0x70, 0x0c, 0x7f, 0xf8, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x01, 0x83, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x01, 0x83, 0x8f, 0xff, 0xff, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0xf8, 0x00, 0x3e, 0x3e, 0x03, 0xf0, 0x7f, 0x00, 0xf8, 0x00, 0x3e, 0x3e, 0x03, 0xf0, 0x7f, 0x00, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0x18, 0xc0, 0x31, 0xfe, 0x0c, 0x0c, 0x1c, 0xe0, 0x18, 0xc0, 0x31, 0xfe, 0x0c, 0x0c, 0x1c, 0xe0, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0x1f, 0x00, 0x31, 0xcf, 0xf3, 0x8c, 0x03, 0x00, 0x1f, 0x00, 0x31, 0xcf, 0xf3, 0x8c, 0x03, 0x00, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x3e, 0x7c, 0x0f, 0xe0, 0x00, 0xff, 0xff, 0xf0, 0x3e, 0x7c, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x1f, 0xfe, 0x30, 0x01, 0x83, 0x8f, 0xe0, 0xff, 0x1f, 0xfe, 0x30, 0x01, 0x83, 0x8f, 0xe0, 0xff, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x3f, 0xff, 0x83, 0x83, 0xe3, 0x1f, 0x18, 0x06, 0x3f, 0xff, 0x83, 0x83, 0xe3, 0x1f, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x1f, 0xfe, 0x31, 0xfe, 0x00, 0x0c, 0x60, 0xe7, 0x1f, 0xfe, 0x31, 0xfe, 0x00, 0x0c, 0x60, 0xe7, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0 };
|
||||
const unsigned char QRCode[] PROGMEM = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0x86, 0x70, 0x80, 0x03, 0x80, 0x03, 0x86, 0x70, 0x80, 0x03, 0x9f, 0xf3, 0xe1, 0x30, 0x9f, 0xf3, 0x9f, 0xf3, 0xe1, 0x30, 0x9f, 0xf3, 0x98, 0x33, 0x01, 0xcc, 0x98, 0x33, 0x98, 0x33, 0x01, 0xcc, 0x98, 0x33, 0x98, 0x33, 0x87, 0xc0, 0x98, 0x33, 0x98, 0x33, 0xe1, 0xc0, 0x98, 0x33, 0x98, 0x33, 0xe1, 0xc0, 0x98, 0x33, 0x9f, 0xf3, 0x98, 0xc0, 0x9f, 0xf3, 0x9f, 0xf3, 0x98, 0xc0, 0x9f, 0xf3, 0x80, 0x03, 0x66, 0xcc, 0x80, 0x03, 0x80, 0x03, 0x66, 0xcc, 0x80, 0x03, 0xff, 0xff, 0x01, 0x0c, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x61, 0x30, 0x1f, 0x3f, 0x87, 0x3c, 0xe6, 0xfc, 0x87, 0x33, 0x87, 0x3c, 0xe6, 0xfc, 0x87, 0xf3, 0xf8, 0x03, 0x9e, 0x0f, 0x1f, 0x03, 0xf8, 0x03, 0x9e, 0x0f, 0x1f, 0x03, 0xe1, 0x3c, 0xfe, 0x0c, 0x07, 0xcf, 0xe1, 0x3c, 0xfe, 0x0c, 0x07, 0xcf, 0x99, 0x03, 0x3e, 0x30, 0x86, 0xc3, 0xe6, 0xcf, 0x38, 0x0f, 0x9e, 0xf3, 0xe6, 0xcf, 0x38, 0x0f, 0x9e, 0xf3, 0x9e, 0x03, 0x27, 0xcc, 0x81, 0x03, 0x9e, 0x03, 0x27, 0xcc, 0x81, 0x03, 0xe0, 0xff, 0xe1, 0x0c, 0xe6, 0xcf, 0xe0, 0xff, 0xe1, 0x0c, 0xe6, 0xcf, 0x98, 0x03, 0x06, 0x00, 0x00, 0xff, 0x98, 0x03, 0x06, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1e, 0xf0, 0xf8, 0x03, 0x80, 0x03, 0x66, 0x30, 0x99, 0xc3, 0x80, 0x03, 0x66, 0x30, 0x99, 0xc3, 0x9f, 0xf3, 0x01, 0x0c, 0xf8, 0xff, 0x9f, 0xf3, 0x01, 0x0c, 0xf8, 0xff, 0x98, 0x33, 0x39, 0x3c, 0x01, 0xcf, 0x98, 0x33, 0x39, 0x3c, 0x01, 0xcf, 0x98, 0x33, 0xff, 0x0c, 0x79, 0x3f, 0x98, 0x33, 0x3e, 0xcc, 0xe0, 0xf3, 0x98, 0x33, 0x3e, 0xcc, 0xe0, 0xf3, 0x9f, 0xf3, 0x3e, 0x00, 0x98, 0xcf, 0x9f, 0xf3, 0x3e, 0x00, 0x98, 0xcf, 0x80, 0x03, 0x3e, 0x30, 0xe7, 0xc3, 0x80, 0x03, 0x3e, 0x30, 0xe7, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
||||
//ICO
|
||||
//width:16,height:16
|
||||
const unsigned char Tag[] PROGMEM = { 0x00, 0x00, 0x3b, 0xec, 0x7b, 0xee, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0x66, 0x62, 0x26, 0x60, 0x06, 0x60, 0x06, 0x7f, 0xfe, 0x3f, 0xfc, 0x00, 0x00 };
|
||||
const unsigned char Chip[] PROGMEM = { 0x14, 0xa0, 0x3f, 0xf0, 0x7f, 0xf8, 0xe0, 0x1c, 0x6e, 0x18, 0xec, 0x1c, 0x68, 0x18, 0x60, 0x18, 0xe0, 0x1c, 0x60, 0x58, 0xe0, 0x1c, 0x7f, 0xf8, 0x3f, 0xf0, 0x14, 0xa0 };
|
||||
//const unsigned char HeatPipe[] PROGMEM = { 0x00, 0x00, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x01, 0x80, 0x00, 0x00 };
|
||||
const unsigned char Lightning[] PROGMEM = { 0x0f, 0xe0, 0x1f, 0xc0, 0x1f, 0xc0, 0x3f, 0x80, 0x3f, 0xf8, 0x7f, 0xf0, 0x7f, 0xe0, 0x07, 0xc0, 0x07, 0x80, 0x0f, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x10, 0x00 };
|
||||
//const unsigned char Thermometer[] PROGMEM = { 0x01, 0x80, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0 };
|
||||
const unsigned char Pointer[] PROGMEM = { 0x20, 0x20, 0x70, 0xf8 };
|
||||
//状态提示
|
||||
//width:14,height:14 图标库
|
||||
|
||||
const unsigned char c1[] PROGMEM = { 0x03, 0x00, 0x07, 0x80, 0x0f, 0xc0, 0x0c, 0xc0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xf0, 0x3c, 0xf0, 0x7f, 0xf8, 0x7f, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xff, 0xfc, 0x7f, 0xf8 };
|
||||
const unsigned char c2[] PROGMEM = { 0x7f, 0xf8, 0xff, 0xfc, 0xc0, 0x0c, 0xc3, 0x0c, 0xcb, 0x4c, 0xdb, 0x6c, 0xdb, 0x6c, 0xd8, 0x6c, 0xdc, 0xec, 0xcf, 0xcc, 0xc7, 0x8c, 0xc0, 0x0c, 0xff, 0xfc, 0x7f, 0xf8 };
|
||||
const unsigned char c3[] PROGMEM = { 0x00, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x18, 0xf8, 0x38, 0xf0, 0x30, 0x30, 0x70, 0x60, 0x70, 0x78, 0x78, 0xf8, 0x78, 0x00, 0x3c, 0x02, 0x3f, 0x0c, 0x1f, 0xf8, 0x0f, 0xf0, 0x03, 0xc0, 0x00, 0x00 };
|
||||
const unsigned char c5[] PROGMEM = { 0x7f, 0xf0, 0xff, 0xe0, 0xc0, 0x08, 0xc0, 0x1c, 0xc0, 0x38, 0xc8, 0x70, 0xdc, 0xe4, 0xcf, 0xcc, 0xc7, 0x8c, 0xc3, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xff, 0xfc, 0x7f, 0xf8 };
|
||||
const unsigned char c6[] PROGMEM = { 0x1e, 0x10, 0x33, 0x38, 0x2d, 0x7c, 0x25, 0x38, 0x2d, 0x38, 0x25, 0x38, 0x2d, 0x38, 0x6d, 0x80, 0xde, 0xc0, 0xbf, 0x40, 0xbf, 0x40, 0xde, 0xc0, 0x61, 0x80, 0x3f, 0x00 };
|
||||
const unsigned char c7[] PROGMEM = { 0x1f, 0xe0, 0x3f, 0xf0, 0x70, 0x38, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0xff, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xf8, 0x7c, 0xf8, 0x7c, 0xfc, 0xfc, 0x7f, 0xf8 };
|
||||
const unsigned char c_NO[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x37, 0xb0, 0x23, 0x10, 0x30, 0x30, 0x38, 0x70, 0x38, 0x70, 0x30, 0x30, 0x23, 0x10, 0x37, 0xb0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char *C_table[] = {c1, c2, c3, Lightning, c5, c6, c7};
|
||||
|
||||
//设置(语言是一种低像素的表达方式,容易造成隔阂; 交互界面设计尽可能形象化)
|
||||
// width: 14, height: 14
|
||||
const unsigned char QRC[] PROGMEM = { 0x05, 0x80, 0x74, 0xb8, 0x57, 0xa8, 0x76, 0xb8, 0x05, 0x80, 0xf9, 0x7c, 0x46, 0x94, 0xaa, 0xa8, 0xf9, 0x7c, 0x06, 0x88, 0x74, 0xa8, 0x57, 0x8c, 0x75, 0x74, 0x06, 0x98 };
|
||||
const unsigned char Set0[] PROGMEM = { 0x88, 0x24, 0x08, 0x20, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x39, 0x30, 0x3b, 0xb0, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set1[] PROGMEM = { 0xf8, 0x7c, 0xf3, 0x3c, 0xf4, 0xbc, 0xf6, 0xbc, 0xf4, 0xbc, 0xf6, 0xbc, 0xf4, 0xbc, 0xe4, 0x9c, 0xc8, 0x4c, 0xd0, 0x2c, 0xd0, 0x2c, 0xc8, 0x4c, 0xe7, 0x9c, 0xf0, 0x3c };
|
||||
const unsigned char Set2[] PROGMEM = { 0x8f, 0xc4, 0x10, 0x20, 0x20, 0x10, 0x4c, 0xc8, 0x9f, 0xe4, 0x3d, 0xf0, 0x3d, 0xf0, 0x1d, 0xe0, 0x3e, 0xf0, 0x3f, 0x70, 0x9f, 0xe4, 0x8c, 0xc4, 0x00, 0x00, 0x30, 0x30 };
|
||||
const unsigned char Set3[] PROGMEM = { 0xc3, 0xfc, 0x18, 0x00, 0x18, 0x00, 0xc3, 0xfc, 0xff, 0xfc, 0xff, 0x0c, 0x00, 0x60, 0x00, 0x60, 0xff, 0x0c, 0xff, 0xfc, 0xf0, 0xfc, 0x06, 0x00, 0x06, 0x00, 0xf0, 0xfc };
|
||||
const unsigned char Set4[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set4F[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x38, 0x30, 0x33, 0x10, 0x3f, 0x90, 0x38, 0x10, 0x33, 0x90, 0x27, 0x90, 0x26, 0x10, 0x30, 0x90, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set4FF[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x24, 0x30, 0x21, 0x90, 0x27, 0x90, 0x27, 0x30, 0x20, 0x70, 0x27, 0xf0, 0x23, 0x30, 0x30, 0x70, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set5[] PROGMEM = { 0xfc, 0xfc, 0xf8, 0x7c, 0xe0, 0x1c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0x80, 0x04, 0x80, 0x04, 0xff, 0xfc, 0xf8, 0x7c, 0xfc, 0xfc };
|
||||
const unsigned char Set5_1[] PROGMEM = { 0xfc, 0xf4, 0xf8, 0x60, 0xe0, 0x44, 0xc0, 0x8c, 0xc1, 0x1c, 0xc2, 0x2c, 0xc4, 0x4c, 0xc8, 0x8c, 0xd1, 0x0c, 0xa2, 0x04, 0xc4, 0x04, 0x8f, 0xfc, 0x18, 0x7c, 0xbc, 0xfc };
|
||||
const unsigned char Set6[] PROGMEM = { 0xf8,0x7c,0xc0,0x0c,0xc0,0x0c,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xc8,0x4c,0xc8,0x4c,0xcf,0xcc,0xc0,0x0c,0xc0,0x0c };
|
||||
const unsigned char Set_LANG[] PROGMEM = { 0xf0, 0x3c, 0xce, 0x4c, 0xbc, 0x34, 0xb8, 0x14, 0x18, 0x80, 0x10, 0x80, 0x42, 0x30, 0x60, 0x78, 0x60, 0xf8, 0x44, 0xc0, 0x80, 0x04, 0xb8, 0x84, 0xcf, 0xcc, 0xf0, 0x3c };
|
||||
const unsigned char Set7[] PROGMEM = { 0x80, 0x0c, 0x00, 0x1c, 0x3f, 0xf4, 0x3f, 0xe0, 0x3f, 0xc4, 0x37, 0x8c, 0x23, 0x18, 0x30, 0x30, 0x38, 0x70, 0x3c, 0xf0, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set11[] PROGMEM = { 0xf3, 0xfc, 0xe7, 0xfc, 0xce, 0x0c, 0x8e, 0x1c, 0x9f, 0x9c, 0x1f, 0x3c, 0x1f, 0x0c, 0x0e, 0x0c, 0x0f, 0xfc, 0x87, 0xf8, 0x81, 0xe4, 0xc0, 0x0c, 0xe0, 0x1c, 0xf8, 0x7c };
|
||||
const unsigned char Set8[] PROGMEM = { 0x81, 0xdc, 0x55, 0x9c, 0x29, 0x04, 0x55, 0x00, 0x29, 0x90, 0x55, 0xd0, 0x03, 0xfc, 0xff, 0x00, 0x2e, 0x00, 0x26, 0x70, 0x02, 0x50, 0x82, 0x70, 0xe6, 0x00, 0xee, 0x04 };
|
||||
const unsigned char Set9[] PROGMEM = { 0xf0, 0x3c, 0xce, 0x0c, 0xbf, 0x04, 0xb3, 0x04, 0x73, 0x00, 0x7f, 0x00, 0x7e, 0x00, 0x7c, 0x00, 0x7c, 0x00, 0x7c, 0x60, 0xbc, 0x64, 0xbe, 0x04, 0xcf, 0x0c, 0xf0, 0x3c };
|
||||
const unsigned char Set10[] PROGMEM = { 0xf8, 0x7c, 0xf7, 0xbc, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0xbf, 0xf4, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xbf, 0xf4, 0xc0, 0x0c };
|
||||
const unsigned char Set13[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x34, 0xb0, 0x24, 0x90, 0x24, 0x90, 0x27, 0x90, 0x23, 0x10, 0x30, 0x30, 0x38, 0x70, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set12[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x20, 0x10, 0x20, 0x10, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set14[] PROGMEM = { 0xff, 0x7c, 0xfe, 0x7c, 0xfc, 0xec, 0xe8, 0xdc, 0xc8, 0x4c, 0x98, 0x4c, 0x88, 0x24, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x1c };
|
||||
const unsigned char Set15[] PROGMEM = { 0x15, 0x54, 0x3f, 0xfc, 0x15, 0x54, 0x3f, 0xfc, 0x15, 0x54, 0x3c, 0x04, 0x14, 0x04, 0x3c, 0xfc, 0x14, 0x54, 0x3c, 0xfc, 0x00, 0x54, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char Set16[] PROGMEM = { 0x15, 0x54, 0x3f, 0xf8, 0x15, 0x50, 0x3f, 0xf0, 0x15, 0x50, 0x38, 0x70, 0x10, 0x20, 0x31, 0x04, 0x13, 0x8c, 0x22, 0xa8, 0x17, 0xfc, 0x2a, 0xa8, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char Set17[] PROGMEM = { 0x80, 0x00, 0xbf, 0xf8, 0x1f, 0xf8, 0xb0, 0x08, 0x18, 0x08, 0xb9, 0xe8, 0x19, 0xb8, 0xb8, 0x38, 0x18, 0x38, 0xb9, 0xb8, 0xb9, 0xf8, 0xb0, 0xf8, 0xbf, 0xf8, 0x80, 0x00 };
|
||||
const unsigned char Set18[] PROGMEM = { 0x80, 0x00, 0xbf, 0xf8, 0x1f, 0xf8, 0xb0, 0x28, 0x1f, 0xf8, 0xb4, 0x08, 0x1f, 0xf8, 0xb1, 0x08, 0x1f, 0xf8, 0xb0, 0x48, 0xbf, 0xf8, 0xb2, 0x88, 0xbf, 0xf8, 0x80, 0x00 };
|
||||
const unsigned char Lang_CN[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x20, 0x10, 0x24, 0x90, 0x24, 0x90, 0x20, 0x10, 0x3c, 0xf0, 0x3c, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Lang_EN[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x38, 0x70, 0x30, 0x30, 0x23, 0x10, 0x27, 0x90, 0x20, 0x10, 0x20, 0x10, 0x27, 0x90, 0x27, 0x90, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Lang_JP[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3d, 0xf0, 0x20, 0x10, 0x3b, 0xf0, 0x3b, 0x70, 0x30, 0x30, 0x2b, 0x50, 0x2a, 0xd0, 0x31, 0xb0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Save[] PROGMEM = { 0x00, 0x04, 0x58, 0x08, 0x58, 0x08, 0x58, 0x08, 0x40, 0x08, 0x7f, 0xf8, 0x60, 0x18, 0x5f, 0xe8, 0x5b, 0x68, 0x5f, 0xe8, 0x5b, 0x68, 0x1c, 0xe8, 0x5f, 0xe8, 0x00, 0x00 };
|
||||
const unsigned char Lock[] PROGMEM = { 0xe0, 0x1c, 0xc0, 0x0c, 0x8f, 0xc4, 0x9f, 0xe4, 0x9f, 0xe4, 0x9f, 0xe4, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set19[] PROGMEM = { 0xf8, 0x7c, 0x80, 0x04, 0xbc, 0xf4, 0x3f, 0xf0, 0x38, 0x70, 0xb7, 0xb4, 0xb6, 0xb4, 0xb5, 0xb4, 0xb7, 0xb4, 0x38, 0x70, 0x3f, 0xf0, 0xbc, 0xf4, 0x80, 0x04, 0xf8, 0x7c };
|
||||
#if LANG_JP_State
|
||||
const unsigned char *Ico_table[] = {
|
||||
Set0, Set1, Set2, Set3, Set4, Set5, Set19, Set6, Lock, Set_LANG, QRC, Set7,
|
||||
Set8, Set9, Set0, Set10, Set12, Save,
|
||||
Set0, Set11, Set14, Save,
|
||||
Set11, Set13, Set14, Save,
|
||||
Set15, Set16,
|
||||
Set17, Set18, //5
|
||||
Set5_1, Set5,
|
||||
c_NO, Set7,
|
||||
Lang_CN, Lang_EN, Lang_JP, //8
|
||||
Set4, Set4F, Save,
|
||||
};
|
||||
#else
|
||||
const unsigned char *Ico_table[] = {
|
||||
Set0, Set1, Set2, Set3, Set4, Set5, Set19, Set6, Lock, Set_LANG, QRC, Set7,
|
||||
Set8, Set9, Set0, Set10, Set12, Save,
|
||||
Set0, Set11, Set14, Save,
|
||||
Set11, Set13, Set14, Save,
|
||||
Set15, Set16,
|
||||
Set17, Set18, //5
|
||||
Set5_1, Set5,
|
||||
c_NO, Set7,
|
||||
Lang_CN, Lang_EN,c_NO, //8
|
||||
Set4, Set4F, Save,
|
||||
};
|
||||
#endif
|
||||
const byte Menu_table[] = {12, 6, 4, 4, 2, 2, 2, 2, 3, 3}; //菜单 标签 温控 定时 控制方式 首页 蜂鸣器 标签删除确认界面 语言菜单 翻转 显示
|
||||
byte MenuLevel = 0; //菜单层级
|
@@ -0,0 +1,824 @@
|
||||
#define LANG_JP_State false
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
多语言支持
|
||||
Multilingual support
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
*/
|
||||
/*
|
||||
英语库 ENGLISH
|
||||
*/
|
||||
const char EN_0[] PROGMEM = "Tip";
|
||||
const char EN_1[] PROGMEM = "Temp";
|
||||
const char EN_2[] PROGMEM = "Timer";
|
||||
const char EN_3[] PROGMEM = "Control";
|
||||
const char EN_4[] PROGMEM = "Screen";
|
||||
const char EN_5[] PROGMEM = "Buzzer";
|
||||
const char EN_6[] PROGMEM = "LOW Vol";
|
||||
const char EN_7[] PROGMEM = "Lang";
|
||||
const char EN_8[] PROGMEM = "Return";
|
||||
const char EN_9[] PROGMEM = "Change";
|
||||
const char EN_10[] PROGMEM = "Calibrate";
|
||||
const char EN_11[] PROGMEM = "Rename";
|
||||
const char EN_12[] PROGMEM = "Delete";
|
||||
const char EN_13[] PROGMEM = "Add";
|
||||
const char EN_14[] PROGMEM = "Save";
|
||||
const char EN_15[] PROGMEM = "Default";
|
||||
const char EN_16[] PROGMEM = "Sleep";
|
||||
const char EN_17[] PROGMEM = "Boost";
|
||||
const char EN_18[] PROGMEM = "Save";
|
||||
const char EN_19[] PROGMEM = "Sleep";
|
||||
const char EN_20[] PROGMEM = "Off";
|
||||
const char EN_21[] PROGMEM = "Boost";
|
||||
const char EN_22[] PROGMEM = "Save";
|
||||
const char EN_23[] PROGMEM = "Direct";
|
||||
const char EN_24[] PROGMEM = "PID";
|
||||
const char EN_25[] PROGMEM = "Big";
|
||||
const char EN_26[] PROGMEM = "Infos";
|
||||
const char EN_27[] PROGMEM = "OFF";
|
||||
const char EN_28[] PROGMEM = "ON";
|
||||
const char EN_29[] PROGMEM = "NO";
|
||||
const char EN_30[] PROGMEM = "YES";
|
||||
const char EN_31[] PROGMEM = "CN";
|
||||
const char EN_32[] PROGMEM = "EN";
|
||||
const char EN_33[] PROGMEM = "NO";
|
||||
const char EN_34[] PROGMEM = "OK";
|
||||
const char EN_35[] PROGMEM = "Main Screen";
|
||||
const char EN_36[] PROGMEM = "Flip";
|
||||
const char EN_37[] PROGMEM = "Save";
|
||||
const char EN_38[] PROGMEM = "About";
|
||||
const char EN_39[] PROGMEM = "JP";
|
||||
const char EN_40[] PROGMEM = "Lock";
|
||||
const char EN_41[] PROGMEM = "Rotary";
|
||||
|
||||
const char *const EN_table[] PROGMEM = {EN_0, EN_1, EN_2, EN_3, EN_4, EN_5, EN_41, EN_6, EN_40, EN_7, EN_38, EN_8, EN_9, EN_10, EN_11, EN_12, EN_13, EN_14, EN_15, EN_16, EN_17, EN_18, EN_19, EN_20, EN_21, EN_22, EN_23, EN_24, EN_25, EN_26, EN_27, EN_28, EN_29, EN_30, EN_31, EN_32, EN_39, EN_35, EN_36, EN_37,};
|
||||
|
||||
/*
|
||||
#!/usr/bin/python
|
||||
# -*- coding: UTF-8 -*-
|
||||
for num in range(0,38):
|
||||
print("EN_",end="")
|
||||
print(num,end='')
|
||||
print(",",end="")
|
||||
*/
|
||||
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
多语言支持
|
||||
Multilingual support
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
*/
|
||||
|
||||
/*
|
||||
中文语言库 CHINESE
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
本地化提示:你可以按照位图的大小,把这里的文字位图替换成你的语言,确保位图分辨率一致即可,我们欢迎你把程序翻译为你当地的语言!
|
||||
Localization tips: you can according to the size of the bitmap,
|
||||
replace the text bitmap here with your language,
|
||||
ensure that the bitmap resolution is consistent,
|
||||
we welcome you to translate the program into your local language!
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
*/
|
||||
//width:28,height:14 主界面中文提示
|
||||
//Main Screen
|
||||
//错误-ERROR
|
||||
const unsigned char S1[] PROGMEM = { 0x20, 0x92, 0x1f, 0xc0, 0x3d, 0xf9, 0x90, 0x40, 0x20, 0x90, 0x90, 0x40, 0x40, 0x90, 0x1f, 0xc0, 0x7b, 0xff, 0x00, 0x00, 0xa0, 0x01, 0x3f, 0xe0, 0x21, 0xf9, 0x02, 0x00, 0xfd, 0x09, 0x02, 0x00, 0x21, 0x09, 0x7f, 0xf0, 0x21, 0xf9, 0x05, 0x00, 0x21, 0x09, 0x45, 0x00, 0x29, 0x09, 0x88, 0x80, 0x31, 0xf9, 0x10, 0x70, 0x21, 0x08, 0x20, 0x20 };
|
||||
//关机-OFF
|
||||
const unsigned char S2[] PROGMEM = { 0x10, 0x40, 0x47, 0xc0, 0x17, 0xfc, 0x44, 0x40, 0x20, 0x03, 0xf4, 0x40, 0x23, 0xf8, 0x44, 0x40, 0x62, 0x08, 0xc4, 0x40, 0xa3, 0xf8, 0xe4, 0x40, 0x20, 0x01, 0x54, 0x40, 0x2f, 0xfd, 0x44, 0x40, 0x28, 0x06, 0x44, 0x40, 0x23, 0xf8, 0x44, 0x40, 0x20, 0x40, 0x44, 0x50, 0x20, 0x40, 0x48, 0x50, 0x21, 0x40, 0x50, 0x30, 0x20, 0x80, 0x40, 0x00 };
|
||||
//休眠-SLEEP
|
||||
const unsigned char S3[] PROGMEM = { 0x10, 0x83, 0xdf, 0xc0, 0x10, 0x82, 0x50, 0x40, 0x20, 0x82, 0x50, 0x40, 0x2f, 0xff, 0xdf, 0xc0, 0x60, 0x82, 0x52, 0x00, 0x61, 0xc2, 0x52, 0x00, 0xa1, 0xc2, 0x5f, 0xe0, 0x22, 0xa3, 0xd2, 0x00, 0x22, 0xa2, 0x51, 0x00, 0x24, 0x92, 0x51, 0x00, 0x28, 0x8e, 0x50, 0x90, 0x30, 0x8b, 0xd4, 0x50, 0x20, 0x82, 0x58, 0x30, 0x20, 0x80, 0x10, 0x10 };
|
||||
//提温-BOOST
|
||||
const unsigned char S4[] PROGMEM = { 0x23, 0xf2, 0x1f, 0xc0, 0x22, 0x11, 0x10, 0x40, 0xfb, 0xf0, 0x90, 0x40, 0x22, 0x12, 0x1f, 0xc0, 0x2a, 0x11, 0x10, 0x40, 0x33, 0xf1, 0x10, 0x40, 0x60, 0x00, 0x5f, 0xc0, 0xaf, 0xfc, 0x80, 0x00, 0x20, 0x41, 0x3f, 0xe0, 0x22, 0x43, 0x25, 0x20, 0x22, 0x79, 0x25, 0x20, 0x22, 0x41, 0x25, 0x20, 0xa5, 0x41, 0x25, 0x20, 0x48, 0xfd, 0x7f, 0xf0 };
|
||||
//正常工作-WORKY
|
||||
const unsigned char S5[] PROGMEM = { 0x7f, 0xf8, 0x48, 0x80, 0x02, 0x00, 0x49, 0x00, 0x02, 0x01, 0xff, 0xf0, 0x02, 0x01, 0x00, 0x10, 0x02, 0x02, 0x7f, 0x20, 0x22, 0x00, 0x41, 0x00, 0x23, 0xf0, 0x7f, 0x00, 0x22, 0x00, 0x08, 0x00, 0x22, 0x00, 0xff, 0x80, 0x22, 0x00, 0x88, 0x80, 0x22, 0x00, 0x88, 0x80, 0x22, 0x00, 0x8a, 0x80, 0x22, 0x00, 0x89, 0x00, 0xff, 0xfc, 0x08, 0x00 };
|
||||
//加热-HEAT
|
||||
const unsigned char S6[] PROGMEM = { 0x0f, 0x42, 0x1f, 0xc0, 0x78, 0x41, 0x10, 0x40, 0x08, 0x40, 0x90, 0x40, 0x08, 0x42, 0x1f, 0xc0, 0x08, 0x41, 0x10, 0x40, 0xff, 0xfd, 0x10, 0x40, 0x08, 0x40, 0x5f, 0xc0, 0x08, 0x40, 0x80, 0x00, 0x08, 0x41, 0x3f, 0xe0, 0x08, 0x43, 0x25, 0x20, 0x10, 0x41, 0x25, 0x20, 0x10, 0x41, 0x25, 0x20, 0x20, 0x41, 0x25, 0x20, 0x40, 0x41, 0x7f, 0xf0 };
|
||||
//维持-HOLD
|
||||
const unsigned char S7[] PROGMEM = { 0x11, 0x40, 0x82, 0x00, 0x21, 0x20, 0x8f, 0xe0, 0x23, 0xfc, 0x82, 0x00, 0x4a, 0x23, 0xe2, 0x00, 0xfe, 0x20, 0x9f, 0xf0, 0x13, 0xf8, 0x80, 0x80, 0x22, 0x20, 0xc0, 0x80, 0x42, 0x21, 0xbf, 0xf0, 0xfb, 0xfa, 0x88, 0x80, 0x02, 0x20, 0x84, 0x80, 0x02, 0x20, 0x84, 0x80, 0x1a, 0x20, 0x80, 0x80, 0xe3, 0xfe, 0x82, 0x80, 0x02, 0x01, 0x01, 0x00 };
|
||||
const unsigned char *S_table[] = {S1, S2, S3, S4, S5, S6, S7};
|
||||
|
||||
// 菜单 width:36,height:16
|
||||
//MENU Oj
|
||||
/*
|
||||
The order here(↓) can refer to EN_table(↑↑↑)
|
||||
*/
|
||||
const unsigned char t0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0x90, 0xf8, 0x00, 0x01, 0x08, 0x08, 0x88, 0x00, 0x0a, 0x10, 0x08, 0x88, 0x00, 0x04, 0x7f, 0x01, 0x07, 0x00, 0x1f, 0xc1, 0x3a, 0x00, 0x00, 0x05, 0x49, 0x09, 0xfc, 0x00, 0x04, 0x49, 0x08, 0x84, 0x00, 0x04, 0x49, 0x08, 0x88, 0x00, 0x04, 0x49, 0x08, 0x48, 0x00, 0x04, 0x49, 0x08, 0x50, 0x00, 0x04, 0x49, 0x0a, 0x20, 0x00, 0x04, 0x16, 0x0c, 0x58, 0x00, 0x14, 0x21, 0x89, 0x87, 0x00, 0x08, 0xc0, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x08, 0x20, 0x00, 0x08, 0x82, 0x0b, 0xff, 0x00, 0x04, 0x82, 0x0a, 0x01, 0x00, 0x10, 0xfe, 0x3c, 0x51, 0x00, 0x08, 0x82, 0x08, 0x88, 0x00, 0x08, 0x82, 0x09, 0x04, 0x00, 0x02, 0xfe, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x19, 0xfc, 0x00, 0x09, 0xff, 0x28, 0x20, 0x00, 0x19, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x2b, 0xff, 0x00, 0x0b, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x04, 0x00, 0x1f, 0xff, 0xa2, 0x04, 0x00, 0x10, 0x00, 0xa2, 0xff, 0x00, 0x00, 0x01, 0x22, 0x04, 0x00, 0x0f, 0xfe, 0x22, 0x04, 0x00, 0x00, 0x40, 0x3e, 0x44, 0x00, 0x00, 0x40, 0x22, 0x24, 0x00, 0x04, 0x40, 0x22, 0x24, 0x00, 0x04, 0x7c, 0x22, 0x04, 0x00, 0x04, 0x40, 0x22, 0x04, 0x00, 0x0a, 0x40, 0x3e, 0x04, 0x00, 0x09, 0x40, 0x22, 0x24, 0x00, 0x10, 0xff, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00 };
|
||||
const unsigned char t3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x12, 0x02, 0x00, 0x05, 0xff, 0x9f, 0xd2, 0x00, 0x05, 0x00, 0x92, 0x12, 0x00, 0x1e, 0x28, 0xa2, 0x12, 0x00, 0x04, 0x44, 0x3f, 0xf2, 0x00, 0x04, 0x82, 0x02, 0x12, 0x00, 0x06, 0x00, 0x02, 0x12, 0x00, 0x0c, 0xfe, 0x1f, 0xd2, 0x00, 0x14, 0x10, 0x12, 0x52, 0x00, 0x04, 0x10, 0x12, 0x42, 0x00, 0x04, 0x10, 0x13, 0x42, 0x00, 0x04, 0x10, 0x12, 0x82, 0x00, 0x15, 0xff, 0x82, 0x0a, 0x00, 0x08, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x0f, 0xf8, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x04, 0x02, 0x3f, 0xfe, 0x00, 0x04, 0x02, 0x00, 0x80, 0x00, 0x07, 0xfe, 0x00, 0x80, 0x00, 0x00, 0x90, 0x04, 0x90, 0x00, 0x08, 0x91, 0x0c, 0x88, 0x00, 0x06, 0x93, 0x10, 0x86, 0x00, 0x02, 0x94, 0x20, 0x82, 0x00, 0x00, 0x90, 0x00, 0x80, 0x00, 0x00, 0x90, 0x02, 0x80, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t5[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x1f, 0xff, 0x9f, 0xfc, 0x00, 0x00, 0x40, 0x04, 0x10, 0x00, 0x0f, 0xff, 0x02, 0x20, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x08, 0x42, 0x0f, 0xf8, 0x00, 0x08, 0x42, 0x08, 0x08, 0x00, 0x0f, 0xfe, 0x08, 0x08, 0x00, 0x08, 0x02, 0x0f, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x08, 0x00, 0x08, 0x00, 0x08, 0x08, 0x00, 0x08, 0x00, 0x0f, 0xf8, 0x00, 0x10, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t6[] PROGMEM = { 0x09, 0xff, 0x00, 0x40, 0x00, 0x04, 0x20, 0x3f, 0xff, 0x00, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x1c, 0x42, 0x0f, 0xfc, 0x00, 0x04, 0x42, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x04, 0x00, 0x0f, 0xfc, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x04, 0x81, 0x00, 0x00, 0x00, 0x05, 0x81, 0x0f, 0xfc, 0x00, 0x06, 0x81, 0x08, 0x04, 0x00, 0x04, 0xff, 0x08, 0x04, 0x00, 0x00, 0x81, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
const unsigned char t7[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xfe, 0x00, 0x01, 0x00, 0x08, 0x20, 0x00, 0x03, 0xff, 0x08, 0x20, 0x00, 0x02, 0x01, 0x08, 0x20, 0x00, 0x04, 0x22, 0x08, 0x20, 0x00, 0x08, 0x20, 0x0b, 0xfe, 0x00, 0x10, 0x20, 0x08, 0x20, 0x00, 0x00, 0x50, 0x08, 0x28, 0x00, 0x00, 0x50, 0x08, 0x24, 0x00, 0x00, 0x88, 0x08, 0x22, 0x00, 0x00, 0x88, 0x10, 0x20, 0x00, 0x01, 0x04, 0x10, 0x20, 0x00, 0x02, 0x03, 0xa7, 0xff, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char Back[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x00, 0x08, 0xf8, 0x3f, 0xfe, 0x00, 0x04, 0x80, 0x20, 0x02, 0x00, 0x00, 0x80, 0x20, 0x02, 0x00, 0x00, 0xbe, 0x23, 0xe2, 0x00, 0x1c, 0x82, 0x22, 0x22, 0x00, 0x04, 0xa4, 0x22, 0x22, 0x00, 0x04, 0x94, 0x22, 0x22, 0x00, 0x04, 0x88, 0x22, 0x22, 0x00, 0x04, 0x94, 0x23, 0xe2, 0x00, 0x05, 0x22, 0x20, 0x02, 0x00, 0x05, 0x42, 0x20, 0x02, 0x00, 0x0a, 0x00, 0x3f, 0xfe, 0x00, 0x11, 0xff, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
const unsigned char t1_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x20, 0x90, 0x00, 0x02, 0x7f, 0x98, 0x90, 0x00, 0x1f, 0x80, 0x09, 0xff, 0x00, 0x02, 0x22, 0x01, 0x10, 0x00, 0x06, 0x21, 0x8b, 0x10, 0x00, 0x07, 0x62, 0x8d, 0xfe, 0x00, 0x0a, 0xa2, 0x09, 0x10, 0x00, 0x0a, 0x14, 0x11, 0x10, 0x00, 0x12, 0x14, 0x31, 0xfe, 0x00, 0x02, 0x08, 0x11, 0x10, 0x00, 0x02, 0x14, 0x11, 0x10, 0x00, 0x02, 0x22, 0x11, 0x10, 0x00, 0x02, 0x43, 0x91, 0xff, 0x00, 0x02, 0x81, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t1_2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80, 0x00, 0x00, 0x50, 0x01, 0xfc, 0x00, 0x00, 0x88, 0x01, 0x04, 0x00, 0x01, 0x04, 0x03, 0x08, 0x00, 0x06, 0xfb, 0x04, 0x90, 0x00, 0x08, 0x00, 0xc0, 0x60, 0x00, 0x07, 0xdf, 0x01, 0x80, 0x00, 0x04, 0x51, 0x06, 0x00, 0x00, 0x04, 0x51, 0x1b, 0xfe, 0x00, 0x04, 0x51, 0x02, 0x02, 0x00, 0x07, 0xd9, 0x02, 0x02, 0x00, 0x04, 0x56, 0x02, 0x02, 0x00, 0x00, 0x10, 0x03, 0xfe, 0x00, 0x00, 0x10, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t1_3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x78, 0xbc, 0x20, 0x00, 0x09, 0x48, 0xa4, 0x50, 0x00, 0x09, 0x4a, 0xa8, 0x50, 0x00, 0x09, 0x4a, 0xa8, 0x88, 0x00, 0x09, 0x4a, 0xb1, 0x04, 0x00, 0x1f, 0xfe, 0xaa, 0xfb, 0x00, 0x09, 0x4a, 0xa4, 0x20, 0x00, 0x09, 0x4a, 0xa4, 0x20, 0x00, 0x09, 0x4a, 0xa7, 0xfe, 0x00, 0x09, 0x4a, 0xb4, 0x20, 0x00, 0x09, 0x48, 0xa9, 0x24, 0x00, 0x0b, 0x48, 0xa2, 0x22, 0x00, 0x08, 0x8a, 0xa4, 0xa2, 0x00, 0x11, 0x19, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t1_4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x10, 0x00, 0x1f, 0xdc, 0x3e, 0xfe, 0x00, 0x08, 0x90, 0x02, 0x12, 0x00, 0x05, 0x10, 0x04, 0xff, 0x00, 0x1f, 0xdf, 0x84, 0x12, 0x00, 0x02, 0x12, 0x0c, 0xfe, 0x00, 0x1f, 0xd2, 0x02, 0x10, 0x00, 0x02, 0x12, 0x22, 0xfe, 0x00, 0x0a, 0x92, 0x14, 0x10, 0x00, 0x0a, 0x52, 0x14, 0x10, 0x00, 0x12, 0x22, 0x0d, 0xff, 0x00, 0x02, 0x22, 0x08, 0x10, 0x00, 0x0a, 0x42, 0x14, 0x10, 0x00, 0x04, 0x02, 0x23, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
//默认
|
||||
const unsigned char t2_0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc8, 0x10, 0x20, 0x00, 0x12, 0x4a, 0x0c, 0x20, 0x00, 0x1a, 0xc9, 0x04, 0x20, 0x00, 0x17, 0x48, 0x00, 0x20, 0x00, 0x1f, 0xff, 0xb8, 0x20, 0x00, 0x02, 0x08, 0x08, 0x50, 0x00, 0x1f, 0xc8, 0x08, 0x50, 0x00, 0x02, 0x08, 0x08, 0x50, 0x00, 0x03, 0xc8, 0x08, 0x48, 0x00, 0x1e, 0x14, 0x08, 0x88, 0x00, 0x01, 0x54, 0x0a, 0x88, 0x00, 0x15, 0x22, 0x0c, 0x84, 0x00, 0x14, 0x43, 0x89, 0x07, 0x00, 0x00, 0x81, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
//休眠
|
||||
const unsigned char t2_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x3d, 0xfc, 0x00, 0x02, 0x10, 0x25, 0x04, 0x00, 0x04, 0x10, 0x25, 0x04, 0x00, 0x05, 0xff, 0xbd, 0xfc, 0x00, 0x0c, 0x10, 0x25, 0x20, 0x00, 0x0c, 0x38, 0x25, 0x20, 0x00, 0x14, 0x38, 0x25, 0xfe, 0x00, 0x04, 0x54, 0x3d, 0x20, 0x00, 0x04, 0x54, 0x25, 0x10, 0x00, 0x04, 0x92, 0x25, 0x10, 0x00, 0x05, 0x11, 0xa5, 0x09, 0x00, 0x06, 0x11, 0x3d, 0x45, 0x00, 0x04, 0x10, 0x25, 0x83, 0x00, 0x04, 0x10, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
//提温
|
||||
const unsigned char t2_2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x21, 0xfc, 0x00, 0x04, 0x42, 0x11, 0x04, 0x00, 0x1f, 0x7e, 0x09, 0x04, 0x00, 0x04, 0x42, 0x21, 0xfc, 0x00, 0x05, 0x42, 0x11, 0x04, 0x00, 0x06, 0x7e, 0x11, 0x04, 0x00, 0x0c, 0x00, 0x05, 0xfc, 0x00, 0x15, 0xff, 0x88, 0x00, 0x00, 0x04, 0x08, 0x13, 0xfe, 0x00, 0x04, 0x48, 0x32, 0x52, 0x00, 0x04, 0x4f, 0x12, 0x52, 0x00, 0x04, 0x48, 0x12, 0x52, 0x00, 0x14, 0xa8, 0x12, 0x52, 0x00, 0x09, 0x1f, 0x97, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
//关机
|
||||
const unsigned char t3_1[] PROGMEM = { 0x01, 0x04, 0x04, 0x7c, 0x00, 0x00, 0x88, 0x04, 0x44, 0x00, 0x0f, 0xff, 0x3f, 0x44, 0x00, 0x00, 0x20, 0x04, 0x44, 0x00, 0x00, 0x20, 0x0c, 0x44, 0x00, 0x00, 0x20, 0x0e, 0x44, 0x00, 0x1f, 0xff, 0x95, 0x44, 0x00, 0x00, 0x20, 0x14, 0x44, 0x00, 0x00, 0x50, 0x24, 0x44, 0x00, 0x00, 0x50, 0x04, 0x44, 0x00, 0x00, 0x88, 0x04, 0x45, 0x00, 0x01, 0x04, 0x04, 0x85, 0x00, 0x06, 0x03, 0x85, 0x03, 0x00, 0x18, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
const unsigned char t_4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x20, 0x00, 0x0f, 0xff, 0x09, 0xfc, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x88, 0x00, 0x03, 0xfe, 0x08, 0x50, 0x00, 0x02, 0x02, 0x0b, 0xfe, 0x00, 0x03, 0xfe, 0x0c, 0x40, 0x00, 0x02, 0x02, 0x18, 0x40, 0x00, 0x03, 0xfe, 0x2b, 0xfe, 0x00, 0x02, 0x02, 0x08, 0x48, 0x00, 0x03, 0xfe, 0x08, 0x88, 0x00, 0x02, 0x02, 0x08, 0x50, 0x00, 0x02, 0x02, 0x28, 0x30, 0x00, 0x1f, 0xff, 0x91, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t_PID[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc3, 0xf1, 0xe0, 0x00, 0x0f, 0xe3, 0xf1, 0xf8, 0x00, 0x0c, 0x70, 0xc1, 0x9e, 0x00, 0x0c, 0x30, 0xc1, 0x86, 0x00, 0x0c, 0x30, 0xc1, 0x83, 0x00, 0x0c, 0x30, 0xc1, 0x83, 0x00, 0x0c, 0x60, 0xc1, 0x83, 0x00, 0x0c, 0x60, 0xc1, 0x83, 0x00, 0x0f, 0xc0, 0xc1, 0x83, 0x00, 0x0f, 0xc0, 0xc1, 0x86, 0x00, 0x0c, 0x00, 0xc1, 0x86, 0x00, 0x0c, 0x00, 0xc1, 0x98, 0x00, 0x0c, 0x03, 0xf1, 0xf8, 0x00, 0x0c, 0x03, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
const unsigned char t5_0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0x88, 0x40, 0x00, 0x0a, 0x24, 0x10, 0x40, 0x00, 0x11, 0x42, 0x10, 0xfe, 0x00, 0x04, 0x00, 0x22, 0x82, 0x00, 0x02, 0xff, 0x3d, 0x02, 0x00, 0x08, 0x01, 0x0a, 0x42, 0x00, 0x09, 0xf9, 0x10, 0x32, 0x00, 0x09, 0x09, 0x20, 0x12, 0x00, 0x09, 0xf9, 0x3e, 0x02, 0x00, 0x09, 0x09, 0x00, 0x02, 0x00, 0x09, 0x09, 0x0e, 0x02, 0x00, 0x09, 0xf9, 0x30, 0x22, 0x00, 0x08, 0x05, 0x00, 0x14, 0x00, 0x08, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t5_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x44, 0x10, 0xfe, 0x00, 0x04, 0x28, 0x10, 0x92, 0x00, 0x05, 0xff, 0x22, 0x92, 0x00, 0x00, 0x10, 0x3c, 0x92, 0x00, 0x00, 0x10, 0x08, 0x92, 0x00, 0x1c, 0xfe, 0x10, 0x92, 0x00, 0x04, 0x10, 0x20, 0xfe, 0x00, 0x04, 0x10, 0x3e, 0x92, 0x00, 0x05, 0xff, 0x80, 0x92, 0x00, 0x04, 0x10, 0x00, 0x92, 0x00, 0x05, 0x10, 0x0e, 0x92, 0x00, 0x06, 0x10, 0x30, 0x92, 0x00, 0x04, 0x10, 0x00, 0xfe, 0x00, 0x00, 0x10, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t5_3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x3f, 0xfe, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x07, 0xfe, 0x0f, 0xf8, 0x00, 0x04, 0x02, 0x08, 0x08, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x07, 0xfe, 0x08, 0x88, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x07, 0xfe, 0x08, 0x88, 0x00, 0x04, 0x02, 0x09, 0x48, 0x00, 0x04, 0x02, 0x02, 0x30, 0x00, 0x07, 0xfe, 0x04, 0x0c, 0x00, 0x04, 0x02, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
const unsigned char t_off[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x04, 0xff, 0x00, 0x00, 0x44, 0x02, 0x01, 0x00, 0x07, 0xff, 0x90, 0x21, 0x00, 0x00, 0x10, 0x10, 0x21, 0x00, 0x00, 0x10, 0x17, 0xfd, 0x00, 0x00, 0x10, 0x10, 0x21, 0x00, 0x0f, 0xff, 0xd0, 0x61, 0x00, 0x00, 0x10, 0x10, 0xa1, 0x00, 0x00, 0x28, 0x11, 0x21, 0x00, 0x00, 0x28, 0x12, 0x21, 0x00, 0x00, 0x44, 0x14, 0x21, 0x00, 0x00, 0x82, 0x10, 0xa1, 0x00, 0x03, 0x01, 0xd0, 0x45, 0x00, 0x0c, 0x00, 0x90, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t_on[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x20, 0x00, 0x00, 0x84, 0x07, 0xff, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x0f, 0xff, 0xc7, 0xff, 0x00, 0x00, 0x84, 0x04, 0x00, 0x00, 0x00, 0x84, 0x04, 0x00, 0x00, 0x00, 0x84, 0x05, 0xff, 0x00, 0x00, 0x84, 0x05, 0x01, 0x00, 0x01, 0x04, 0x09, 0x01, 0x00, 0x01, 0x04, 0x09, 0x01, 0x00, 0x02, 0x04, 0x11, 0xff, 0x00, 0x04, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
const unsigned char t_NO[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x04, 0x91, 0x00, 0x04, 0x40, 0x02, 0x52, 0x00, 0x04, 0x7f, 0x90, 0x54, 0x00, 0x04, 0x50, 0x88, 0xff, 0x00, 0x07, 0xd0, 0x84, 0x81, 0x00, 0x04, 0x51, 0x00, 0x81, 0x00, 0x04, 0x49, 0x01, 0xff, 0x00, 0x07, 0xca, 0x02, 0x81, 0x00, 0x04, 0x44, 0x04, 0x81, 0x00, 0x04, 0x4a, 0x1c, 0xff, 0x00, 0x07, 0xea, 0x04, 0x81, 0x00, 0x0c, 0x51, 0x04, 0x81, 0x00, 0x00, 0x61, 0xc4, 0x85, 0x00, 0x00, 0x40, 0x80, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t_OK[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xdf, 0x10, 0x20, 0x00, 0x02, 0x12, 0x0c, 0x20, 0x00, 0x02, 0x24, 0x04, 0x20, 0x00, 0x04, 0x7f, 0x80, 0x20, 0x00, 0x04, 0x24, 0xb8, 0x20, 0x00, 0x0f, 0xa4, 0x88, 0x50, 0x00, 0x14, 0xbf, 0x88, 0x50, 0x00, 0x04, 0xa4, 0x88, 0x50, 0x00, 0x04, 0xa4, 0x88, 0x48, 0x00, 0x04, 0xbf, 0x88, 0x88, 0x00, 0x04, 0xa4, 0x8a, 0x88, 0x00, 0x07, 0xa4, 0x8c, 0x84, 0x00, 0x04, 0x44, 0x89, 0x07, 0x00, 0x00, 0x81, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
const unsigned char t_CN_CN[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x0f, 0xff, 0x3f, 0xff, 0x00, 0x08, 0x41, 0x04, 0x08, 0x00, 0x08, 0x41, 0x04, 0x08, 0x00, 0x08, 0x41, 0x04, 0x10, 0x00, 0x08, 0x41, 0x02, 0x10, 0x00, 0x0f, 0xff, 0x02, 0x20, 0x00, 0x08, 0x41, 0x01, 0x20, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0x40, 0x01, 0x30, 0x00, 0x00, 0x40, 0x02, 0x08, 0x00, 0x00, 0x40, 0x0c, 0x07, 0x00, 0x00, 0x40, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t_CN_EN[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x80, 0x00, 0x1f, 0xff, 0x80, 0x80, 0x00, 0x01, 0x10, 0x3f, 0xff, 0x00, 0x00, 0x40, 0x04, 0x08, 0x00, 0x07, 0xfc, 0x04, 0x08, 0x00, 0x04, 0x44, 0x04, 0x10, 0x00, 0x04, 0x44, 0x02, 0x10, 0x00, 0x04, 0x44, 0x02, 0x20, 0x00, 0x1f, 0xff, 0x81, 0x20, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0xa0, 0x01, 0x30, 0x00, 0x01, 0x10, 0x02, 0x08, 0x00, 0x06, 0x0c, 0x0c, 0x07, 0x00, 0x18, 0x03, 0xb0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t_CN_JP[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x13, 0xfe, 0x00, 0x04, 0x02, 0x08, 0x40, 0x00, 0x04, 0x02, 0x08, 0x40, 0x00, 0x04, 0x02, 0x01, 0xfc, 0x00, 0x04, 0x02, 0x38, 0x84, 0x00, 0x04, 0x02, 0x08, 0x84, 0x00, 0x07, 0xfe, 0x0f, 0xff, 0x00, 0x04, 0x02, 0x08, 0x00, 0x00, 0x04, 0x02, 0x09, 0xfe, 0x00, 0x04, 0x02, 0x09, 0x02, 0x00, 0x04, 0x02, 0x0b, 0x02, 0x00, 0x04, 0x02, 0x0d, 0x02, 0x00, 0x07, 0xfe, 0x09, 0xfe, 0x00, 0x04, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
//翻转
|
||||
const unsigned char t4f[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x1d, 0xc2, 0x08, 0x00, 0x05, 0x44, 0x42, 0x08, 0x00, 0x03, 0x84, 0x5f, 0xbf, 0x00, 0x0f, 0xe4, 0x44, 0x10, 0x00, 0x01, 0x15, 0x45, 0x10, 0x00, 0x05, 0x4c, 0xc9, 0x7f, 0x80, 0x09, 0x24, 0x4f, 0x90, 0x00, 0x07, 0xc4, 0xc1, 0x10, 0x00, 0x05, 0x4d, 0x41, 0x3f, 0x00, 0x05, 0x54, 0x43, 0x81, 0x00, 0x07, 0xc4, 0x4d, 0x02, 0x00, 0x05, 0x44, 0x41, 0x14, 0x00, 0x05, 0x55, 0x41, 0x08, 0x00, 0x07, 0xc8, 0x81, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
//保存
|
||||
const unsigned char t_save[] PROGMEM = { 0x02, 0xfe, 0x01, 0x00, 0x00, 0x02, 0x82, 0x3f, 0xff, 0x00, 0x04, 0x82, 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x0c, 0x10, 0x04, 0xfc, 0x00, 0x14, 0x10, 0x04, 0x08, 0x00, 0x05, 0xff, 0x8c, 0x10, 0x00, 0x04, 0x10, 0x14, 0x10, 0x00, 0x04, 0x38, 0x25, 0xff, 0x00, 0x04, 0x34, 0x04, 0x10, 0x00, 0x04, 0x52, 0x04, 0x10, 0x00, 0x04, 0x91, 0x84, 0x10, 0x00, 0x05, 0x10, 0x04, 0x50, 0x00, 0x04, 0x10, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char tAbout[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x0f, 0xfe, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x07, 0xff, 0x80, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x10, 0x1f, 0xff, 0x80, 0x0f, 0xff, 0xc0, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x28, 0x00, 0x40, 0x00, 0x00, 0x28, 0x00, 0x40, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x00, 0x82, 0x00, 0x40, 0x00, 0x03, 0x01, 0xc1, 0x40, 0x00, 0x0c, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char tPassword[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1f, 0x7e, 0x00, 0x1f, 0xff, 0x84, 0x02, 0x00, 0x10, 0x80, 0x84, 0x42, 0x00, 0x0a, 0x4a, 0x04, 0x42, 0x00, 0x0a, 0x31, 0x08, 0x42, 0x00, 0x12, 0xc5, 0x0f, 0x42, 0x00, 0x03, 0x04, 0x19, 0x7f, 0x00, 0x1d, 0xf8, 0x29, 0x01, 0x00, 0x00, 0x40, 0x09, 0x01, 0x00, 0x08, 0x42, 0x09, 0xfd, 0x00, 0x08, 0x42, 0x09, 0x01, 0x00, 0x08, 0x42, 0x0f, 0x01, 0x00, 0x0f, 0xfe, 0x09, 0x05, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t19[] PROGMEM = { 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x1f, 0x88, 0xfe, 0x00, 0x1f, 0xd0, 0x0e, 0x22, 0x00, 0x04, 0x20, 0x30, 0x22, 0x00, 0x04, 0x5f, 0x80, 0x22, 0x00, 0x07, 0x84, 0x9e, 0x22, 0x00, 0x04, 0x85, 0x08, 0x22, 0x00, 0x04, 0x94, 0x08, 0x22, 0x00, 0x04, 0x94, 0x28, 0xfe, 0x00, 0x04, 0x97, 0x1e, 0x42, 0x00, 0x04, 0x94, 0x08, 0x42, 0x00, 0x08, 0x94, 0x08, 0x42, 0x00, 0x0a, 0xac, 0x0a, 0x42, 0x00, 0x11, 0x44, 0x0c, 0x42, 0x00, 0x00, 0x83, 0x89, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char *CN_table[] = {
|
||||
t0, t1, t2, t3, t4, t5, t19 , t7, tPassword, t6, tAbout, Back, //0
|
||||
t0, t1_1, t1_2, t1_3, t1_4, t_save, //1
|
||||
t2_0, t2_1, t2_2, t_save, //2
|
||||
t2_1, t3_1, t2_2, t_save,//3
|
||||
t_4, t_PID,//4
|
||||
t5_0, t5_1,//5
|
||||
t_off, t_on,//6
|
||||
t_NO, t_OK,//7
|
||||
t_CN_CN, t_CN_EN, t_CN_JP, //8
|
||||
t5_3, t4f, t_save, //9
|
||||
};
|
||||
|
||||
/*
|
||||
日语 Japanese
|
||||
*/
|
||||
/*
|
||||
8x8 dot Japanese font for Arduboy
|
||||
|
||||
Copyright (c) 2016 emutyworks
|
||||
|
||||
Released under the MIT license
|
||||
https://github.com/emutyworks/8x8DotJPFont/blob/master/LICENSE.txt
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
利用しないフォントデータはヘッダファイルを読み込まないようにするとメモリが節約できます、
|
||||
drawText() 実行時にフォントが無い場合は処理がスキップされます。
|
||||
|
||||
例) 8x8 dot ひらがな・カタカナ・記号 のみ利用
|
||||
#include "misaki_font_f0.h" // 8x8 dot ひらがな・カタカナ・記号
|
||||
//#include "misaki_font_f1.h" // 4x8 dot 英語・カタカナ・記号
|
||||
//#include "misaki_font_f2.h" // 8x8 dot 漢字
|
||||
*/
|
||||
|
||||
#if LANG_JP_State
|
||||
#define MISAKI_FONT_H
|
||||
|
||||
#define MISAKI_FONT_F0_PAGE 0xF0
|
||||
#define MISAKI_FONT_F1_PAGE 0xF1
|
||||
#define MISAKI_FONT_F2_PAGE 0xF2
|
||||
|
||||
#define MISAKI_FONT_F0_W 8
|
||||
#define MISAKI_FONT_F1_W 3
|
||||
#define MISAKI_FONT_F2_W 7
|
||||
|
||||
#define MISAKI_FONT_F0_SIZE 0xEF
|
||||
#define MISAKI_FONT_F1_SIZE 0x9D
|
||||
#define MISAKI_FONT_F2_SIZE 0x22 // misaki_font_f2.h の最終行の値をここに設定する、最大0xEFまで
|
||||
PROGMEM const uint8_t misaki_font_0x00[1] = { 0x00 };
|
||||
#define MISAKI_FONT_F0_H
|
||||
PROGMEM const uint8_t misaki_font_f0[ MISAKI_FONT_F0_SIZE + 1 ][ MISAKI_FONT_F0_W ] =
|
||||
{
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x00 */
|
||||
{ 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x01 、 */
|
||||
{ 0x20, 0x50, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x02 。 */
|
||||
{ 0x50, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x03 , */
|
||||
{ 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x04 . */
|
||||
{ 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, /* 0x05 ・ */
|
||||
{ 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00 }, /* 0x06 : */
|
||||
{ 0x00, 0x00, 0x56, 0x36, 0x00, 0x00, 0x00, 0x00 }, /* 0x07 ; */
|
||||
{ 0x00, 0x02, 0x01, 0x51, 0x09, 0x09, 0x06, 0x00 }, /* 0x08 ? */
|
||||
{ 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00 }, /* 0x09 ! */
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x41, 0x41, 0x00 }, /* 0x0A [ */
|
||||
{ 0x41, 0x41, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x0B ] */
|
||||
{ 0x00, 0x00, 0x00, 0x3f, 0x01, 0x01, 0x01, 0x00 }, /* 0x0C 「 */
|
||||
{ 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00 }, /* 0x0D 」 */
|
||||
{ 0x00, 0x00, 0x3f, 0x21, 0x3d, 0x05, 0x07, 0x00 }, /* 0x0E 『 */
|
||||
{ 0x70, 0x50, 0x5e, 0x42, 0x7e, 0x00, 0x00, 0x00 }, /* 0x0F 』 */
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x63, 0x41, 0x00 }, /* 0x10 【 */
|
||||
{ 0x41, 0x63, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x11 】 */
|
||||
{ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00 }, /* 0x12 + */
|
||||
{ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0x13 - */
|
||||
{ 0x44, 0x44, 0x44, 0x5f, 0x44, 0x44, 0x44, 0x00 }, /* 0x14 ± */
|
||||
{ 0x41, 0x22, 0x14, 0x08, 0x14, 0x22, 0x41, 0x00 }, /* 0x15 × */
|
||||
{ 0x08, 0x08, 0x08, 0x2a, 0x08, 0x08, 0x08, 0x00 }, /* 0x16 ÷ */
|
||||
{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00 }, /* 0x17 = */
|
||||
{ 0x14, 0x34, 0x14, 0x1c, 0x14, 0x16, 0x14, 0x00 }, /* 0x18 ≠ */
|
||||
{ 0x08, 0x08, 0x14, 0x14, 0x14, 0x22, 0x22, 0x00 }, /* 0x19 < */
|
||||
{ 0x22, 0x22, 0x14, 0x14, 0x14, 0x08, 0x08, 0x00 }, /* 0x1A > */
|
||||
{ 0x02, 0x05, 0x02, 0x3c, 0x42, 0x42, 0x24, 0x00 }, /* 0x1B ℃ */
|
||||
{ 0x00, 0x2b, 0x2c, 0x78, 0x2c, 0x2b, 0x00, 0x00 }, /* 0x1C ¥ */
|
||||
{ 0x00, 0x24, 0x2a, 0x7a, 0x2f, 0x2a, 0x12, 0x00 }, /* 0x1D $ */
|
||||
{ 0x00, 0x1c, 0x62, 0x32, 0x2e, 0x23, 0x14, 0x00 }, /* 0x1E ¢ */
|
||||
{ 0x20, 0x54, 0x5e, 0x25, 0x41, 0x42, 0x20, 0x00 }, /* 0x1F £ */
|
||||
{ 0x42, 0x25, 0x12, 0x08, 0x24, 0x52, 0x21, 0x00 }, /* 0x20 % */
|
||||
{ 0x20, 0x62, 0x3e, 0x63, 0x3e, 0x23, 0x02, 0x00 }, /* 0x21 # */
|
||||
{ 0x20, 0x56, 0x49, 0x55, 0x22, 0x58, 0x40, 0x00 }, /* 0x22 & */
|
||||
{ 0x00, 0x22, 0x14, 0x7f, 0x14, 0x22, 0x00, 0x00 }, /* 0x23 * */
|
||||
{ 0x1c, 0x22, 0x59, 0x55, 0x4d, 0x12, 0x0c, 0x00 }, /* 0x24 @ */
|
||||
{ 0x00, 0x00, 0x4a, 0x55, 0x55, 0x29, 0x00, 0x00 }, /* 0x25 § */
|
||||
{ 0x04, 0x64, 0x3c, 0x17, 0x3c, 0x64, 0x04, 0x00 }, /* 0x26 ☆ */
|
||||
{ 0x04, 0x64, 0x3c, 0x1f, 0x3c, 0x64, 0x04, 0x00 }, /* 0x27 ★ */
|
||||
{ 0x1c, 0x22, 0x41, 0x41, 0x41, 0x22, 0x1c, 0x00 }, /* 0x28 ○ */
|
||||
{ 0x1c, 0x3e, 0x7f, 0x7f, 0x7f, 0x3e, 0x1c, 0x00 }, /* 0x29 ● */
|
||||
{ 0x1c, 0x22, 0x5d, 0x55, 0x5d, 0x22, 0x1c, 0x00 }, /* 0x2A ◎ */
|
||||
{ 0x08, 0x14, 0x22, 0x41, 0x22, 0x14, 0x08, 0x00 }, /* 0x2B ◇ */
|
||||
{ 0x08, 0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x08, 0x00 }, /* 0x2C ◆ */
|
||||
{ 0x7f, 0x41, 0x41, 0x41, 0x41, 0x41, 0x7f, 0x00 }, /* 0x2D □ */
|
||||
{ 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00 }, /* 0x2E ■ */
|
||||
{ 0x40, 0x70, 0x4c, 0x43, 0x4c, 0x70, 0x40, 0x00 }, /* 0x2F △ */
|
||||
{ 0x40, 0x70, 0x7c, 0x7f, 0x7c, 0x70, 0x40, 0x00 }, /* 0x30 ▲ */
|
||||
{ 0x01, 0x07, 0x19, 0x61, 0x19, 0x07, 0x01, 0x00 }, /* 0x31 ▽ */
|
||||
{ 0x01, 0x07, 0x1f, 0x7f, 0x1f, 0x07, 0x01, 0x00 }, /* 0x32 ▼ */
|
||||
{ 0x49, 0x22, 0x14, 0x49, 0x14, 0x22, 0x49, 0x00 }, /* 0x33 ※ */
|
||||
{ 0x05, 0x05, 0x05, 0x7d, 0x05, 0x05, 0x05, 0x00 }, /* 0x34 〒 */
|
||||
{ 0x08, 0x08, 0x08, 0x08, 0x2a, 0x1c, 0x08, 0x00 }, /* 0x35 → */
|
||||
{ 0x08, 0x1c, 0x2a, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0x36 ← */
|
||||
{ 0x00, 0x04, 0x02, 0x7f, 0x02, 0x04, 0x00, 0x00 }, /* 0x37 ↑ */
|
||||
{ 0x00, 0x10, 0x20, 0x7f, 0x20, 0x10, 0x00, 0x00 }, /* 0x38 ↓ */
|
||||
{ 0x00, 0x3e, 0x41, 0x41, 0x41, 0x41, 0x3e, 0x00 }, /* 0x39 0 */
|
||||
{ 0x00, 0x00, 0x42, 0x7f, 0x40, 0x00, 0x00, 0x00 }, /* 0x3A 1 */
|
||||
{ 0x00, 0x62, 0x51, 0x51, 0x49, 0x49, 0x46, 0x00 }, /* 0x3B 2 */
|
||||
{ 0x00, 0x22, 0x41, 0x49, 0x49, 0x49, 0x36, 0x00 }, /* 0x3C 3 */
|
||||
{ 0x00, 0x30, 0x28, 0x24, 0x22, 0x7f, 0x20, 0x00 }, /* 0x3D 4 */
|
||||
{ 0x00, 0x2f, 0x45, 0x45, 0x45, 0x45, 0x39, 0x00 }, /* 0x3E 5 */
|
||||
{ 0x00, 0x3e, 0x49, 0x49, 0x49, 0x49, 0x32, 0x00 }, /* 0x3F 6 */
|
||||
{ 0x00, 0x01, 0x01, 0x61, 0x19, 0x05, 0x03, 0x00 }, /* 0x40 7 */
|
||||
{ 0x00, 0x36, 0x49, 0x49, 0x49, 0x49, 0x36, 0x00 }, /* 0x41 8 */
|
||||
{ 0x00, 0x26, 0x49, 0x49, 0x49, 0x49, 0x3e, 0x00 }, /* 0x42 9 */
|
||||
{ 0x00, 0x20, 0x54, 0x7e, 0x34, 0x14, 0x60, 0x00 }, /* 0x43 ぁ */
|
||||
{ 0x20, 0x52, 0x7f, 0x2a, 0x1a, 0x4a, 0x30, 0x00 }, /* 0x44 あ */
|
||||
{ 0x00, 0x3c, 0x40, 0x20, 0x04, 0x18, 0x00, 0x00 }, /* 0x45 ぃ */
|
||||
{ 0x1e, 0x20, 0x40, 0x20, 0x02, 0x04, 0x18, 0x00 }, /* 0x46 い */
|
||||
{ 0x00, 0x10, 0x4a, 0x4a, 0x2a, 0x10, 0x00, 0x00 }, /* 0x47 ぅ */
|
||||
{ 0x00, 0x08, 0x45, 0x45, 0x45, 0x25, 0x18, 0x00 }, /* 0x48 う */
|
||||
{ 0x00, 0x48, 0x2a, 0x3a, 0x4a, 0x40, 0x00, 0x00 }, /* 0x49 ぇ */
|
||||
{ 0x00, 0x44, 0x25, 0x15, 0x3d, 0x45, 0x40, 0x00 }, /* 0x4A え */
|
||||
{ 0x00, 0x24, 0x7e, 0x14, 0x50, 0x24, 0x00, 0x00 }, /* 0x4B ぉ */
|
||||
{ 0x22, 0x52, 0x7f, 0x0a, 0x48, 0x4a, 0x34, 0x00 }, /* 0x4C お */
|
||||
{ 0x44, 0x34, 0x4f, 0x44, 0x38, 0x04, 0x18, 0x00 }, /* 0x4D か */
|
||||
{ 0x44, 0x34, 0x4f, 0x44, 0x39, 0x04, 0x19, 0x00 }, /* 0x4E が */
|
||||
{ 0x00, 0x2a, 0x5a, 0x4b, 0x4e, 0x5a, 0x08, 0x00 }, /* 0x4F き */
|
||||
{ 0x00, 0x2a, 0x5a, 0x4b, 0x4e, 0x5b, 0x08, 0x00 }, /* 0x50 ぎ */
|
||||
{ 0x00, 0x08, 0x14, 0x14, 0x22, 0x41, 0x00, 0x00 }, /* 0x51 く */
|
||||
{ 0x00, 0x08, 0x14, 0x14, 0x22, 0x45, 0x04, 0x00 }, /* 0x52 ぐ */
|
||||
{ 0x3f, 0x00, 0x04, 0x44, 0x3f, 0x04, 0x04, 0x00 }, /* 0x53 け */
|
||||
{ 0x3f, 0x00, 0x04, 0x44, 0x3f, 0x04, 0x05, 0x00 }, /* 0x54 げ */
|
||||
{ 0x00, 0x20, 0x52, 0x42, 0x42, 0x42, 0x40, 0x00 }, /* 0x55 こ */
|
||||
{ 0x00, 0x20, 0x52, 0x42, 0x43, 0x42, 0x41, 0x00 }, /* 0x56 ご */
|
||||
{ 0x00, 0x24, 0x54, 0x44, 0x47, 0x5c, 0x04, 0x00 }, /* 0x57 さ */
|
||||
{ 0x00, 0x24, 0x54, 0x44, 0x47, 0x5c, 0x05, 0x00 }, /* 0x58 ざ */
|
||||
{ 0x00, 0x00, 0x3f, 0x40, 0x40, 0x40, 0x20, 0x00 }, /* 0x59 し */
|
||||
{ 0x00, 0x00, 0x3f, 0x40, 0x41, 0x40, 0x21, 0x00 }, /* 0x5A じ */
|
||||
{ 0x02, 0x02, 0x0a, 0x56, 0x3f, 0x02, 0x02, 0x00 }, /* 0x5B す */
|
||||
{ 0x02, 0x02, 0x0a, 0x56, 0x3f, 0x02, 0x03, 0x00 }, /* 0x5C ず */
|
||||
{ 0x04, 0x04, 0x3f, 0x44, 0x54, 0x5f, 0x44, 0x00 }, /* 0x5D せ */
|
||||
{ 0x04, 0x04, 0x3f, 0x44, 0x54, 0x5f, 0x45, 0x00 }, /* 0x5E ぜ */
|
||||
{ 0x00, 0x08, 0x09, 0x3d, 0x4b, 0x49, 0x08, 0x00 }, /* 0x5F そ */
|
||||
{ 0x00, 0x08, 0x09, 0x3d, 0x4b, 0x49, 0x0a, 0x00 }, /* 0x60 ぞ */
|
||||
{ 0x42, 0x3a, 0x07, 0x22, 0x54, 0x44, 0x44, 0x00 }, /* 0x61 た */
|
||||
{ 0x42, 0x3a, 0x07, 0x22, 0x55, 0x44, 0x45, 0x00 }, /* 0x62 だ */
|
||||
{ 0x00, 0x02, 0x12, 0x4e, 0x4b, 0x4a, 0x32, 0x00 }, /* 0x63 ち */
|
||||
{ 0x00, 0x02, 0x12, 0x4e, 0x4b, 0x4a, 0x33, 0x00 }, /* 0x64 ぢ */
|
||||
{ 0x00, 0x10, 0x10, 0x48, 0x48, 0x30, 0x00, 0x00 }, /* 0x65 っ */
|
||||
{ 0x04, 0x04, 0x02, 0x22, 0x22, 0x22, 0x1c, 0x00 }, /* 0x66 つ */
|
||||
{ 0x04, 0x04, 0x02, 0x22, 0x23, 0x22, 0x1d, 0x00 }, /* 0x67 づ */
|
||||
{ 0x00, 0x02, 0x02, 0x1a, 0x25, 0x43, 0x41, 0x00 }, /* 0x68 て */
|
||||
{ 0x00, 0x02, 0x02, 0x1a, 0x25, 0x43, 0x45, 0x00 }, /* 0x69 で */
|
||||
{ 0x00, 0x20, 0x57, 0x48, 0x48, 0x44, 0x44, 0x00 }, /* 0x6A と */
|
||||
{ 0x00, 0x20, 0x57, 0x48, 0x49, 0x44, 0x45, 0x00 }, /* 0x6B ど */
|
||||
{ 0x12, 0x0a, 0x27, 0x52, 0x50, 0x3a, 0x24, 0x00 }, /* 0x6C な */
|
||||
{ 0x7f, 0x00, 0x20, 0x52, 0x42, 0x42, 0x40, 0x00 }, /* 0x6D に */
|
||||
{ 0x30, 0x4e, 0x38, 0x54, 0x0f, 0x64, 0x78, 0x00 }, /* 0x6E ぬ */
|
||||
{ 0x24, 0x14, 0x7f, 0x04, 0x22, 0x52, 0x3c, 0x00 }, /* 0x6F ね */
|
||||
{ 0x18, 0x24, 0x12, 0x4e, 0x42, 0x24, 0x18, 0x00 }, /* 0x70 の */
|
||||
{ 0x7f, 0x00, 0x24, 0x54, 0x54, 0x3f, 0x44, 0x00 }, /* 0x71 は */
|
||||
{ 0x7f, 0x00, 0x24, 0x54, 0x54, 0x3f, 0x45, 0x00 }, /* 0x72 ば */
|
||||
{ 0x7f, 0x00, 0x24, 0x54, 0x56, 0x3d, 0x46, 0x00 }, /* 0x73 ぱ */
|
||||
{ 0x02, 0x3a, 0x47, 0x40, 0x41, 0x3e, 0x04, 0x00 }, /* 0x74 ひ */
|
||||
{ 0x02, 0x3a, 0x47, 0x40, 0x41, 0x3e, 0x05, 0x00 }, /* 0x75 び */
|
||||
{ 0x02, 0x3a, 0x47, 0x40, 0x43, 0x3d, 0x06, 0x00 }, /* 0x76 ぴ */
|
||||
{ 0x40, 0x30, 0x40, 0x4d, 0x32, 0x10, 0x60, 0x00 }, /* 0x77 ふ */
|
||||
{ 0x40, 0x30, 0x40, 0x4d, 0x32, 0x11, 0x61, 0x00 }, /* 0x78 ぶ */
|
||||
{ 0x40, 0x30, 0x40, 0x4d, 0x32, 0x15, 0x62, 0x00 }, /* 0x79 ぷ */
|
||||
{ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x00 }, /* 0x7A へ */
|
||||
{ 0x08, 0x04, 0x02, 0x04, 0x09, 0x10, 0x11, 0x00 }, /* 0x7B べ */
|
||||
{ 0x08, 0x04, 0x02, 0x04, 0x0a, 0x15, 0x12, 0x00 }, /* 0x7C ぺ */
|
||||
{ 0x7f, 0x00, 0x6a, 0x6a, 0x7e, 0x2a, 0x4a, 0x00 }, /* 0x7D ほ */
|
||||
{ 0x7f, 0x00, 0x6a, 0x6a, 0x7f, 0x2a, 0x4b, 0x00 }, /* 0x7E ぼ */
|
||||
{ 0x7f, 0x00, 0x6a, 0x6a, 0x7e, 0x2d, 0x4a, 0x00 }, /* 0x7F ぽ */
|
||||
{ 0x00, 0x6a, 0x6a, 0x6a, 0x7f, 0x2a, 0x4a, 0x00 }, /* 0x80 ま */
|
||||
{ 0x30, 0x29, 0x1d, 0x4b, 0x48, 0x3c, 0x10, 0x00 }, /* 0x81 み */
|
||||
{ 0x12, 0x2a, 0x7f, 0x42, 0x40, 0x42, 0x24, 0x00 }, /* 0x82 む */
|
||||
{ 0x30, 0x4e, 0x38, 0x54, 0x0f, 0x44, 0x38, 0x00 }, /* 0x83 め */
|
||||
{ 0x00, 0x0a, 0x3e, 0x4b, 0x4a, 0x4a, 0x30, 0x00 }, /* 0x84 も */
|
||||
{ 0x00, 0x08, 0x0e, 0x38, 0x46, 0x14, 0x08, 0x00 }, /* 0x85 ゃ */
|
||||
{ 0x04, 0x07, 0x1c, 0x62, 0x03, 0x0a, 0x04, 0x00 }, /* 0x86 や */
|
||||
{ 0x00, 0x1c, 0x48, 0x3e, 0x24, 0x18, 0x00, 0x00 }, /* 0x87 ゅ */
|
||||
{ 0x1e, 0x04, 0x52, 0x3f, 0x12, 0x12, 0x0c, 0x00 }, /* 0x88 ゆ */
|
||||
{ 0x00, 0x20, 0x50, 0x50, 0x3e, 0x48, 0x00, 0x00 }, /* 0x89 ょ */
|
||||
{ 0x00, 0x20, 0x50, 0x50, 0x3f, 0x24, 0x44, 0x00 }, /* 0x8A よ */
|
||||
{ 0x00, 0x1c, 0x51, 0x49, 0x4a, 0x48, 0x30, 0x00 }, /* 0x8B ら */
|
||||
{ 0x00, 0x0f, 0x42, 0x41, 0x21, 0x1e, 0x00, 0x00 }, /* 0x8C り */
|
||||
{ 0x00, 0x10, 0x69, 0x6d, 0x4b, 0x49, 0x30, 0x00 }, /* 0x8D る */
|
||||
{ 0x24, 0x14, 0x7f, 0x04, 0x02, 0x3e, 0x40, 0x00 }, /* 0x8E れ */
|
||||
{ 0x00, 0x10, 0x49, 0x4d, 0x4b, 0x49, 0x30, 0x00 }, /* 0x8F ろ */
|
||||
{ 0x00, 0x28, 0x18, 0x7e, 0x08, 0x44, 0x38, 0x00 }, /* 0x90 ゎ */
|
||||
{ 0x24, 0x14, 0x7f, 0x04, 0x42, 0x42, 0x3c, 0x00 }, /* 0x91 わ */
|
||||
{ 0x30, 0x49, 0x25, 0x1f, 0x24, 0x54, 0x38, 0x00 }, /* 0x92 ゐ */
|
||||
{ 0x40, 0x28, 0x25, 0x57, 0x35, 0x28, 0x40, 0x00 }, /* 0x93 ゑ */
|
||||
{ 0x10, 0x0a, 0x2e, 0x5b, 0x72, 0x4a, 0x48, 0x00 }, /* 0x94 を */
|
||||
{ 0x40, 0x30, 0x0c, 0x33, 0x40, 0x40, 0x20, 0x00 }, /* 0x95 ん */
|
||||
{ 0x00, 0x04, 0x44, 0x3c, 0x14, 0x0c, 0x00, 0x00 }, /* 0x96 ァ */
|
||||
{ 0x00, 0x01, 0x41, 0x3d, 0x09, 0x05, 0x03, 0x00 }, /* 0x97 ア */
|
||||
{ 0x00, 0x20, 0x20, 0x10, 0x78, 0x04, 0x00, 0x00 }, /* 0x98 ィ */
|
||||
{ 0x00, 0x10, 0x10, 0x08, 0x7c, 0x02, 0x01, 0x00 }, /* 0x99 イ */
|
||||
{ 0x00, 0x18, 0x48, 0x4c, 0x28, 0x18, 0x00, 0x00 }, /* 0x9A ゥ */
|
||||
{ 0x00, 0x06, 0x42, 0x43, 0x22, 0x12, 0x0e, 0x00 }, /* 0x9B ウ */
|
||||
{ 0x00, 0x40, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00 }, /* 0x9C ェ */
|
||||
{ 0x20, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x20, 0x00 }, /* 0x9D エ */
|
||||
{ 0x00, 0x28, 0x28, 0x58, 0x7c, 0x08, 0x00, 0x00 }, /* 0x9E ォ */
|
||||
{ 0x22, 0x22, 0x12, 0x4a, 0x7f, 0x02, 0x02, 0x00 }, /* 0x9F オ */
|
||||
{ 0x00, 0x42, 0x22, 0x1f, 0x02, 0x42, 0x7e, 0x00 }, /* 0xA0 カ */
|
||||
{ 0x00, 0x42, 0x22, 0x1f, 0x02, 0x42, 0x7f, 0x00 }, /* 0xA1 ガ */
|
||||
{ 0x00, 0x12, 0x12, 0x1f, 0x72, 0x12, 0x10, 0x00 }, /* 0xA2 キ */
|
||||
{ 0x00, 0x12, 0x12, 0x1f, 0x72, 0x13, 0x10, 0x00 }, /* 0xA3 ギ */
|
||||
{ 0x00, 0x08, 0x44, 0x43, 0x22, 0x12, 0x0e, 0x00 }, /* 0xA4 ク */
|
||||
{ 0x00, 0x08, 0x44, 0x43, 0x22, 0x12, 0x0f, 0x00 }, /* 0xA5 グ */
|
||||
{ 0x08, 0x07, 0x42, 0x22, 0x1e, 0x02, 0x02, 0x00 }, /* 0xA6 ケ */
|
||||
{ 0x08, 0x07, 0x42, 0x22, 0x1f, 0x02, 0x03, 0x00 }, /* 0xA7 ゲ */
|
||||
{ 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x00 }, /* 0xA8 コ */
|
||||
{ 0x00, 0x42, 0x42, 0x42, 0x43, 0x42, 0x7f, 0x00 }, /* 0xA9 ゴ */
|
||||
{ 0x02, 0x02, 0x4f, 0x42, 0x22, 0x1f, 0x02, 0x00 }, /* 0xAA サ */
|
||||
{ 0x02, 0x02, 0x4f, 0x42, 0x23, 0x1e, 0x03, 0x00 }, /* 0xAB ザ */
|
||||
{ 0x00, 0x45, 0x4a, 0x40, 0x20, 0x10, 0x0c, 0x00 }, /* 0xAC シ */
|
||||
{ 0x00, 0x45, 0x4a, 0x40, 0x21, 0x10, 0x0d, 0x00 }, /* 0xAD ジ */
|
||||
{ 0x40, 0x42, 0x22, 0x22, 0x1a, 0x26, 0x40, 0x00 }, /* 0xAE ス */
|
||||
{ 0x40, 0x42, 0x22, 0x22, 0x1b, 0x26, 0x41, 0x00 }, /* 0xAF ズ */
|
||||
{ 0x04, 0x04, 0x3f, 0x44, 0x44, 0x54, 0x4c, 0x00 }, /* 0xB0 セ */
|
||||
{ 0x04, 0x04, 0x3f, 0x44, 0x45, 0x54, 0x4d, 0x00 }, /* 0xB1 ゼ */
|
||||
{ 0x00, 0x01, 0x46, 0x40, 0x20, 0x10, 0x0f, 0x00 }, /* 0xB2 ソ */
|
||||
{ 0x00, 0x01, 0x46, 0x40, 0x20, 0x11, 0x0f, 0x00 }, /* 0xB3 ゾ */
|
||||
{ 0x00, 0x08, 0x44, 0x4b, 0x2a, 0x12, 0x0e, 0x00 }, /* 0xB4 タ */
|
||||
{ 0x00, 0x08, 0x44, 0x4b, 0x2a, 0x12, 0x0f, 0x00 }, /* 0xB5 ダ */
|
||||
{ 0x08, 0x0a, 0x4a, 0x3e, 0x09, 0x09, 0x08, 0x00 }, /* 0xB6 チ */
|
||||
{ 0x08, 0x0a, 0x4a, 0x3e, 0x09, 0x08, 0x09, 0x00 }, /* 0xB7 ヂ */
|
||||
{ 0x00, 0x18, 0x40, 0x58, 0x20, 0x18, 0x00, 0x00 }, /* 0xB8 ッ */
|
||||
{ 0x02, 0x0c, 0x42, 0x4c, 0x20, 0x10, 0x0e, 0x00 }, /* 0xB9 ツ */
|
||||
{ 0x02, 0x0c, 0x42, 0x4c, 0x21, 0x10, 0x0d, 0x00 }, /* 0xBA ヅ */
|
||||
{ 0x04, 0x05, 0x45, 0x3d, 0x05, 0x05, 0x04, 0x00 }, /* 0xBB テ */
|
||||
{ 0x04, 0x05, 0x45, 0x3d, 0x05, 0x04, 0x05, 0x00 }, /* 0xBC デ */
|
||||
{ 0x00, 0x00, 0x7f, 0x08, 0x08, 0x10, 0x00, 0x00 }, /* 0xBD ト */
|
||||
{ 0x00, 0x00, 0x7f, 0x08, 0x09, 0x10, 0x01, 0x00 }, /* 0xBE ド */
|
||||
{ 0x04, 0x44, 0x24, 0x1f, 0x04, 0x04, 0x04, 0x00 }, /* 0xBF ナ */
|
||||
{ 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00 }, /* 0xC0 ニ */
|
||||
{ 0x40, 0x41, 0x25, 0x15, 0x19, 0x27, 0x00, 0x00 }, /* 0xC1 ヌ */
|
||||
{ 0x20, 0x22, 0x12, 0x7b, 0x06, 0x12, 0x20, 0x00 }, /* 0xC2 ネ */
|
||||
{ 0x40, 0x40, 0x20, 0x10, 0x08, 0x07, 0x00, 0x00 }, /* 0xC3 ノ */
|
||||
{ 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0c, 0x70, 0x00 }, /* 0xC4 ハ */
|
||||
{ 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0d, 0x71, 0x00 }, /* 0xC5 バ */
|
||||
{ 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0d, 0x72, 0x00 }, /* 0xC6 パ */
|
||||
{ 0x00, 0x3f, 0x48, 0x48, 0x48, 0x44, 0x44, 0x00 }, /* 0xC7 ヒ */
|
||||
{ 0x00, 0x3f, 0x48, 0x48, 0x49, 0x44, 0x45, 0x00 }, /* 0xC8 ビ */
|
||||
{ 0x00, 0x3f, 0x48, 0x48, 0x4a, 0x45, 0x46, 0x00 }, /* 0xC9 ピ */
|
||||
{ 0x00, 0x02, 0x42, 0x42, 0x22, 0x12, 0x0e, 0x00 }, /* 0xCA フ */
|
||||
{ 0x00, 0x02, 0x42, 0x42, 0x23, 0x12, 0x0f, 0x00 }, /* 0xCB ブ */
|
||||
{ 0x00, 0x02, 0x42, 0x42, 0x22, 0x15, 0x0e, 0x00 }, /* 0xCC プ */
|
||||
{ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00 }, /* 0xCD ヘ */
|
||||
{ 0x08, 0x04, 0x02, 0x04, 0x09, 0x10, 0x21, 0x00 }, /* 0xCE ベ */
|
||||
{ 0x08, 0x04, 0x02, 0x04, 0x0a, 0x15, 0x22, 0x00 }, /* 0xCF ペ */
|
||||
{ 0x24, 0x14, 0x44, 0x7f, 0x04, 0x14, 0x24, 0x00 }, /* 0xD0 ホ */
|
||||
{ 0x24, 0x14, 0x44, 0x7f, 0x05, 0x14, 0x25, 0x00 }, /* 0xD1 ボ */
|
||||
{ 0x24, 0x14, 0x44, 0x7f, 0x06, 0x15, 0x22, 0x00 }, /* 0xD2 ポ */
|
||||
{ 0x02, 0x02, 0x12, 0x22, 0x52, 0x0a, 0x06, 0x00 }, /* 0xD3 マ */
|
||||
{ 0x00, 0x21, 0x25, 0x29, 0x4a, 0x42, 0x00, 0x00 }, /* 0xD4 ミ */
|
||||
{ 0x40, 0x70, 0x4c, 0x43, 0x50, 0x20, 0x40, 0x00 }, /* 0xD5 ム */
|
||||
{ 0x40, 0x44, 0x24, 0x14, 0x08, 0x37, 0x00, 0x00 }, /* 0xD6 メ */
|
||||
{ 0x00, 0x08, 0x09, 0x3f, 0x49, 0x49, 0x48, 0x00 }, /* 0xD7 モ */
|
||||
{ 0x00, 0x10, 0x1c, 0x68, 0x08, 0x18, 0x00, 0x00 }, /* 0xD8 ャ */
|
||||
{ 0x04, 0x04, 0x0f, 0x74, 0x02, 0x0a, 0x06, 0x00 }, /* 0xD9 ヤ */
|
||||
{ 0x00, 0x40, 0x48, 0x48, 0x78, 0x40, 0x00, 0x00 }, /* 0xDA ュ */
|
||||
{ 0x20, 0x22, 0x22, 0x22, 0x3e, 0x20, 0x20, 0x00 }, /* 0xDB ユ */
|
||||
{ 0x00, 0x00, 0x44, 0x54, 0x54, 0x7c, 0x00, 0x00 }, /* 0xDC ョ */
|
||||
{ 0x00, 0x42, 0x4a, 0x4a, 0x4a, 0x4a, 0x7e, 0x00 }, /* 0xDD ヨ */
|
||||
{ 0x00, 0x04, 0x45, 0x45, 0x25, 0x15, 0x0c, 0x00 }, /* 0xDE ラ */
|
||||
{ 0x00, 0x0f, 0x40, 0x40, 0x20, 0x1f, 0x00, 0x00 }, /* 0xDF リ */
|
||||
{ 0x40, 0x20, 0x1e, 0x00, 0x7f, 0x20, 0x10, 0x00 }, /* 0xE0 ル */
|
||||
{ 0x00, 0x00, 0x7f, 0x40, 0x20, 0x10, 0x08, 0x00 }, /* 0xE1 レ */
|
||||
{ 0x00, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x00 }, /* 0xE2 ロ */
|
||||
{ 0x00, 0x0c, 0x44, 0x44, 0x24, 0x1c, 0x00, 0x00 }, /* 0xE3 ヮ */
|
||||
{ 0x00, 0x06, 0x42, 0x42, 0x22, 0x12, 0x0e, 0x00 }, /* 0xE4 ワ */
|
||||
{ 0x10, 0x12, 0x1e, 0x12, 0x12, 0x7f, 0x12, 0x00 }, /* 0xE5 ヰ */
|
||||
{ 0x20, 0x22, 0x22, 0x3a, 0x26, 0x22, 0x20, 0x00 }, /* 0xE6 ヱ */
|
||||
{ 0x00, 0x01, 0x45, 0x45, 0x25, 0x15, 0x0f, 0x00 }, /* 0xE7 ヲ */
|
||||
{ 0x00, 0x41, 0x42, 0x40, 0x20, 0x10, 0x0c, 0x00 }, /* 0xE8 ン */
|
||||
{ 0x00, 0x06, 0x42, 0x43, 0x22, 0x12, 0x0f, 0x00 }, /* 0xE9 ヴ */
|
||||
{ 0x00, 0x48, 0x28, 0x1c, 0x48, 0x78, 0x00, 0x00 }, /* 0xEA ヵ */
|
||||
{ 0x00, 0x10, 0x0c, 0x48, 0x38, 0x08, 0x00, 0x00 }, /* 0xEB ヶ */
|
||||
{ 0x08, 0x04, 0x04, 0x08, 0x10, 0x10, 0x08, 0x00 }, /* 0xEC 〜 */
|
||||
{ 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00 }, /* 0xED … */
|
||||
{ 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0xEE ー */
|
||||
{ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08 }, /* 0xEF ― */
|
||||
};
|
||||
|
||||
#define MISAKI_FONT_F1_H
|
||||
PROGMEM const uint8_t misaki_font_f1[ MISAKI_FONT_F1_SIZE + 1 ][ MISAKI_FONT_F1_W ] =
|
||||
{
|
||||
{ 0x00, 0x00, 0x00 }, /* 0x00 */
|
||||
{ 0x00, 0x2f, 0x00 }, /* 0x01 ! */
|
||||
{ 0x03, 0x00, 0x03 }, /* 0x02 " */
|
||||
{ 0x3f, 0x12, 0x3f }, /* 0x03 # */
|
||||
{ 0x16, 0x3f, 0x1a }, /* 0x04 $ */
|
||||
{ 0x12, 0x08, 0x24 }, /* 0x05 % */
|
||||
{ 0x32, 0x3d, 0x2a }, /* 0x06 & */
|
||||
{ 0x02, 0x01, 0x00 }, /* 0x07 ' */
|
||||
{ 0x00, 0x3e, 0x41 }, /* 0x08 ( */
|
||||
{ 0x41, 0x3e, 0x00 }, /* 0x09 ) */
|
||||
{ 0x0a, 0x07, 0x0a }, /* 0x0A * */
|
||||
{ 0x08, 0x3e, 0x08 }, /* 0x0B + */
|
||||
{ 0x40, 0x20, 0x00 }, /* 0x0C , */
|
||||
{ 0x08, 0x08, 0x08 }, /* 0x0D - */
|
||||
{ 0x00, 0x20, 0x00 }, /* 0x0E . */
|
||||
{ 0x10, 0x08, 0x04 }, /* 0x0F / */
|
||||
{ 0x1c, 0x2a, 0x1c }, /* 0x10 0 */
|
||||
{ 0x24, 0x3e, 0x20 }, /* 0x11 1 */
|
||||
{ 0x32, 0x2a, 0x24 }, /* 0x12 2 */
|
||||
{ 0x22, 0x2a, 0x14 }, /* 0x13 3 */
|
||||
{ 0x18, 0x14, 0x3e }, /* 0x14 4 */
|
||||
{ 0x2e, 0x2a, 0x12 }, /* 0x15 5 */
|
||||
{ 0x1c, 0x2a, 0x12 }, /* 0x16 6 */
|
||||
{ 0x02, 0x3a, 0x06 }, /* 0x17 7 */
|
||||
{ 0x14, 0x2a, 0x14 }, /* 0x18 8 */
|
||||
{ 0x24, 0x2a, 0x1c }, /* 0x19 9 */
|
||||
{ 0x00, 0x24, 0x00 }, /* 0x1A : */
|
||||
{ 0x40, 0x24, 0x00 }, /* 0x1B ; */
|
||||
{ 0x08, 0x14, 0x22 }, /* 0x1C < */
|
||||
{ 0x14, 0x14, 0x14 }, /* 0x1D = */
|
||||
{ 0x22, 0x14, 0x08 }, /* 0x1E > */
|
||||
{ 0x02, 0x29, 0x06 }, /* 0x1F ? */
|
||||
{ 0x12, 0x29, 0x1e }, /* 0x20 @ */
|
||||
{ 0x3e, 0x09, 0x3e }, /* 0x21 A */
|
||||
{ 0x3f, 0x25, 0x1a }, /* 0x22 B */
|
||||
{ 0x1e, 0x21, 0x21 }, /* 0x23 C */
|
||||
{ 0x3f, 0x21, 0x1e }, /* 0x24 D */
|
||||
{ 0x3f, 0x25, 0x21 }, /* 0x25 E */
|
||||
{ 0x3f, 0x05, 0x01 }, /* 0x26 F */
|
||||
{ 0x1e, 0x21, 0x39 }, /* 0x27 G */
|
||||
{ 0x3f, 0x08, 0x3f }, /* 0x28 H */
|
||||
{ 0x21, 0x3f, 0x21 }, /* 0x29 I */
|
||||
{ 0x10, 0x20, 0x1f }, /* 0x2A J */
|
||||
{ 0x3f, 0x04, 0x3b }, /* 0x2B K */
|
||||
{ 0x3f, 0x20, 0x20 }, /* 0x2C L */
|
||||
{ 0x3f, 0x06, 0x3f }, /* 0x2D M */
|
||||
{ 0x3f, 0x01, 0x3e }, /* 0x2E N */
|
||||
{ 0x1e, 0x21, 0x1e }, /* 0x2F O */
|
||||
{ 0x3f, 0x09, 0x06 }, /* 0x30 P */
|
||||
{ 0x1e, 0x21, 0x5e }, /* 0x31 Q */
|
||||
{ 0x3f, 0x09, 0x36 }, /* 0x32 R */
|
||||
{ 0x22, 0x25, 0x19 }, /* 0x33 S */
|
||||
{ 0x01, 0x3f, 0x01 }, /* 0x34 T */
|
||||
{ 0x3f, 0x20, 0x3f }, /* 0x35 U */
|
||||
{ 0x3f, 0x10, 0x0f }, /* 0x36 V */
|
||||
{ 0x3f, 0x18, 0x3f }, /* 0x37 W */
|
||||
{ 0x33, 0x0c, 0x33 }, /* 0x38 X */
|
||||
{ 0x03, 0x3c, 0x03 }, /* 0x39 Y */
|
||||
{ 0x31, 0x2d, 0x23 }, /* 0x3A Z */
|
||||
{ 0x00, 0x7f, 0x41 }, /* 0x3B [ */
|
||||
{ 0x15, 0x3e, 0x15 }, /* 0x3C \ */
|
||||
{ 0x41, 0x7f, 0x00 }, /* 0x3D ] */
|
||||
{ 0x02, 0x01, 0x02 }, /* 0x3E ^ */
|
||||
{ 0x40, 0x40, 0x40 }, /* 0x3F _ */
|
||||
{ 0x00, 0x01, 0x02 }, /* 0x40 ` */
|
||||
{ 0x18, 0x24, 0x3c }, /* 0x41 a */
|
||||
{ 0x3f, 0x24, 0x18 }, /* 0x42 b */
|
||||
{ 0x18, 0x24, 0x24 }, /* 0x43 c */
|
||||
{ 0x18, 0x24, 0x3f }, /* 0x44 d */
|
||||
{ 0x18, 0x2c, 0x2c }, /* 0x45 e */
|
||||
{ 0x04, 0x3f, 0x05 }, /* 0x46 f */
|
||||
{ 0x48, 0x54, 0x3c }, /* 0x47 g */
|
||||
{ 0x3f, 0x04, 0x38 }, /* 0x48 h */
|
||||
{ 0x00, 0x3d, 0x00 }, /* 0x49 i */
|
||||
{ 0x40, 0x3d, 0x00 }, /* 0x4A j */
|
||||
{ 0x3f, 0x08, 0x34 }, /* 0x4B k */
|
||||
{ 0x01, 0x3f, 0x00 }, /* 0x4C l */
|
||||
{ 0x3c, 0x1c, 0x38 }, /* 0x4D m */
|
||||
{ 0x3c, 0x04, 0x38 }, /* 0x4E n */
|
||||
{ 0x18, 0x24, 0x18 }, /* 0x4F o */
|
||||
{ 0x7c, 0x24, 0x18 }, /* 0x50 p */
|
||||
{ 0x18, 0x24, 0x7c }, /* 0x51 q */
|
||||
{ 0x3c, 0x08, 0x04 }, /* 0x52 r */
|
||||
{ 0x28, 0x3c, 0x14 }, /* 0x53 s */
|
||||
{ 0x04, 0x3e, 0x24 }, /* 0x54 t */
|
||||
{ 0x3c, 0x20, 0x3c }, /* 0x55 u */
|
||||
{ 0x3c, 0x10, 0x0c }, /* 0x56 v */
|
||||
{ 0x3c, 0x30, 0x3c }, /* 0x57 w */
|
||||
{ 0x24, 0x18, 0x24 }, /* 0x58 x */
|
||||
{ 0x4c, 0x50, 0x3c }, /* 0x59 y */
|
||||
{ 0x24, 0x34, 0x2c }, /* 0x5A z */
|
||||
{ 0x08, 0x36, 0x41 }, /* 0x5B { */
|
||||
{ 0x00, 0x7f, 0x00 }, /* 0x5C | */
|
||||
{ 0x41, 0x36, 0x08 }, /* 0x5D } */
|
||||
{ 0x01, 0x01, 0x01 }, /* 0x5E ~ */
|
||||
{ 0x10, 0x28, 0x10 }, /* 0x5F 。 */
|
||||
{ 0x1f, 0x01, 0x01 }, /* 0x60 「 */
|
||||
{ 0x20, 0x20, 0x3e }, /* 0x61 」 */
|
||||
{ 0x10, 0x20, 0x00 }, /* 0x62 、 */
|
||||
{ 0x00, 0x08, 0x00 }, /* 0x63 ・ */
|
||||
{ 0x25, 0x15, 0x0f }, /* 0x64 ヲ */
|
||||
{ 0x24, 0x1c, 0x0c }, /* 0x65 ァ */
|
||||
{ 0x10, 0x38, 0x04 }, /* 0x66 ィ */
|
||||
{ 0x18, 0x0c, 0x38 }, /* 0x67 ゥ */
|
||||
{ 0x28, 0x38, 0x28 }, /* 0x68 ェ */
|
||||
{ 0x28, 0x18, 0x3c }, /* 0x69 ォ */
|
||||
{ 0x08, 0x3c, 0x18 }, /* 0x6A ャ */
|
||||
{ 0x28, 0x38, 0x20 }, /* 0x6B ュ */
|
||||
{ 0x24, 0x2c, 0x3c }, /* 0x6C ョ */
|
||||
{ 0x2c, 0x2c, 0x1c }, /* 0x6D ッ */
|
||||
{ 0x04, 0x08, 0x08 }, /* 0x6E ー */
|
||||
{ 0x21, 0x1d, 0x07 }, /* 0x6F ア */
|
||||
{ 0x08, 0x3c, 0x03 }, /* 0x70 イ */
|
||||
{ 0x06, 0x23, 0x1e }, /* 0x71 ウ */
|
||||
{ 0x22, 0x3e, 0x22 }, /* 0x72 エ */
|
||||
{ 0x12, 0x0a, 0x3f }, /* 0x73 オ */
|
||||
{ 0x32, 0x0f, 0x3e }, /* 0x74 カ */
|
||||
{ 0x0a, 0x3f, 0x0a }, /* 0x75 キ */
|
||||
{ 0x24, 0x13, 0x0e }, /* 0x76 ク */
|
||||
{ 0x27, 0x1e, 0x02 }, /* 0x77 ケ */
|
||||
{ 0x22, 0x22, 0x3e }, /* 0x78 コ */
|
||||
{ 0x27, 0x12, 0x0f }, /* 0x79 サ */
|
||||
{ 0x25, 0x25, 0x10 }, /* 0x7A シ */
|
||||
{ 0x21, 0x19, 0x27 }, /* 0x7B ス */
|
||||
{ 0x3f, 0x22, 0x2e }, /* 0x7C セ */
|
||||
{ 0x21, 0x16, 0x0f }, /* 0x7D ソ */
|
||||
{ 0x24, 0x1b, 0x0e }, /* 0x7E タ */
|
||||
{ 0x25, 0x1f, 0x05 }, /* 0x7F チ */
|
||||
{ 0x26, 0x26, 0x1e }, /* 0x80 ツ */
|
||||
{ 0x25, 0x1d, 0x05 }, /* 0x81 テ */
|
||||
{ 0x3f, 0x04, 0x08 }, /* 0x82 ト */
|
||||
{ 0x24, 0x1f, 0x04 }, /* 0x83 ナ */
|
||||
{ 0x20, 0x22, 0x22 }, /* 0x84 ニ */
|
||||
{ 0x25, 0x19, 0x27 }, /* 0x85 ヌ */
|
||||
{ 0x12, 0x3b, 0x16 }, /* 0x86 ネ */
|
||||
{ 0x20, 0x10, 0x0f }, /* 0x87 ノ */
|
||||
{ 0x3c, 0x01, 0x3e }, /* 0x88 ハ */
|
||||
{ 0x1f, 0x24, 0x24 }, /* 0x89 ヒ */
|
||||
{ 0x21, 0x11, 0x0f }, /* 0x8A フ */
|
||||
{ 0x0c, 0x03, 0x1c }, /* 0x8B ヘ */
|
||||
{ 0x1a, 0x3f, 0x1a }, /* 0x8C ホ */
|
||||
{ 0x09, 0x19, 0x27 }, /* 0x8D マ */
|
||||
{ 0x22, 0x2a, 0x2a }, /* 0x8E ミ */
|
||||
{ 0x38, 0x27, 0x30 }, /* 0x8F ム */
|
||||
{ 0x32, 0x0c, 0x13 }, /* 0x90 メ */
|
||||
{ 0x05, 0x3f, 0x25 }, /* 0x91 モ */
|
||||
{ 0x02, 0x3f, 0x0e }, /* 0x92 ヤ */
|
||||
{ 0x21, 0x3f, 0x20 }, /* 0x93 ユ */
|
||||
{ 0x25, 0x25, 0x3f }, /* 0x94 ヨ */
|
||||
{ 0x25, 0x25, 0x1d }, /* 0x95 ラ */
|
||||
{ 0x07, 0x20, 0x1f }, /* 0x96 リ */
|
||||
{ 0x3c, 0x3f, 0x20 }, /* 0x97 ル */
|
||||
{ 0x3f, 0x20, 0x10 }, /* 0x98 レ */
|
||||
{ 0x3e, 0x22, 0x3e }, /* 0x99 ロ */
|
||||
{ 0x23, 0x11, 0x0f }, /* 0x9A ワ */
|
||||
{ 0x21, 0x21, 0x18 }, /* 0x9B ン */
|
||||
{ 0x01, 0x00, 0x01 }, /* 0x9C ゙ */
|
||||
{ 0x02, 0x05, 0x02 }, /* 0x9D ゚ */
|
||||
};
|
||||
#define MISAKI_FONT_F2_H
|
||||
PROGMEM const uint8_t misaki_font_f2[ MISAKI_FONT_F2_SIZE + 1 ][ MISAKI_FONT_F2_W ] =
|
||||
{
|
||||
{ 0x75, 0x40, 0x77, 0x55, 0x75, 0x77, 0x40 }, /* 0x00 温 */
|
||||
{ 0x40, 0x3e, 0x4a, 0x5e, 0x2b, 0x5e, 0x4a }, /* 0x01 度 */
|
||||
{ 0x6b, 0x62, 0x7f, 0x35, 0x2f, 0x35, 0x7f }, /* 0x02 調 */
|
||||
{ 0x7c, 0x5b, 0x5e, 0x24, 0x7b, 0x0e, 0x3a }, /* 0x03 節 */
|
||||
{ 0x04, 0x7e, 0x01, 0x7e, 0x4a, 0x5e, 0x69 }, /* 0x04 低 */
|
||||
{ 0x06, 0x3a, 0x2f, 0x3f, 0x6b, 0x7e, 0x46 }, /* 0x05 電 */
|
||||
{ 0x40, 0x3f, 0x41, 0x49, 0x7f, 0x49, 0x41 }, /* 0x06 圧 */
|
||||
{ 0x02, 0x62, 0x6b, 0x6b, 0x6b, 0x62, 0x02 }, /* 0x07 言 */
|
||||
{ 0x6a, 0x6b, 0x14, 0x7d, 0x57, 0x7d, 0x10 }, /* 0x08 語 */
|
||||
{ 0x41, 0x3f, 0x55, 0x55, 0x3d, 0x57, 0x51 }, /* 0x09 戻 */
|
||||
{ 0x21, 0x3f, 0x2d, 0x7f, 0x2a, 0x12, 0x2e }, /* 0x0A 取 */
|
||||
{ 0x0a, 0x77, 0x5a, 0x50, 0x5a, 0x77, 0x0a }, /* 0x0B 替 */
|
||||
{ 0x20, 0x24, 0x13, 0x7d, 0x55, 0x53, 0x70 }, /* 0x0C 名 */
|
||||
{ 0x7a, 0x2a, 0x7b, 0x02, 0x1a, 0x43, 0x7a }, /* 0x0D 前 */
|
||||
{ 0x4a, 0x52, 0x5e, 0x2b, 0x5e, 0x42, 0x4a }, /* 0x0E 変 */
|
||||
{ 0x41, 0x5f, 0x35, 0x3f, 0x55, 0x5f, 0x41 }, /* 0x0F 更 */
|
||||
{ 0x7d, 0x14, 0x57, 0x7d, 0x0e, 0x40, 0x7f }, /* 0x10 削 */
|
||||
{ 0x7f, 0x1b, 0x54, 0x16, 0x7d, 0x16, 0x54 }, /* 0x11 除 */
|
||||
{ 0x49, 0x3a, 0x40, 0x7e, 0x57, 0x56, 0x76 }, /* 0x12 追 */
|
||||
{ 0x42, 0x3f, 0x42, 0x7e, 0x7e, 0x42, 0x7e }, /* 0x13 加 */
|
||||
{ 0x04, 0x7e, 0x51, 0x37, 0x7d, 0x37, 0x50 }, /* 0x14 保 */
|
||||
{ 0x12, 0x7a, 0x17, 0x52, 0x76, 0x1e, 0x12 }, /* 0x15 存 */
|
||||
{ 0x7f, 0x55, 0x7f, 0x14, 0x5d, 0x7f, 0x55 }, /* 0x16 睡 */
|
||||
{ 0x7f, 0x55, 0x7f, 0x7f, 0x55, 0x3d, 0x57 }, /* 0x17 眠 */
|
||||
{ 0x7f, 0x55, 0x37, 0x78, 0x17, 0x45, 0x7f }, /* 0x18 閉 */
|
||||
{ 0x7f, 0x2b, 0x7b, 0x28, 0x7b, 0x2b, 0x7f }, /* 0x19 開 */
|
||||
{ 0x1e, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x1e }, /* 0x1A 中 */
|
||||
{ 0x7f, 0x41, 0x6b, 0x7f, 0x6b, 0x51, 0x7f }, /* 0x1B 国 */
|
||||
{ 0x52, 0x5a, 0x57, 0x3a, 0x57, 0x5a, 0x52 }, /* 0x1C 英 */
|
||||
{ 0x00, 0x7f, 0x49, 0x49, 0x49, 0x49, 0x7f }, /* 0x1D 日 */
|
||||
{ 0x22, 0x12, 0x2a, 0x7f, 0x2a, 0x12, 0x22 }, /* 0x1E 本 */
|
||||
{ 0x16, 0x6a, 0x5e, 0x73, 0x56, 0x62, 0x16 }, /* 0x1F 密 */
|
||||
{ 0x09, 0x37, 0x31, 0x5f, 0x15, 0x5f, 0x75 }, /* 0x20 碼 */
|
||||
{ 0x42, 0x22, 0x1e, 0x0b, 0x4a, 0x7a, 0x02 }, /* 0x21 方 */
|
||||
{ 0x7e, 0x02, 0x3a, 0x2b, 0x3a, 0x42, 0x7e }, /* 0x22 向 */
|
||||
};
|
||||
/*
|
||||
プリセット
|
||||
温度調節
|
||||
タイマー
|
||||
コントロール
|
||||
スクリーン
|
||||
ブザー
|
||||
低電圧アラーム
|
||||
言語
|
||||
戻る
|
||||
取り替える
|
||||
キャリブレーション
|
||||
名前を変更
|
||||
削除
|
||||
追加
|
||||
保存
|
||||
デフォルト
|
||||
睡眠
|
||||
ブースト
|
||||
保存
|
||||
睡眠
|
||||
閉じる
|
||||
ブースト
|
||||
保存
|
||||
ダイレクト
|
||||
PID
|
||||
ビッグ
|
||||
ニュース
|
||||
閉じる
|
||||
開く
|
||||
いいえ、
|
||||
はい、
|
||||
中国語
|
||||
英語
|
||||
いいえ、
|
||||
はい、
|
||||
メインスクリーン
|
||||
フリップ
|
||||
保存
|
||||
アバウト
|
||||
日本語
|
||||
つまみ方向
|
||||
|
||||
汉字转换表:温度調節低電圧言語戻取替名前変更削除追加保存睡眠閉開中国英日本密碼
|
||||
*/
|
||||
const char JP_0[] PROGMEM = { 0xf0, 0xcc, 0xdf, 0xb0, 0xb8, 0xbd, };
|
||||
const char JP_1[] PROGMEM = { 0xf2, 0x00, 0x01, 0x02, 0x03, };
|
||||
const char JP_2[] PROGMEM = { 0xf0, 0xb4, 0x99, 0xd3, 0xee, };
|
||||
const char JP_3[] PROGMEM = { 0xf0, 0xa8, 0xe8, 0xbd, 0xe2, 0xee, 0xe0, };
|
||||
const char JP_4[] PROGMEM = { 0xf0, 0xae, 0xa4, 0xdf, 0xee, 0xe8, };
|
||||
const char JP_5[] PROGMEM = { 0xf0, 0xcb, 0xab, 0xee, };
|
||||
const char JP_6[] PROGMEM = { 0xf2, 0x04, 0x05, 0x06, 0xf0, 0x97, 0xde, 0xee, 0xd5, };
|
||||
const char JP_7[] PROGMEM = { 0xf2, 0x07, 0x08, };
|
||||
const char JP_8[] PROGMEM = { 0xf2, 0x09, 0xf0, 0x8d, };
|
||||
const char JP_9[] PROGMEM = { 0xf2, 0x0a, 0xf0, 0x8c, 0xf2, 0x0b, 0xf0, 0x4a, 0x8d, };
|
||||
const char JP_10[] PROGMEM = { 0xf0, 0xa2, 0xd8, 0xdf, 0xcb, 0xe1, 0xee, 0xac, 0xdc, 0xe8, };
|
||||
const char JP_11[] PROGMEM = { 0xf2, 0x0c, 0x0d, 0xf0, 0x94, 0xf2, 0x0e, 0x0f, };
|
||||
const char JP_12[] PROGMEM = { 0xf2, 0x10, 0x11, };
|
||||
const char JP_13[] PROGMEM = { 0xf2, 0x12, 0x13, };
|
||||
const char JP_14[] PROGMEM = { 0xf2, 0x14, 0x15, };
|
||||
const char JP_15[] PROGMEM = { 0xf0, 0xbc, 0xca, 0x9e, 0xe0, 0xbd, };
|
||||
const char JP_16[] PROGMEM = { 0xf2, 0x16, 0x17, };
|
||||
const char JP_17[] PROGMEM = { 0xf0, 0xcb, 0xee, 0xae, 0xbd, };
|
||||
const char JP_18[] PROGMEM = { 0xf2, 0x14, 0x15, };
|
||||
const char JP_19[] PROGMEM = { 0xf2, 0x16, 0x17, };
|
||||
const char JP_20[] PROGMEM = { 0xf2, 0x18, 0xf0, 0x5a, 0x8d, };
|
||||
const char JP_21[] PROGMEM = { 0xf0, 0xcb, 0xee, 0xae, 0xbd, };
|
||||
const char JP_22[] PROGMEM = { 0xf2, 0x14, 0x15, };
|
||||
const char JP_23[] PROGMEM = { 0xf0, 0xb5, 0x99, 0xe1, 0xa4, 0xbd, };
|
||||
const char JP_24[] PROGMEM = { 0xf1, 0x30, 0x29, 0x24, };
|
||||
const char JP_25[] PROGMEM = { 0xf0, 0xc8, 0xb8, 0xa5, };
|
||||
const char JP_26[] PROGMEM = { 0xf0, 0xc0, 0xda, 0xee, 0xae, };
|
||||
const char JP_27[] PROGMEM = { 0xf2, 0x18, 0xf0, 0x5a, 0x8d, };
|
||||
const char JP_28[] PROGMEM = { 0xf2, 0x19, 0xf0, 0x51, };
|
||||
const char JP_29[] PROGMEM = { 0xf0, 0x46, 0x46, 0x4a, 0x01, };
|
||||
const char JP_30[] PROGMEM = { 0xf0, 0x71, 0x46, 0x01, };
|
||||
const char JP_31[] PROGMEM = { 0xf2, 0x1a, 0x1b, 0x08, };
|
||||
const char JP_32[] PROGMEM = { 0xf2, 0x1c, 0x08, };
|
||||
const char JP_33[] PROGMEM = { 0xf0, 0x46, 0x46, 0x4a, 0x01, };
|
||||
const char JP_34[] PROGMEM = { 0xf0, 0x71, 0x46, 0x01, };
|
||||
const char JP_35[] PROGMEM = { 0xf0, 0xd6, 0x99, 0xe8, 0xae, 0xa4, 0xdf, 0xee, 0xe8, };
|
||||
const char JP_36[] PROGMEM = { 0xf0, 0xca, 0xdf, 0xb8, 0xcc, };
|
||||
const char JP_37[] PROGMEM = { 0xf2, 0x14, 0x15, };
|
||||
const char JP_38[] PROGMEM = { 0xf0, 0x97, 0xc5, 0x9b, 0xbd, };
|
||||
const char JP_39[] PROGMEM = { 0xf2, 0x1d, 0x1e, 0x08, };
|
||||
const char JP_40[] PROGMEM = { 0xf2, 0x1f, 0x20, }; //密码
|
||||
const char JP_41[] PROGMEM = { 0xf0, 0x66, 0x80, 0x81, 0xf2, 0x21, 0x22, }; //つまみ方向
|
||||
const char *const JP_table[] = {JP_0, JP_1, JP_2, JP_3, JP_4, JP_5, JP_41, JP_6, JP_40, JP_7, JP_38, JP_8, JP_9, JP_10, JP_11, JP_12, JP_13, JP_14, JP_15, JP_16, JP_17, JP_18, JP_19, JP_20, JP_21, JP_22, JP_23, JP_24, JP_25, JP_26, JP_27, JP_28, JP_29, JP_30, JP_31, JP_32, JP_39, JP_35, JP_36, JP_37,};
|
||||
const char JP_Length_table[] PROGMEM = {6, 5, 5, 7, 6, 4, 7, 9, 3, 3 , 5, 4, 9, 10, 8, 3, 3, 3, 6, 3, 5, 3, 3, 5, 5, 3, 6, 4, 4, 5, 5, 4, 5, 4, 4, 3, 4, 9, 5, 3,};
|
||||
#endif
|
||||
|
||||
/*
|
||||
8x8 dot Japanese font for Arduboy
|
||||
|
||||
Copyright (c) 2016 emutyworks
|
||||
|
||||
Released under the MIT license
|
||||
https://github.com/emutyworks/8x8DotJPFont/blob/master/LICENSE.txt
|
||||
*/
|
||||
#if LANG_JP_State
|
||||
void drawText(uint8_t x, uint8_t y, const uint8_t *mes, uint8_t cnt)
|
||||
{
|
||||
uint8_t pb;
|
||||
uint8_t page;
|
||||
uint8_t screen_start = 0;
|
||||
uint8_t screen_end = 128;
|
||||
|
||||
if (x < screen_start) {
|
||||
x = screen_start;
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < cnt; i++) {
|
||||
pb = pgm_read_byte_near(mes + i);
|
||||
|
||||
switch (pb) {
|
||||
case MISAKI_FONT_F0_PAGE:
|
||||
page = MISAKI_FONT_F0_PAGE;
|
||||
continue;
|
||||
case MISAKI_FONT_F1_PAGE:
|
||||
page = MISAKI_FONT_F1_PAGE;
|
||||
continue;
|
||||
case MISAKI_FONT_F2_PAGE:
|
||||
page = MISAKI_FONT_F2_PAGE;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!page) {
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (page) {
|
||||
#ifdef MISAKI_FONT_F0_H
|
||||
case MISAKI_FONT_F0_PAGE:
|
||||
if (pb > MISAKI_FONT_F0_SIZE) {
|
||||
continue;
|
||||
}
|
||||
if ((x + 8) > screen_end) {
|
||||
x = screen_start;
|
||||
y = y + 8;
|
||||
}
|
||||
arduboy.drawBitmap(x, y, misaki_font_f0[ pb ], MISAKI_FONT_F0_W, 8, WHITE);
|
||||
x = x + 8;
|
||||
break;
|
||||
#endif
|
||||
#ifdef MISAKI_FONT_F1_H
|
||||
case MISAKI_FONT_F1_PAGE:
|
||||
if (pb > MISAKI_FONT_F1_SIZE) {
|
||||
continue;
|
||||
}
|
||||
if ((x + 4) > screen_end) {
|
||||
x = screen_start;
|
||||
y = y + 8;
|
||||
}
|
||||
arduboy.drawBitmap(x, y, misaki_font_f1[ pb ], MISAKI_FONT_F1_W, 8, WHITE);
|
||||
arduboy.drawBitmap(x + 3, y, misaki_font_0x00, 1, 8, WHITE);
|
||||
x = x + 4;
|
||||
break;
|
||||
#endif
|
||||
#ifdef MISAKI_FONT_F2_H
|
||||
case MISAKI_FONT_F2_PAGE:
|
||||
if (pb > MISAKI_FONT_F2_SIZE) {
|
||||
continue;
|
||||
}
|
||||
if ((x + 8) > screen_end) {
|
||||
x = screen_start;
|
||||
y = y + 8;
|
||||
}
|
||||
arduboy.drawBitmap(x, y, misaki_font_f2[ pb ], MISAKI_FONT_F2_W, 8, WHITE);
|
||||
arduboy.drawBitmap(x + 7, y, misaki_font_0x00, 1, 8, WHITE);
|
||||
x = x + 8;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
//此片段用于DEBUG
|
||||
void HelpMeSerialer() {
|
||||
//串口助手
|
||||
if (Serial.available()) {
|
||||
char TmpChar = Serial.read();
|
||||
switch (TmpChar) {
|
||||
case 'x': x = Serial.parseInt();
|
||||
case 'y': y = Serial.parseInt();
|
||||
case 'a': a = Serial.parseInt();
|
||||
case 'b': b = Serial.parseInt();
|
||||
}
|
||||
}
|
||||
|
||||
Serial.println(String("X ->") + x);
|
||||
Serial.println(String("Y ->") + y);
|
||||
Serial.println(String("A ->") + a);
|
||||
Serial.println(String("B ->") + b);
|
||||
|
||||
}
|
||||
*/
|
@@ -0,0 +1,103 @@
|
||||
//********** 曲线拟合程序 **********
|
||||
//曲线拟合算法来至https://blog.csdn.net/m0_37362454/article/details/82456616 by欧阳小俊
|
||||
|
||||
/*==================polyfit(n,x,y,poly_n,a)===================*/
|
||||
/*=======拟合y=a0+a1*x+a2*x^2+……+apoly_n*x^poly_n========*/
|
||||
/*=====n是数据个数 xy是数据值 poly_n是多项式的项数======*/
|
||||
/*===返回a0,a1,a2,……a[poly_n],系数比项数多一(常数项)=====*/
|
||||
void polyfit(int n, int x[], int y[], int poly_n, float p[])
|
||||
{
|
||||
int i, j;
|
||||
float *tempx, *tempy, *sumxx, *sumxy, *ata;
|
||||
|
||||
tempx = (float *)calloc(n , sizeof(float));
|
||||
sumxx = (float *)calloc((poly_n * 2 + 1) , sizeof(float));
|
||||
tempy = (float *)calloc(n , sizeof(float));
|
||||
sumxy = (float *)calloc((poly_n + 1) , sizeof(float));
|
||||
ata = (float *)calloc( (poly_n + 1) * (poly_n + 1) , sizeof(float) );
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
tempx[i] = 1;
|
||||
tempy[i] = y[i];
|
||||
}
|
||||
for (i = 0; i < 2 * poly_n + 1; i++)
|
||||
{
|
||||
for (sumxx[i] = 0, j = 0; j < n; j++)
|
||||
{
|
||||
sumxx[i] += tempx[j];
|
||||
tempx[j] *= x[j];
|
||||
}
|
||||
}
|
||||
for (i = 0; i < poly_n + 1; i++)
|
||||
{
|
||||
for (sumxy[i] = 0, j = 0; j < n; j++)
|
||||
{
|
||||
sumxy[i] += tempy[j];
|
||||
tempy[j] *= x[j];
|
||||
}
|
||||
}
|
||||
for (i = 0; i < poly_n + 1; i++)
|
||||
{
|
||||
for (j = 0; j < poly_n + 1; j++)
|
||||
{
|
||||
ata[i * (poly_n + 1) + j] = sumxx[i + j];
|
||||
}
|
||||
}
|
||||
gauss_solve(poly_n + 1, ata, p, sumxy);
|
||||
|
||||
free(tempx);
|
||||
free(sumxx);
|
||||
free(tempy);
|
||||
free(sumxy);
|
||||
free(ata);
|
||||
}
|
||||
/*============================================================
|
||||
高斯消元法计算得到 n 次多项式的系数
|
||||
n: 系数的个数
|
||||
ata: 线性矩阵
|
||||
sumxy: 线性方程组的Y值
|
||||
p: 返回拟合的结果
|
||||
============================================================*/
|
||||
void gauss_solve(int n, float A[], float x[], float b[])
|
||||
{
|
||||
int i, j, k, r;
|
||||
float max;
|
||||
for (k = 0; k < n - 1; k++)
|
||||
{
|
||||
max = fabs(A[k * n + k]); // find maxmum
|
||||
r = k;
|
||||
for (i = k + 1; i < n - 1; i++)
|
||||
{
|
||||
if (max < fabs(A[i * n + i]))
|
||||
{
|
||||
max = fabs(A[i * n + i]);
|
||||
r = i;
|
||||
}
|
||||
}
|
||||
if (r != k)
|
||||
{
|
||||
for (i = 0; i < n; i++) //change array:A[k]&A[r]
|
||||
{
|
||||
max = A[k * n + i];
|
||||
A[k * n + i] = A[r * n + i];
|
||||
A[r * n + i] = max;
|
||||
}
|
||||
max = b[k]; //change array:b[k]&b[r]
|
||||
b[k] = b[r];
|
||||
b[r] = max;
|
||||
}
|
||||
|
||||
for (i = k + 1; i < n; i++)
|
||||
{
|
||||
for (j = k + 1; j < n; j++)
|
||||
A[i * n + j] -= A[i * n + k] * A[k * n + j] / A[k * n + k];
|
||||
b[i] -= A[i * n + k] * b[k] / A[k * n + k];
|
||||
}
|
||||
}
|
||||
|
||||
for (i = n - 1; i >= 0; x[i] /= A[i * n + i], i--)
|
||||
{
|
||||
for (j = i + 1, x[i] = b[i]; j < n; j++)
|
||||
x[i] -= A[i * n + j] * x[j];
|
||||
}
|
||||
}
|
@@ -0,0 +1,69 @@
|
||||
|
||||
// reads user settings from EEPROM; if EEPROM values are invalid, write defaults
|
||||
void getEEPROM() {
|
||||
uint16_t identifier = (EEPROM.read(0) << 8) | EEPROM.read(1);
|
||||
if (identifier == EEPROM_IDENT) {
|
||||
DefaultTemp = (EEPROM.read(2) << 8) | EEPROM.read(3);
|
||||
SleepTemp = (EEPROM.read(4) << 8) | EEPROM.read(5);
|
||||
BoostTemp = EEPROM.read(6);
|
||||
Time2sleep = EEPROM.read(7);
|
||||
Time2off = EEPROM.read(8);
|
||||
TimeOfBoost = EEPROM.read(9);
|
||||
MainScrType = EEPROM.read(10);
|
||||
PIDenable = EEPROM.read(11);
|
||||
BeepEnable = EEPROM.read(12);
|
||||
CurrentTip = EEPROM.read(13);
|
||||
NumberOfTips = EEPROM.read(14);
|
||||
LANG = EEPROM.read(15);
|
||||
FlipState = EEPROM.read(16);
|
||||
UnderVoltage = EEPROM.read(17);
|
||||
Password = (EEPROM.read(18) << 8) | EEPROM.read(19);
|
||||
RotaryD = EEPROM.read(20);
|
||||
uint8_t i, j;
|
||||
uint16_t Counter = 21;
|
||||
for (i = 0; i < NumberOfTips; i++) {
|
||||
for (j = 0; j < TIPNAMELENGTH; j++) {
|
||||
TipName[i][j] = EEPROM.read(Counter++);
|
||||
}
|
||||
//0 8 16 24
|
||||
for (j = 0; j < 4; j++) {
|
||||
EEPROM.get(Counter+=4,PTemp[i][j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
EEPROM.update(0, EEPROM_IDENT >> 8); EEPROM.update(1, EEPROM_IDENT & 0xFF);
|
||||
updateEEPROM();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// writes user settings to EEPROM using updade function to minimize write cycles
|
||||
void updateEEPROM() {
|
||||
EEPROM.update( 2, DefaultTemp >> 8);
|
||||
EEPROM.update( 3, DefaultTemp & 0xFF);
|
||||
EEPROM.update( 4, SleepTemp >> 8);
|
||||
EEPROM.update( 5, SleepTemp & 0xFF);
|
||||
EEPROM.update( 6, BoostTemp);
|
||||
EEPROM.update( 7, Time2sleep);
|
||||
EEPROM.update( 8, Time2off);
|
||||
EEPROM.update( 9, TimeOfBoost);
|
||||
EEPROM.update(10, MainScrType);
|
||||
EEPROM.update(11, PIDenable);
|
||||
EEPROM.update(12, BeepEnable);
|
||||
EEPROM.update(13, CurrentTip);
|
||||
EEPROM.update(14, NumberOfTips);
|
||||
EEPROM.update(15, LANG);
|
||||
EEPROM.update(16, FlipState);
|
||||
EEPROM.update(17, UnderVoltage);
|
||||
EEPROM.update(18, Password >> 8);
|
||||
EEPROM.update(19, Password & 0xFF);
|
||||
EEPROM.update(20, RotaryD);
|
||||
|
||||
uint8_t i, j;
|
||||
uint16_t Counter = 21;
|
||||
for (i = 0; i < NumberOfTips; i++) {
|
||||
for (j = 0; j < TIPNAMELENGTH; j++) EEPROM.update(Counter++, TipName[i][j]);
|
||||
for (j = 0; j < 4; j++) EEPROM.put(Counter+=4, PTemp[i][j]);
|
||||
}
|
||||
}
|
315
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/F.ino
Normal file
315
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/F.ino
Normal file
@@ -0,0 +1,315 @@
|
||||
|
||||
// reads current rotary encoder value
|
||||
int getRotary() {
|
||||
return (Count >> ROTARY_TYPE);
|
||||
}
|
||||
|
||||
//检查按键
|
||||
void CheckLastButton() {
|
||||
if (lastbutton && digitalRead(BUTTON_PIN)) {
|
||||
delay(10);
|
||||
lastbutton = false;
|
||||
}
|
||||
}
|
||||
//返回对应层数的对象数
|
||||
byte QueryMenuObject() {
|
||||
int SUM = 0;
|
||||
for (int i = 0; i < (MenuLevel); i++) SUM += Menu_table[i];
|
||||
return SUM;
|
||||
}
|
||||
|
||||
|
||||
// average several ADC readings in sleep mode to denoise
|
||||
uint16_t denoiseAnalog (byte port) {
|
||||
uint16_t result = 0;
|
||||
ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt
|
||||
if (port >= A0) port -= A0; // set port and
|
||||
ADMUX = (0x0F & port) | bit(REFS0); // reference to AVcc
|
||||
set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction
|
||||
for (uint8_t i = 0; i < 32; i++) { // get 32 readings
|
||||
sleep_mode(); // go to sleep while taking ADC sample
|
||||
while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed
|
||||
result += ADC; // add them up
|
||||
}
|
||||
bitClear (ADCSRA, ADEN); // disable ADC
|
||||
return (result >> 5); // devide by 32 and return value
|
||||
}
|
||||
|
||||
// get internal temperature by reading ADC channel 8 against 1.1V reference
|
||||
float getChipTemp() {
|
||||
uint16_t result = 0;
|
||||
ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt
|
||||
ADMUX = bit (REFS1) | bit (REFS0) | bit (MUX3); // set reference and mux
|
||||
delay(10); // wait for voltages to settle
|
||||
set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction
|
||||
for (uint8_t i = 0; i < 32; i++) { // get 32 readings
|
||||
sleep_mode(); // go to sleep while taking ADC sample
|
||||
while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed
|
||||
result += ADC; // add them up
|
||||
}
|
||||
bitClear (ADCSRA, ADEN); // disable ADC
|
||||
result >>= 2; // devide by 4
|
||||
return ((result - 2594) / 9.76); // calculate internal temperature in degrees C
|
||||
}
|
||||
|
||||
// get input voltage in mV by reading 1.1V reference against AVcc
|
||||
uint16_t getVCC() {
|
||||
uint16_t result = 0;
|
||||
ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt
|
||||
// set Vcc measurement against 1.1V reference
|
||||
ADMUX = bit (REFS0) | bit (MUX3) | bit (MUX2) | bit (MUX1);
|
||||
delay(1); // wait for voltages to settle
|
||||
set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction
|
||||
for (uint8_t i = 0; i < 16; i++) { // get 16 readings
|
||||
sleep_mode(); // go to sleep while taking ADC sample
|
||||
while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed
|
||||
result += ADC; // add them up
|
||||
}
|
||||
bitClear (ADCSRA, ADEN); // disable ADC
|
||||
result >>= 4; // devide by 16
|
||||
return (1125300L / result); // 1125300 = 1.1 * 1023 * 1000
|
||||
}
|
||||
|
||||
|
||||
// get supply voltage in mV
|
||||
uint16_t getVIN() {
|
||||
long result;
|
||||
result = denoiseAnalog (VIN_PIN); {
|
||||
if (result < 540) return (result * Vcc / 184.416 + 86.987);
|
||||
else if (result < 660) return (result * Vcc / 173.204 - 878.29);
|
||||
else if (result < 745) return (result * Vcc / 143.579 - 4875);
|
||||
else if (result < 781) return (result * Vcc / 119.109 - 10260);
|
||||
else if (result < 800) return (result * Vcc / 86.178 - 23013);
|
||||
else return (result * Vcc / 86.178 - 23113);
|
||||
} // read supply voltage via voltage divider
|
||||
//return (result * Vcc / 179.474); // 179.474 = 1023 * R13 / (R12 + R13)
|
||||
}
|
||||
|
||||
//ADC中断服务
|
||||
// ADC interrupt service routine
|
||||
EMPTY_INTERRUPT (ADC_vect); // nothing to be done here
|
||||
|
||||
//旋转编码器触发中断
|
||||
// Pin change interrupt service routine for rotary encoder
|
||||
ISR (PCINT0_vect) {
|
||||
uint8_t a = PINB & 1;
|
||||
uint8_t b = PIND >> 7 & 1;
|
||||
if (a != a0) { // A changed
|
||||
a0 = a;
|
||||
if (b != b0) { // B changed
|
||||
b0 = b;
|
||||
Count = constrain(Count + ((a == b) ? CountStep : -CountStep), CountMin, CountMax);
|
||||
if (ROTARY_TYPE && ((a == b) != ab0)) {
|
||||
Count = constrain(Count + ((a == b) ? CountStep : -CountStep), CountMin, CountMax);;
|
||||
}
|
||||
ab0 = (a == b);
|
||||
handleMoved = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//计算实际温度
|
||||
// calculates real temperature value according to ADC reading and calibration values
|
||||
void calculateTemp() {
|
||||
CurrentTemp = PTemp[CurrentTip][0] + RawTemp * PTemp[CurrentTip][1] + RawTemp * RawTemp * PTemp[CurrentTip][2] + RawTemp * RawTemp * RawTemp * PTemp[CurrentTip][3];
|
||||
}
|
||||
|
||||
/*
|
||||
* 温度控制
|
||||
* mode-> 0:以实际温度数值为基准 1:以ADC数值为基准(非PID模式)
|
||||
*/
|
||||
void Thermostat(bool mode) {
|
||||
// define Setpoint acoording to current working mode
|
||||
if (InOffMode) Setpoint = 0;
|
||||
else if (InSleepMode) Setpoint = SleepTemp;
|
||||
else if (InBoostMode) Setpoint = SetTemp + BoostTemp;
|
||||
else Setpoint = SetTemp;
|
||||
|
||||
// control the heater (PID or direct)
|
||||
if (!mode) {
|
||||
gap = abs(Setpoint - CurrentTemp);
|
||||
if (PIDenable) {
|
||||
Input = CurrentTemp;
|
||||
if (gap < 30) ctrl.SetTunings(consKp, consKi, consKd);
|
||||
else ctrl.SetTunings(aggKp, aggKi, aggKd);
|
||||
ctrl.Compute();
|
||||
} else {
|
||||
// turn on heater if current temperature is below setpoint
|
||||
if ((CurrentTemp + 0.5) < Setpoint) Output = 0; else Output = 255;
|
||||
}
|
||||
} else {
|
||||
gap = 0; //此模式下不计算温度差
|
||||
if ((RawTemp + 0.5) < Setpoint) Output = 0; else Output = 255;
|
||||
}
|
||||
// set heater PWM
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 255 - Output);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, Output);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// creates a short beep on the buzzer
|
||||
void beep() {
|
||||
//体谅一下,没内存了,只能用原始的办法驱动无源蜂鸣器,否则我也不想牺牲宝贵响应资源换内存
|
||||
if (BeepEnable) {
|
||||
for (uint8_t i = 0; i < 255; i++) {
|
||||
digitalWrite(BUZZER_PIN, HIGH);
|
||||
delayMicroseconds(125);
|
||||
digitalWrite(BUZZER_PIN, LOW);
|
||||
delayMicroseconds(125);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//设置旋转编码器的起始值
|
||||
// sets start values for rotary encoder
|
||||
void setRotary(int rmin, int rmax, int rstep, int rvalue) {
|
||||
CountMin = rmin << ROTARY_TYPE;
|
||||
CountMax = rmax << ROTARY_TYPE;
|
||||
if (RotaryD) CountStep = rstep; else CountStep = -rstep;
|
||||
Count = rvalue << ROTARY_TYPE;
|
||||
}
|
||||
|
||||
// reads temperature, vibration switch and supply voltages
|
||||
void SENSORCheck() {
|
||||
// shut off heater in order to measure temperature
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 0);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, 255);
|
||||
#endif
|
||||
delayMicroseconds(Time2settle); // wait for voltage to settle
|
||||
|
||||
uint16_t temp = denoiseAnalog(SENSOR_PIN); // read ADC value for temperature
|
||||
uint8_t d = digitalRead(SWITCH_PIN); // check handle vibration switch
|
||||
if (d != d0) {
|
||||
handleMoved = true; // set flag if handle was moved
|
||||
d0 = d;
|
||||
}
|
||||
if (! SensorCounter--) Vin = getVIN(); // get Vin every now and then
|
||||
|
||||
// turn on again heater
|
||||
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 255 - Output);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, Output);
|
||||
#endif
|
||||
|
||||
|
||||
RawTemp += (temp - RawTemp) * SMOOTHIE; // stabilize ADC temperature reading
|
||||
calculateTemp();
|
||||
|
||||
// stabilize displayed temperature when around setpoint
|
||||
if ((ShowTemp != Setpoint) || (abs(ShowTemp - CurrentTemp) > 5)) ShowTemp = CurrentTemp;
|
||||
if (abs(ShowTemp - Setpoint) <= 1) ShowTemp = Setpoint;
|
||||
// set state variable if temperature is in working range; beep if working temperature was just reached
|
||||
gap = abs(SetTemp - CurrentTemp);
|
||||
if (gap < 10) {
|
||||
if (!IsWorky && BeepIfWorky) beep();
|
||||
IsWorky = true;
|
||||
BeepIfWorky = false;
|
||||
} else {
|
||||
IsWorky = false;
|
||||
BeepIfWorky = true;
|
||||
}
|
||||
// checks if tip is present or currently inserted
|
||||
if (ShowTemp > 500) TipIsPresent = false; // tip removed ?
|
||||
if (!TipIsPresent && (ShowTemp < 500)) { // new tip inserted ?
|
||||
//关闭加热
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 0);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, 255);
|
||||
#endif
|
||||
beep(); // beep for info
|
||||
TipIsPresent = true; // tip is present now
|
||||
ChangeTipScreen(); // show tip selection screen
|
||||
updateEEPROM(); // update setting in EEPROM
|
||||
handleMoved = true; // reset all timers
|
||||
RawTemp = denoiseAnalog(SENSOR_PIN); // restart temp smooth algorithm
|
||||
c0 = LOW; // switch must be released
|
||||
setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, SetTemp); // reset rotary encoder
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// check rotary encoder; set temperature, toggle boost mode, enter setup menu accordingly
|
||||
void ROTARYCheck() {
|
||||
// set working temperature according to rotary encoder value
|
||||
SetTemp = getRotary();
|
||||
|
||||
// check rotary encoder switch
|
||||
uint8_t c = digitalRead(BUTTON_PIN);
|
||||
if ( !c && c0 ) {
|
||||
beep();
|
||||
Buttonmillis = millis();
|
||||
while ( (!digitalRead(BUTTON_PIN)) && ((millis() - Buttonmillis) < 500) );
|
||||
if ((millis() - Buttonmillis) >= 500) SetupScreen();
|
||||
else {
|
||||
InBoostMode = !InBoostMode;
|
||||
if (InBoostMode) Boostmillis = millis();
|
||||
handleMoved = true;
|
||||
}
|
||||
}
|
||||
c0 = c;
|
||||
|
||||
// check timer when in boost mode
|
||||
if (InBoostMode && TimeOfBoost) {
|
||||
GoneSeconds = (millis() - Boostmillis) / 1000;
|
||||
if (GoneSeconds >= TimeOfBoost) {
|
||||
InBoostMode = false; // stop boost mode
|
||||
beep(); // beep if boost mode is over
|
||||
BeepIfWorky = true; // beep again when working temperature is reached
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// check and activate/deactivate sleep modes
|
||||
void SLEEPCheck() {
|
||||
if (handleMoved) { // if handle was moved
|
||||
if (InSleepMode) { // in sleep or off mode?
|
||||
if ((CurrentTemp + 20) < SetTemp) // if temp is well below setpoint
|
||||
|
||||
// then start the heater right now
|
||||
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 255);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, 0);
|
||||
#endif
|
||||
|
||||
beep(); // beep on wake-up
|
||||
BeepIfWorky = true; // beep again when working temperature is reached
|
||||
}
|
||||
handleMoved = false; // reset handleMoved flag
|
||||
InSleepMode = false; // reset sleep flag
|
||||
InOffMode = false; // reset off flag
|
||||
Sleepmillis = millis(); // reset sleep timer
|
||||
}
|
||||
|
||||
// check time passed since the handle was moved
|
||||
GoneMinutes = (millis() - Sleepmillis) / 60000;
|
||||
if ( (!InSleepMode) && (Time2sleep > 0) && (GoneMinutes >= Time2sleep) ) {
|
||||
InSleepMode = true;
|
||||
beep();
|
||||
}
|
||||
if ( (!InOffMode) && (Time2off > 0) && (GoneMinutes >= Time2off ) ) {
|
||||
InOffMode = true;
|
||||
beep();
|
||||
}
|
||||
}
|
||||
|
||||
void SetOLEDLightLevel(uint8_t level) {
|
||||
arduboy.sendLCDCommand(0x81); //向SSD1306发送指令:设置内部电阻微调
|
||||
arduboy.sendLCDCommand(level); //微调范围(0-255)
|
||||
}
|
||||
|
||||
ISR(WDT_vect) //WDT中断,8秒一次
|
||||
{
|
||||
WDTCSR |= _BV(WDIE);
|
||||
}
|
710
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/GUI.ino
Normal file
710
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t6/GUI.ino
Normal file
@@ -0,0 +1,710 @@
|
||||
|
||||
// draws the main screen
|
||||
void MainScreen() {
|
||||
if (!(arduboy.nextFrame())) //帧率锁
|
||||
return;
|
||||
//状态
|
||||
byte SysState;
|
||||
if (ShowTemp > 500) SysState = 0;
|
||||
else if (InOffMode) {
|
||||
SysState = 1;
|
||||
DrawIntensiveComputing();
|
||||
} else if (InSleepMode) SysState = 2;
|
||||
else if (InBoostMode) SysState = 3;
|
||||
else if (IsWorky) SysState = 4;
|
||||
else if (Output < 180) SysState = 5;
|
||||
else SysState = 6;
|
||||
if (SysState != 1) {
|
||||
if (MainScrType) {
|
||||
//arduboy.invert(0);
|
||||
arduboy.clear();
|
||||
//详细信息页
|
||||
arduboy.fillRect(0, 0, 128, 64, 1); //白底
|
||||
arduboy.setTextSize(1);
|
||||
SetTextColor(0);
|
||||
//预设名
|
||||
//arduboy.drawSlowXYBitmap(0, 0, Tag, 16, 16, 0);
|
||||
arduboy.setCursor(7, 4); arduboy.print(TipName[CurrentTip]);
|
||||
//显示状态
|
||||
arduboy.setCursor(53, 1);
|
||||
arduboy.setTextSize(2);
|
||||
switch (LANG) {
|
||||
case 0: arduboy.drawSlowXYBitmap(95, 1, S_table[SysState], 28, 14, 0); break; //中文 Chinese
|
||||
default: //英文 English
|
||||
switch (SysState) {
|
||||
case 1: arduboy.print(F("OFF")); break;
|
||||
case 2: arduboy.print(F("SLEEP")); break;
|
||||
case 3: arduboy.print(F("BOOST")); break;
|
||||
case 4: arduboy.print(F("WORKY")); break;
|
||||
case 5: arduboy.print(F("HEAT")); break;
|
||||
case 6: arduboy.print(F("HOLD")); break;
|
||||
default: arduboy.print(F("ERROR")); break;
|
||||
} break;
|
||||
}
|
||||
|
||||
//运行状态图标
|
||||
arduboy.drawSlowXYBitmap(74, 1, C_table[SysState], 14, 14, 0);
|
||||
arduboy.setTextSize(1);
|
||||
|
||||
//显示探头温度
|
||||
DrawNumRect(0, 15, 5, ShowTemp);
|
||||
|
||||
//状态条
|
||||
DrawStatusBar(0);
|
||||
|
||||
//状态图标 以及 信息
|
||||
//自动报警-图标闪烁
|
||||
if (getChipTemp() < 80 || ((millis() * 4) / 1000) % 2) {
|
||||
arduboy.setCursor(91, 20); arduboy.print(getChipTemp(), 1); arduboy.print((char)248); arduboy.print(F("C")); //芯片温度
|
||||
arduboy.drawSlowXYBitmap(42, 1, Chip, 14, 14, 0);
|
||||
}
|
||||
if ((float)Vin / 100 > UnderVoltage || ((millis() * 4) / 1000) % 2) {
|
||||
arduboy.setCursor(91, 28); arduboy.print((float)getVIN() / 1000, 2); arduboy.print(F("V")); //输入电压
|
||||
arduboy.drawSlowXYBitmap(58, 1, Lightning, 14, 14, 0);
|
||||
}
|
||||
arduboy.setCursor(91, 36); arduboy.print((float)getVCC() / 1000, 3); arduboy.print(F("V")); //芯片电压
|
||||
arduboy.setCursor(91, 44); arduboy.print(RawTemp, 0); //烙铁头热偶原始数据
|
||||
|
||||
|
||||
|
||||
|
||||
arduboy.display();
|
||||
//警报声
|
||||
if (getChipTemp() > 80 && ((millis() * 4) / 1000) % 2 || (float)Vin / 100 < UnderVoltage && ((millis() * 4) / 1000) % 2) beep();
|
||||
} else {
|
||||
//arduboy.invert(1);
|
||||
arduboy.setTextSize(6);
|
||||
SetTextColor(1);
|
||||
arduboy.clear();
|
||||
if (getChipTemp() > 80 && ((millis() * 4) / 1000) % 2) beep();
|
||||
if ((float)Vin / 100 < UnderVoltage && ((millis() * 4) / 1000) % 2) beep();
|
||||
arduboy.setCursor(12, 2);
|
||||
|
||||
if (ShowTemp > 500) arduboy.print(999); else arduboy.print(ShowTemp);
|
||||
DrawStatusBar(1);
|
||||
arduboy.display();
|
||||
}
|
||||
}
|
||||
}
|
||||
void DrawNumRect(byte x, byte y, byte size, int n) {
|
||||
arduboy.setCursor(3 + x, 3 + y);
|
||||
arduboy.setTextSize(size);
|
||||
if (ShowTemp > 500) arduboy.print(F("000")); else arduboy.print(n);
|
||||
arduboy.drawRect(1 + x, 1 + y, 89, 39, 0);
|
||||
}
|
||||
|
||||
//绘制状态条
|
||||
void DrawStatusBar(bool color) {
|
||||
SetTextColor(color);
|
||||
arduboy.setTextSize(1);
|
||||
//温度条
|
||||
//框
|
||||
arduboy.drawRect(1, 54, 102, 9, color);
|
||||
//条
|
||||
if (ShowTemp <= 500) arduboy.fillRect(1, 54, map(ShowTemp, 0, 500, 2, 102), 9, color);
|
||||
//指示部分
|
||||
arduboy.fillRect(map(Setpoint, 0, 500, 2, 102) - 2, 55, 3, 7, color);
|
||||
//先来个白底
|
||||
arduboy.fillRect(map(Setpoint, 0, 500, 2, 102) - 3, 63, 5, 1, color);
|
||||
arduboy.drawLine(map(Setpoint, 0, 500, 2, 102) - 1, 63, map(Setpoint, 0, 500, 2, 102) - 1, 54, !color);
|
||||
|
||||
//画指示针
|
||||
arduboy.drawSlowXYBitmap(map(Setpoint, 0, 500, 2, 102) - 3, 59, Pointer, 5, 4, !color);
|
||||
|
||||
//功率条
|
||||
arduboy.drawRect(104, 54, 23, 9, color);
|
||||
arduboy.fillRect(104, 54, map(Output, 255, 0, 0, 23), 9, color);
|
||||
|
||||
SetTextColor(!color);
|
||||
//////////////进入反色////////////////////////////////
|
||||
arduboy.setCursor(2, 55); arduboy.print(Setpoint, 0);//探头预设温度
|
||||
arduboy.setCursor(105, 55); arduboy.print(map(Output, 255, 0, 0, 100)); arduboy.print(F("%")); //功率百分比
|
||||
SetTextColor(color);
|
||||
}
|
||||
|
||||
//设置画笔颜色
|
||||
void SetTextColor(bool color) {
|
||||
arduboy.setTextBackground(!color);
|
||||
arduboy.setTextColor(color);
|
||||
}
|
||||
|
||||
|
||||
// setup screen
|
||||
void SetupScreen() {
|
||||
//关闭加热
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 0);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, 255);
|
||||
#endif
|
||||
beep();
|
||||
uint16_t SaveSetTemp = SetTemp;
|
||||
uint8_t selection = 0;
|
||||
bool repeat = true;
|
||||
|
||||
while (repeat) {
|
||||
//arduboy.invert(0);
|
||||
MenuLevel = 0; //默认打开主菜单
|
||||
selection = MenuScreen(selection);
|
||||
switch (selection) {
|
||||
case 0: MenuLevel = 1; TipScreen(); repeat = false; break;
|
||||
case 1: MenuLevel = 2; TempScreen(); break;
|
||||
case 2: MenuLevel = 3; TimerScreen(); break;
|
||||
case 3: MenuLevel = 4; PIDenable = MenuScreen(PIDenable); break;
|
||||
case 4: ScreenSet(); break;
|
||||
case 5: MenuLevel = 6; BeepEnable = MenuScreen(BeepEnable); break;
|
||||
case 6: RotarySet(); break;
|
||||
case 7: UnderVoltageSet(); break;
|
||||
case 8: PasswordSet(); break;
|
||||
case 9: MenuLevel = 8; LANG = MenuScreen(LANG); if (LANG == 2 && !LANG_JP_State) LANG = 1; break;
|
||||
case 10: QRcodeScreen(); break;
|
||||
default: repeat = false; break;
|
||||
}
|
||||
}
|
||||
updateEEPROM();
|
||||
handleMoved = true;
|
||||
SetTemp = SaveSetTemp;
|
||||
setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, SetTemp);
|
||||
}
|
||||
|
||||
//设置滚轮方向
|
||||
void RotarySet() {
|
||||
bool Exit = false;
|
||||
float rad;
|
||||
byte ExitBar = 0;
|
||||
bool color = 0;
|
||||
SetTextColor(!color);
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
setRotary(60, 420, 18, 240);
|
||||
do {
|
||||
arduboy.setTextSize(1);
|
||||
Setpoint = getRotary();
|
||||
ShowTemp = Setpoint;
|
||||
|
||||
arduboy.clear();
|
||||
|
||||
arduboy.fillRect(0, 0, 128, 64, color);
|
||||
|
||||
//仪表盘
|
||||
arduboy.fillCircle(24 + 12 * cos(rad), 24 - 12 * sin(rad), 5, !color);
|
||||
arduboy.drawCircle(24, 24, 20, !color);
|
||||
|
||||
//右上角的模式提示文本
|
||||
arduboy.setCursor(55, 1);
|
||||
arduboy.setTextSize(2);
|
||||
arduboy.print(F("MODE "));
|
||||
if (RotaryD) {
|
||||
arduboy.print(F("-"));
|
||||
rad = ((Setpoint - 60) / 360.0) * (2 * PI) - PI / 2;
|
||||
} else {
|
||||
arduboy.print(F("+"));
|
||||
rad = ((-Setpoint - 60) / 360.0) * (2 * PI) + PI * 1 / 6;
|
||||
}
|
||||
//右侧数字显示
|
||||
DrawNumRect(55, 18, 4, ShowTemp);
|
||||
//下端的状态条
|
||||
DrawStatusBar(!color);
|
||||
//退出条
|
||||
arduboy.fillRect(0, 0, ExitBar, 4, !color);
|
||||
arduboy.display();
|
||||
CheckLastButton();
|
||||
if (!digitalRead(BUTTON_PIN) && !lastbutton) {
|
||||
ExitBar += 8;
|
||||
arduboy.display();
|
||||
if (ExitBar > 127) Exit = true;
|
||||
} else {
|
||||
if (ExitBar > 1 && ExitBar < 64) {
|
||||
RotaryD = !RotaryD;
|
||||
setRotary(60, 420, 18, 240);
|
||||
beep();
|
||||
}
|
||||
ExitBar = 0;
|
||||
}
|
||||
|
||||
} while (!Exit);
|
||||
beep(); beep();
|
||||
}
|
||||
//显示设置菜单
|
||||
// tip settings screen
|
||||
void ScreenSet() {
|
||||
uint8_t selection = 0;
|
||||
bool repeat = true;
|
||||
while (repeat) {
|
||||
MenuLevel = 9;
|
||||
selection = MenuScreen(selection);
|
||||
switch (selection) {
|
||||
case 0: MenuLevel = 5; MainScrType = MenuScreen(MainScrType); break;
|
||||
case 1: FlipState = !FlipState; break;
|
||||
default: repeat = false; break;
|
||||
}
|
||||
Flip(FlipState); //设置屏幕反转状态
|
||||
}
|
||||
updateEEPROM();
|
||||
}
|
||||
|
||||
//预设设置菜单
|
||||
// tip settings screen
|
||||
void TipScreen() {
|
||||
uint8_t selection = 0;
|
||||
bool repeat = true;
|
||||
while (repeat) {
|
||||
MenuLevel = 1;
|
||||
selection = MenuScreen(selection);
|
||||
switch (selection) {
|
||||
case 0: ChangeTipScreen(); break;
|
||||
case 1: CalibrationScreen(); break;
|
||||
case 2: InputNameScreen(); break;
|
||||
case 3: DeleteTipScreen(); break;
|
||||
case 4: AddTipScreen(); break;
|
||||
default: repeat = false; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//温控设置菜单
|
||||
// temperature settings screen
|
||||
void TempScreen() {
|
||||
uint8_t selection = 0;
|
||||
bool repeat = true;
|
||||
while (repeat) {
|
||||
selection = MenuScreen(selection);
|
||||
switch (selection) {
|
||||
case 0: setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, DefaultTemp);
|
||||
DefaultTemp = InputScreen(18); break;
|
||||
case 1: setRotary(20, 200, TEMP_STEP, SleepTemp);
|
||||
SleepTemp = InputScreen(19); break;
|
||||
case 2: setRotary(10, 100, TEMP_STEP, BoostTemp);
|
||||
BoostTemp = InputScreen(20); break;
|
||||
default: repeat = false; break;
|
||||
}
|
||||
}
|
||||
updateEEPROM();
|
||||
}
|
||||
|
||||
|
||||
//定时器设置菜单
|
||||
// timer settings screen
|
||||
void TimerScreen() {
|
||||
uint8_t selection = 0;
|
||||
bool repeat = true;
|
||||
while (repeat) {
|
||||
selection = MenuScreen(selection);
|
||||
switch (selection) {
|
||||
case 0: setRotary(0, 30, 1, Time2sleep);
|
||||
Time2sleep = InputScreen(22); break;
|
||||
case 1: setRotary(0, 60, 5, Time2off);
|
||||
Time2off = InputScreen(23); break;
|
||||
case 2: setRotary(0, 180, 10, TimeOfBoost);
|
||||
TimeOfBoost = InputScreen(24); break;
|
||||
default: repeat = false; break;
|
||||
}
|
||||
}
|
||||
updateEEPROM();
|
||||
}
|
||||
//英语支持
|
||||
//i-文本id c-居中
|
||||
void Print_EN(byte i) {
|
||||
char buffer[11];
|
||||
byte a = 0;
|
||||
strcpy_P(buffer, (char *)pgm_read_word(&(EN_table[i])));
|
||||
while (1) {
|
||||
if (buffer[a] != '\0') a++; else break;
|
||||
}
|
||||
arduboy.setCursor((128 - a * 6) / 2, 52);
|
||||
arduboy.print(buffer);
|
||||
}
|
||||
//菜单界面
|
||||
// menu screen
|
||||
uint8_t MenuScreen(uint8_t selected) {
|
||||
int SlidingAnimationX;
|
||||
uint8_t lastselected = selected;
|
||||
setRotary(0, Menu_table[MenuLevel] - 1, 1, selected);
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
SetTextColor(1);
|
||||
do {
|
||||
selected = getRotary();
|
||||
//非线性滑动动画
|
||||
SlidingAnimationX += (selected - lastselected) * 56;
|
||||
if (SlidingAnimationX != 0) SlidingAnimationX += 0.55 * (-SlidingAnimationX);
|
||||
lastselected = selected;
|
||||
arduboy.clear();
|
||||
//绘制图标 如果有指定的话
|
||||
for (byte i = 0; i < 5; i++) if (selected - 2 + i >= 0 && selected - 2 + i < Menu_table[MenuLevel]) DrawApp(-72 + i * 56 + SlidingAnimationX, selected - 2 + i + QueryMenuObject());
|
||||
DrawAppText(selected + QueryMenuObject());
|
||||
|
||||
arduboy.display();
|
||||
CheckLastButton();
|
||||
//beep(0);
|
||||
} while (digitalRead(BUTTON_PIN) || lastbutton);
|
||||
beep();
|
||||
return selected;
|
||||
}
|
||||
|
||||
//显示APP图标
|
||||
void DrawApp(int x, byte appID) {
|
||||
DrawUIFrame(x, 0, 1);
|
||||
drawSlowXYBitmapResize(x + 3, 3, Ico_table[appID], 14, 14, 3, 1);
|
||||
}
|
||||
|
||||
//显示APP对应的文本
|
||||
void DrawAppText(byte appID) {
|
||||
// arduboy.setCursor(0, 55); arduboy.print(appID);
|
||||
if (LANG == 0) arduboy.drawSlowXYBitmap(48, 48, CN_table[appID], 36, 16, 1); else if (LANG == 2 && LANG_JP_State) {
|
||||
#if LANG_JP_State
|
||||
drawText(48, 52, JP_table[appID], pgm_read_byte(&(JP_Length_table[appID])));
|
||||
#endif
|
||||
} else {
|
||||
arduboy.setCursor(48, 52);
|
||||
arduboy.setTextSize(1);
|
||||
Print_EN(appID);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawUIFrame(int x, int y, bool color) {
|
||||
arduboy.fillRect(x, y, 48, 48, color);
|
||||
arduboy.fillRect(x + 3, y + 3, 42, 42, !color); //雕空
|
||||
DrawPoint(x, y, 0);
|
||||
DrawPoint(x + 47, y, 0);
|
||||
DrawPoint(x, y + 47, 0);
|
||||
DrawPoint(x + 47, y + 47, 0);
|
||||
}
|
||||
|
||||
void DrawPoint(int x, int y, bool color) {
|
||||
arduboy.drawPixel(x + 1, y, color);
|
||||
arduboy.drawPixel(x - 1, y, color);
|
||||
arduboy.drawPixel(x, y + 1, color);
|
||||
arduboy.drawPixel(x, y - 1, color);
|
||||
arduboy.drawPixel(x, y, color);
|
||||
}
|
||||
|
||||
//FP 密集运算屏保
|
||||
void DrawIntensiveComputing() {
|
||||
//关闭加热
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 0);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, 255);
|
||||
#endif
|
||||
float calculate;
|
||||
// while (1) {
|
||||
arduboy.clear();
|
||||
|
||||
//随机线条
|
||||
DrawIntensiveComputingLine();
|
||||
|
||||
calculate = sin(millis() / 4000.0);
|
||||
//模拟噪点
|
||||
for (int i = 0; i < calculate * 256 + 256; i++) arduboy.drawPixel(random(0, 128), random(0, 64), 1);
|
||||
//声效
|
||||
if ((BeepEnable)) analogWrite(BUZZER_PIN, 64 + calculate * 64 + random(-8, 8));
|
||||
//if ((BeepEnable)) tone(BUZZER_PIN, int(calculate * 300) + 500 + random(-50, 50)); //没必要浪费内存
|
||||
|
||||
arduboy.display();
|
||||
//delay(60-calculate*30);
|
||||
//}
|
||||
}
|
||||
//绘制屏保-密集运算线条
|
||||
void DrawIntensiveComputingLine() {
|
||||
for (byte a = 0; a < 4; a++) {
|
||||
Line[a] += random(-1, 1);
|
||||
if (Line[a] > 128) Line[a] -= 128;
|
||||
for (byte b = 0; b < random(3, 6); b++) {
|
||||
arduboy.drawFastHLine(0, Line[a] + random(-10, 10), 128, 1); //水平线
|
||||
arduboy.drawFastVLine(Line[a] + random(-10, 10), 0, 64, 1); //垂直线
|
||||
}
|
||||
}
|
||||
}
|
||||
//模拟数字滚轮 Numerical scrolling effect
|
||||
void DisplayNum(int Num) {
|
||||
arduboy.setTextSize(6);
|
||||
SetTextColor(0);
|
||||
//数字滚轮
|
||||
for (byte i = 0; i < 3; i++) LastValue[i] = int(Value / pow(10, 2 - i)) % 10;
|
||||
Value = Num;
|
||||
for (byte i = 0; i < 3; i++) {
|
||||
SlidingAnimationY[i] += ((int(Value / pow(10, 2 - i)) % 10) - LastValue[i]) * 50;
|
||||
if (SlidingAnimationY[i] != 0) SlidingAnimationY[i] += 0.8 * (-SlidingAnimationY[i]);
|
||||
arduboy.fillRect(0 + i * 44, 0, 38, 50, 1); //白底
|
||||
for (int ii = -1; ii < 2; ii++) {
|
||||
arduboy.setCursor(4 + i * 44, 4 - SlidingAnimationY[i] + ii * 50);
|
||||
arduboy.print(LastValue[i] + ii);
|
||||
}
|
||||
}
|
||||
//刻度标
|
||||
arduboy.fillRect(0, 0, 128, 2, 0); //上遮罩层
|
||||
arduboy.fillRect(0, 48, 128, 16, 0); //下遮罩层
|
||||
}
|
||||
|
||||
//数值输入界面
|
||||
// input value screen
|
||||
uint16_t InputScreen(byte appID) {
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
do {
|
||||
arduboy.clear();
|
||||
DisplayNum(getRotary());
|
||||
DrawAppText(appID);
|
||||
arduboy.display();
|
||||
CheckLastButton();
|
||||
} while (digitalRead(BUTTON_PIN) || lastbutton);
|
||||
beep();
|
||||
return Value;
|
||||
}
|
||||
|
||||
//设置开机密码
|
||||
void PasswordSet() {
|
||||
Password = InputBigNum(Password, 8);
|
||||
beep();
|
||||
}
|
||||
|
||||
void BootPassword() {
|
||||
if (Password != 0) {
|
||||
do {
|
||||
arduboy.clear();
|
||||
DrawApp(40, 8);
|
||||
DrawAppText(8);
|
||||
arduboy.display();
|
||||
delay(1000);
|
||||
beep(); beep(); beep();
|
||||
} while (InputBigNum(0, 8) != Password);
|
||||
}
|
||||
}
|
||||
|
||||
//欠压报警设置
|
||||
// information display screen
|
||||
void UnderVoltageSet() {
|
||||
setRotary(0, 250, 1, UnderVoltage);
|
||||
UnderVoltage = InputScreen(7);
|
||||
beep();
|
||||
}
|
||||
|
||||
|
||||
//更换烙铁头预设界面
|
||||
// change tip screen
|
||||
void ChangeTipScreen() {
|
||||
uint8_t selected = CurrentTip;
|
||||
uint8_t lastselected = selected;
|
||||
int8_t arrow = 0;
|
||||
if (selected) arrow = 1;
|
||||
setRotary(0, NumberOfTips - 1, 1, selected);
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
do {
|
||||
//beep(0);
|
||||
arduboy.clear();
|
||||
selected = getRotary();
|
||||
arrow = constrain(arrow + selected - lastselected, 0, 2);
|
||||
lastselected = selected;
|
||||
SetTextColor(0);
|
||||
arduboy.setTextSize(2);
|
||||
arduboy.setCursor(0, 0); arduboy.print(F("Select Tip"));
|
||||
SetTextColor(1);
|
||||
arduboy.setCursor(0, 16 * (arrow + 1)); arduboy.print(F(">"));
|
||||
for (uint8_t i = 0; i < 3; i++) {
|
||||
uint8_t drawnumber = selected + i - arrow;
|
||||
if (drawnumber < NumberOfTips) {
|
||||
arduboy.setCursor(12, 16 * (i + 1)); arduboy.print(TipName[selected + i - arrow]);
|
||||
}
|
||||
}
|
||||
CheckLastButton();
|
||||
arduboy.display();
|
||||
} while (digitalRead(BUTTON_PIN) || lastbutton);
|
||||
|
||||
beep();
|
||||
CurrentTip = selected;
|
||||
beep();
|
||||
ShowPTemp(&PTemp[CurrentTip][0]);
|
||||
|
||||
|
||||
}
|
||||
|
||||
//温度校准界面
|
||||
// temperature calibration screen
|
||||
void CalibrationScreen() {
|
||||
float P[4];
|
||||
int xx[9];
|
||||
for (int CalStep = 0; CalStep < 9; CalStep++) {
|
||||
if (CalStep != 0) setRotary(0, 1023, 1, xx[CalStep - 1]); else setRotary(0, 1023, 1, 0);
|
||||
BeepIfWorky = true;
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
do {
|
||||
arduboy.clear();
|
||||
arduboy.setTextSize(1);
|
||||
SENSORCheck(); //读取传感器
|
||||
SetTemp = getRotary();
|
||||
Thermostat(1); //加热控制 - ADC数值为基准
|
||||
|
||||
arduboy.setCursor(8, 0);
|
||||
arduboy.print(F("Cal ADC-> "));
|
||||
arduboy.print(RawTemp);
|
||||
|
||||
for (byte y = 0; y < 5; y++) {
|
||||
for (byte x = 0; x < 2; x++) {
|
||||
if (2 * y + x > CalStep) break;
|
||||
arduboy.setCursor(x * 64 + 4, y * 8 + 16);
|
||||
arduboy.print(CalTemp[2 * y + x]);
|
||||
arduboy.print(F(" - "));
|
||||
if (2 * y + x == CalStep) arduboy.print(getRotary());
|
||||
else arduboy.print(xx[2 * y + x]);
|
||||
}
|
||||
}
|
||||
|
||||
CheckLastButton();
|
||||
arduboy.display();
|
||||
} while (digitalRead(BUTTON_PIN) || lastbutton);
|
||||
xx[CalStep] = getRotary();
|
||||
beep(); delay (10);
|
||||
}
|
||||
|
||||
//关闭加热
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 0);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, 255);
|
||||
#endif
|
||||
delayMicroseconds(Time2settle); // wait for voltage to settle
|
||||
bool pass = true;
|
||||
for (int i = 0; i < 8; i++) if (xx[i] + 5 >= xx[i + 1]) pass = false;
|
||||
if (pass) {
|
||||
MenuLevel = 7;
|
||||
free(&pass);
|
||||
polyfit(9, xx, CalTemp, 3, P); //拟合程序
|
||||
free(xx);
|
||||
ShowPTemp(&P[0]);
|
||||
if (MenuScreen(0)) {
|
||||
for (uint8_t i = 0; i < 4; i++) PTemp[CurrentTip][i] = P[i]; //写入拟合系数
|
||||
free(P);
|
||||
}
|
||||
} else {
|
||||
arduboy.clear();
|
||||
arduboy.setCursor(0, 24); arduboy.print(F("ERROR"));
|
||||
arduboy.display();
|
||||
delay(5000);
|
||||
}
|
||||
}
|
||||
//显示默认烙铁头温度曲线系数
|
||||
void ShowPTemp(float *p) {
|
||||
arduboy.clear();
|
||||
arduboy.setTextSize(1);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
arduboy.setCursor(12, i * 8 + 16);
|
||||
arduboy.print(F("P["));
|
||||
arduboy.print(i, 7);
|
||||
arduboy.print(F("] = "));
|
||||
arduboy.print(*p, 7);
|
||||
p++;
|
||||
}
|
||||
arduboy.display();
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
while (digitalRead(BUTTON_PIN) || lastbutton) CheckLastButton();
|
||||
|
||||
}
|
||||
//命名界面 文本输入界面
|
||||
// input tip name screen
|
||||
void InputNameScreen() {
|
||||
uint8_t value;
|
||||
for (uint8_t digit = 0; digit < (TIPNAMELENGTH - 1); digit++) {
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
setRotary(31, 96, 1, 65);
|
||||
do {
|
||||
value = getRotary();
|
||||
if (value == 31) {
|
||||
value = 95;
|
||||
setRotary(31, 96, 1, 95);
|
||||
}
|
||||
if (value == 96) {
|
||||
value = 32;
|
||||
setRotary(31, 96, 1, 32);
|
||||
}
|
||||
//arduboy.setCursor(0, 0);arduboy.print();
|
||||
arduboy.clear();
|
||||
arduboy.setTextSize(2);
|
||||
arduboy.setCursor(16 * digit, 48); arduboy.print(char(94));
|
||||
arduboy.setCursor(0, 32);
|
||||
for (uint8_t i = 0; i < digit; i++) arduboy.print(TipName[CurrentTip][i]);
|
||||
arduboy.setCursor(16 * digit, 32); arduboy.print(char(value));
|
||||
CheckLastButton();
|
||||
arduboy.display();
|
||||
} while (digitalRead(BUTTON_PIN) || lastbutton);
|
||||
TipName[CurrentTip][digit] = value;
|
||||
beep(); delay (10);
|
||||
}
|
||||
TipName[CurrentTip][TIPNAMELENGTH - 1] = 0;
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
// delete tip screen
|
||||
void DeleteTipScreen() {
|
||||
MenuLevel = 7;
|
||||
if (NumberOfTips == 1) {
|
||||
//MessageScreen(DeleteMessage, sizeof(DeleteMessage));
|
||||
}
|
||||
else if (MenuScreen(0)) {
|
||||
if (CurrentTip == (NumberOfTips - 1)) {
|
||||
CurrentTip--;
|
||||
}
|
||||
else {
|
||||
for (uint8_t i = CurrentTip; i < (NumberOfTips - 1); i++) {
|
||||
for (uint8_t j = 0; j < TIPNAMELENGTH; j++) TipName[i][j] = TipName[i + 1][j];
|
||||
}
|
||||
}
|
||||
NumberOfTips--;
|
||||
}
|
||||
}
|
||||
|
||||
//新建烙铁 预设
|
||||
// add new tip screen
|
||||
void AddTipScreen() {
|
||||
if (NumberOfTips < TIPMAX) {
|
||||
CurrentTip = NumberOfTips++; InputNameScreen();
|
||||
PTemp[CurrentTip][0] = TempP1;
|
||||
PTemp[CurrentTip][1] = TempP2;
|
||||
PTemp[CurrentTip][2] = TempP3;
|
||||
PTemp[CurrentTip][3] = TempP4;
|
||||
}
|
||||
}
|
||||
|
||||
int InputBigNum(int InputPW, byte appID) {
|
||||
setRotary(0, 900, 100, InputPW);
|
||||
InputPW = InputScreen(appID);
|
||||
setRotary(InputPW, InputPW + 90, 10, InputPW);
|
||||
InputPW = InputScreen(appID);
|
||||
setRotary(InputPW, InputPW + 9, 1, InputPW);
|
||||
InputPW = InputScreen(appID);
|
||||
return InputPW;
|
||||
}
|
||||
void QRcodeScreen() {
|
||||
arduboy.clear();
|
||||
arduboy.drawSlowXYBitmap(40, 0, QRCode, 48, 48, 1);
|
||||
arduboy.display();
|
||||
delay(100);
|
||||
do {
|
||||
} while (digitalRead(BUTTON_PIN) || lastbutton);
|
||||
beep();
|
||||
}
|
||||
|
||||
//位图缩放 代码片段改自arduboy2
|
||||
void drawSlowXYBitmapResize(int x, int y, const uint8_t *bitmap, uint8_t w, uint8_t h, uint8_t size, uint8_t color) {
|
||||
int16_t xi, yi, byteWidth = (w + 7) / 8;
|
||||
for (yi = 0; yi < h; yi ++) {
|
||||
for (xi = 0; xi < w; xi ++) {
|
||||
if (pgm_read_byte(bitmap + yi * byteWidth + xi / 8) & (128 >> (xi & 7))) {
|
||||
arduboy.fillRect(x + xi * size, y + yi * size, size, size, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//翻转
|
||||
void Flip(bool Fmode) {
|
||||
arduboy.flipVertical(Fmode);
|
||||
arduboy.flipHorizontal(Fmode);
|
||||
}
|
||||
|
||||
//展示版本号
|
||||
void ShowVersion() {
|
||||
arduboy.clear();
|
||||
arduboy.setCursor(43, 28);
|
||||
arduboy.print(F(VERSION));
|
||||
arduboy.display();
|
||||
delay(1000);
|
||||
}
|
@@ -0,0 +1,54 @@
|
||||
//********** 看门狗函数 **********
|
||||
void set_wdt_mod(uint8_t mod, uint8_t ii) //模式,超时时间
|
||||
{
|
||||
/*
|
||||
WDCE
|
||||
该位在定时序列中用于更改WDE和预分频器位
|
||||
要清除WDE位或更改预分频器位,必须将WDCE置1。
|
||||
一旦写入1,硬件将在四个时钟周期后清除WDCE。
|
||||
0=16ms,1=32ms,2=64ms,3=128ms,4=250ms
|
||||
5=500ms,6=1s,7=2s,8=4s,9=8s
|
||||
*/
|
||||
if (ii > 9 ) ii = 9;
|
||||
byte bb;
|
||||
bb = ii & 7;
|
||||
if (ii > 7) bb |= (1 << 5);
|
||||
bb |= (1 << WDCE);
|
||||
|
||||
switch (mod) {
|
||||
case 0: //关闭看门狗
|
||||
__asm__ __volatile__ ("wdr"); //看门狗复位
|
||||
MCUSR = 0x00; //看门狗复位标志清零
|
||||
WDTCSR = (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1
|
||||
WDTCSR = 0x00; //清除所有预分频位
|
||||
break;
|
||||
|
||||
case 1: //打开看门狗,设置复位模式
|
||||
__asm__ __volatile__ ("wdr"); //看门狗复位
|
||||
MCUSR &= ~(1 << WDRF); //MUUSR中的WDRF清零,清除复位标志
|
||||
WDTCSR |= (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1
|
||||
//设置新的看门狗超时值bb
|
||||
WDTCSR = bb; //8秒时bb=0011 0001
|
||||
WDTCSR |= _BV(WDE); //设置复位模式
|
||||
break;
|
||||
|
||||
case 2: //打开看门狗,设置中断模式
|
||||
__asm__ __volatile__ ("wdr"); //看门狗复位
|
||||
MCUSR &= ~(1 << WDRF); //MUUSR中的WDRF清零,清除复位标志
|
||||
WDTCSR |= (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1
|
||||
//设置新的看门狗超时值bb
|
||||
WDTCSR = bb; //8秒时bb=0011 0001
|
||||
WDTCSR |= _BV(WDIE); //设置中断模式
|
||||
break;
|
||||
|
||||
case 3: //打开看门狗,设置中断和复位模式
|
||||
__asm__ __volatile__ ("wdr"); //看门狗复位
|
||||
MCUSR &= ~(1 << WDRF); //MUUSR中的WDRF清零,清除复位标志
|
||||
WDTCSR |= (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1
|
||||
//设置新的看门狗超时值bb
|
||||
WDTCSR = bb; //8秒时bb=0011 0001
|
||||
WDTCSR |= _BV(WDIE); //设置中断模式
|
||||
WDTCSR |= _BV(WDE); //设置复位模式
|
||||
break;
|
||||
}
|
||||
}
|
6
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/.vscode/arduino.json
vendored
Normal file
6
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/.vscode/arduino.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"board": "arduino:avr:uno",
|
||||
"programmer": "Arduino as ISP",
|
||||
"port": "COM3",
|
||||
"sketch": "1.8t6.ino"
|
||||
}
|
25
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/.vscode/c_cpp_properties.json
vendored
Normal file
25
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/.vscode/c_cpp_properties.json
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Win32",
|
||||
"includePath": [
|
||||
"D:/Program Files (x86)/Arduino/libraries",
|
||||
"D:/Program Files (x86)/Arduino/hardware/arduino/avr/**",
|
||||
"D:/Program Files (x86)/Arduino/hardware/tools/avr/avr/include",
|
||||
"D:/Program Files (x86)/Arduino/hardware/tools/avr/lib/gcc/avr/7.3.0/include",
|
||||
"D:/Program Files (x86)/Arduino/hardware/tools/avr/lib/gcc/avr/7.3.0/include-fixed",
|
||||
"D:/Program Files (x86)/Arduino/tools/**",
|
||||
"D:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\**",
|
||||
"D:\\Program Files (x86)\\Arduino\\tools\\**"
|
||||
],
|
||||
"forcedInclude": [
|
||||
"D:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino\\Arduino.h"
|
||||
],
|
||||
"intelliSenseMode": "msvc-x64",
|
||||
"compilerPath": "D:\\mingw64\\bin\\gcc.exe",
|
||||
"cStandard": "gnu17",
|
||||
"cppStandard": "gnu++14"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
29
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/.vscode/launch.json
vendored
Normal file
29
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
// 使用 IntelliSense 了解相关属性。
|
||||
// 悬停以查看现有属性的描述。
|
||||
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "g++.exe - 生成和调试活动文件",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
|
||||
"args": [],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "${workspaceFolder}",
|
||||
"environment": [],
|
||||
"externalConsole": false,
|
||||
"MIMode": "gdb",
|
||||
"miDebuggerPath": "D:\\mingw64\\bin\\gdb.exe",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "为 gdb 启用整齐打印",
|
||||
"text": "-enable-pretty-printing",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"preLaunchTask": "C/C++: g++.exe build active file"
|
||||
}
|
||||
]
|
||||
}
|
27
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/.vscode/tasks.json
vendored
Normal file
27
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/.vscode/tasks.json
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"tasks": [
|
||||
{
|
||||
"type": "cppbuild",
|
||||
"label": "C/C++: g++.exe build active file",
|
||||
"command": "D:\\mingw64\\bin\\g++.exe",
|
||||
"args": [
|
||||
"-g",
|
||||
"${file}",
|
||||
"-o",
|
||||
"${fileDirname}\\${fileBasenameNoExtension}.exe"
|
||||
],
|
||||
"options": {
|
||||
"cwd": "D:\\mingw64\\bin"
|
||||
},
|
||||
"problemMatcher": [
|
||||
"$gcc"
|
||||
],
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"detail": "Generated task by Debugger"
|
||||
}
|
||||
],
|
||||
"version": "2.0.0"
|
||||
}
|
328
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/1.8t7.ino
Normal file
328
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/1.8t7.ino
Normal file
@@ -0,0 +1,328 @@
|
||||
/*License: http://creativecommons.org/licenses/by-sa/3.0/
|
||||
采用CC3.0协议共享此程序
|
||||
您可以自由地
|
||||
共享 — 在任何媒介以任何形式复制、发行本作品
|
||||
演绎 — 修改、翻译或以本作品为基础进行创作
|
||||
在任何用途下,甚至商业目的。
|
||||
本许可协议为“自由文化作品(Free Cultural Works)”所接受。
|
||||
只要你遵守许可协议条款,许可人就无法收回你的这些权利。
|
||||
|
||||
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
|
||||
This is a human-readable summary of (and not a substitute for) the license. Disclaimer.
|
||||
You are free to:
|
||||
Share — copy and redistribute the material in any medium or format
|
||||
Adapt — remix, transform, and build upon the material
|
||||
for any purpose, even commercially.
|
||||
This license is acceptable for Free Cultural Works.
|
||||
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
||||
*/
|
||||
// SolderingStation2
|
||||
//
|
||||
// ATmega328-controlled Soldering Station for Hakko T12 Tips.
|
||||
// 此v1.8t6版本功能简介
|
||||
// This 1.8t5 version of the code implements:
|
||||
// - 烙铁头温度实时监测
|
||||
// - Temperature measurement of the tip
|
||||
// - PID温度控制
|
||||
// - Direct or PID control of the heater
|
||||
// - 可以通过编码器进行控制温度
|
||||
// - Temperature control via rotary encoder
|
||||
// - 短按编码器进入短时升温模式
|
||||
// - Boost mode by short pressing rotary encoder switch
|
||||
// - 长按编码器进入主菜单
|
||||
// - Setup menu by long pressing rotary encoder switch
|
||||
// - 手柄震动检测(需要手柄含有震动传感器)
|
||||
// - Handle movement detection (by checking ball switch)
|
||||
// - 手柄连接检测(通过判断烙铁头温度是否能够被读取来实现)
|
||||
// - Iron unconnected detection (by idenfying invalid temperature readings)
|
||||
// - 定时器设定 - 随眠,关机时间
|
||||
// - Time driven sleep/power off mode if iron is unused (movement detection)
|
||||
// - 可以测量主控芯片电压以及温度
|
||||
// - Measurement of input voltage, Vcc and ATmega's internal temperature
|
||||
// - 在OLED上实现信息显示
|
||||
// - Information display on OLED
|
||||
// - 支持无源蜂鸣器
|
||||
// - Buzzer
|
||||
// - 允许设置不同烙铁头的温度校准值
|
||||
// - Calibrating and managing different soldering tips
|
||||
// - 设置被保存在EEPROM,掉电不丢失
|
||||
// - Storing user settings into the EEPROM
|
||||
// - 允许热插拔烙铁头,并弹出烙铁头配置选择菜单
|
||||
// - Tip change detection
|
||||
// - 芯片过热以及低电压报警
|
||||
// - Chip overheating and low voltage alarm
|
||||
// - 更好的实时温度条以及实时功率条
|
||||
// - Better real-time temperature bar and real-time power bar
|
||||
// - 拥有过渡动画
|
||||
// - Have transition animation
|
||||
// - 内置屏幕保护程序
|
||||
// - Built in screen saver
|
||||
// - 屏幕翻转设置
|
||||
// - Screen flip settings
|
||||
// - 内置英文、中文、日文语言包
|
||||
// - Built in English, Chinese and Japanese language pack
|
||||
// - 开机密码设置
|
||||
// - System Password
|
||||
// - 允许设置旋钮方向
|
||||
// - Knob direction setting menu
|
||||
// - 内嵌看门狗,宕机自动重启
|
||||
// - Watchdog timer automatic reset the MCU
|
||||
|
||||
// Power supply should be in the range of 16V/2A to 24V/3A and well
|
||||
// stabilized.
|
||||
//
|
||||
// For calibration you need a soldering iron tips thermometer. For best results
|
||||
// wait at least three minutes after switching on the soldering station before
|
||||
// you start the calibration process.
|
||||
//
|
||||
// Controller: ATmega328p
|
||||
// Core: Barebones ATmega (https://github.com/carlosefr/atmega)
|
||||
// Clockspeed: 16 MHz external
|
||||
//
|
||||
// 2019/2020 by Stefan Wagner with great support from John Glavinos
|
||||
// 2020-8 UI upgrade by LHW-createskyblue 、lihaoyun6
|
||||
// Project Page: https://easyeda.com/wagiminator
|
||||
|
||||
|
||||
bool lastbutton;
|
||||
#include <Arduboy2.h> //注意 这里使用被阉割的图形库,只有绘图功能,并非通用的版本
|
||||
Arduboy2 arduboy;
|
||||
|
||||
#include <EEPROM.h>
|
||||
#include <PID_v1.h>
|
||||
#include <avr/sleep.h>
|
||||
// Firmware version
|
||||
#define VERSION "v1.8t7"
|
||||
|
||||
// Type of rotary encoder
|
||||
#define ROTARY_TYPE 1 // 0: 2 increments/step; 1: 4 increments/step
|
||||
|
||||
// Pins
|
||||
#define SENSOR_PIN A0 // temperature sense
|
||||
#define VIN_PIN A1 // input voltage sense
|
||||
#define BUZZER_PIN 5 // buzzer
|
||||
#define BUTTON_PIN 6 // rotary encoder switch
|
||||
#define ROTARY_1_PIN 7 // rotary encoder 1
|
||||
#define ROTARY_2_PIN 8 // rotary encoder 2
|
||||
#define CONTROL_PIN 9 // heater MOSFET PWM control
|
||||
#define SWITCH_PIN 10 // handle vibration switch
|
||||
|
||||
// Default temperature control values (recommended soldering temperature: 300-380°C)
|
||||
#define TEMP_MIN 100 // min selectable temperature
|
||||
#define TEMP_MAX 400 // max selectable temperature
|
||||
#define TEMP_DEFAULT 320 // default start setpoint
|
||||
#define TEMP_SLEEP 150 // temperature in sleep mode
|
||||
#define TEMP_BOOST 60 // temperature increase in boost mode
|
||||
#define TEMP_STEP 10 // rotary encoder temp change steps
|
||||
|
||||
// Default tip temperature calibration values
|
||||
#define TEMPCHP 30 // chip temperature while calibration
|
||||
#define TIPMAX 30 // max number of tips
|
||||
#define TIPNAMELENGTH 6 // max length of tip names (including termination)
|
||||
#define TIPNAME "SZtip" // default tip name
|
||||
|
||||
|
||||
// Default timer values (0 = disabled)
|
||||
#define TIME2SLEEP 5 // time to enter sleep mode in minutes
|
||||
#define TIME2OFF 15 // time to shut off heater in minutes
|
||||
#define TIMEOFBOOST 40 // time to stay in boost mode in seconds
|
||||
|
||||
// Control values
|
||||
#define TIME2SETTLE 950 // time in microseconds to allow OpAmp output to settle
|
||||
#define SMOOTHIE 0.05 // OpAmp output smooth factor (1=no smoothing; 0.05 default)
|
||||
#define PID_ENABLE true // enable PID control
|
||||
#define BEEP_ENABLE false // enable/disable buzzer
|
||||
#define MAINSCREEN 1 // type of main screen (0: big numbers; 1: more infos)
|
||||
|
||||
// EEPROM identifier
|
||||
#define EEPROM_IDENT 0x140B // to identify if EEPROM was written by this program
|
||||
|
||||
//Beep
|
||||
#define SetBeepCoolTime 200
|
||||
unsigned long BeepCoolTime;
|
||||
|
||||
// Define the aggressive and conservative PID tuning parameters
|
||||
double aggKp = 11, aggKi = 0.5, aggKd = 1;
|
||||
double consKp = 11, consKi = 3, consKd = 5;
|
||||
|
||||
// Default values that can be changed by the user and stored in the EEPROM
|
||||
uint16_t DefaultTemp = TEMP_DEFAULT;
|
||||
uint16_t SleepTemp = TEMP_SLEEP;
|
||||
uint8_t BoostTemp = TEMP_BOOST;
|
||||
uint8_t Time2sleep = TIME2SLEEP;
|
||||
uint8_t Time2off = TIME2OFF;
|
||||
uint8_t TimeOfBoost = TIMEOFBOOST;
|
||||
uint8_t MainScrType = MAINSCREEN;
|
||||
bool PIDenable = PID_ENABLE;
|
||||
bool BeepEnable = BEEP_ENABLE;
|
||||
|
||||
//温度拟合
|
||||
#define TempP1 10.2675914764
|
||||
#define TempP2 1.7323191166
|
||||
#define TempP3 -0.0033245713
|
||||
#define TempP4 0.0000045338
|
||||
float PTemp[4] = {TempP1, TempP2, TempP3, TempP4}; //温度拟合系数
|
||||
const uint16_t CalTemp[9] = {50,100,150,200,250,300,350,400,450};
|
||||
char TipName[TIPNAMELENGTH] = {TIPNAME};
|
||||
uint8_t CurrentTip = 0;
|
||||
uint8_t NumberOfTips = 1;
|
||||
|
||||
// Variables for pin change interrupt
|
||||
volatile uint8_t a0, b0, c0, d0;
|
||||
volatile bool ab0;
|
||||
volatile int Count, CountMin, CountMax, CountStep;
|
||||
volatile bool handleMoved;
|
||||
|
||||
// Variables for temperature control
|
||||
uint16_t SetTemp, ShowTemp, gap, Step;
|
||||
double Input, Output, Setpoint, RawTemp, CurrentTemp, ChipTemp;
|
||||
|
||||
// Variables for voltage readings
|
||||
uint16_t Vcc, Vin;
|
||||
|
||||
// State variables
|
||||
bool InSleepMode = false;
|
||||
bool InOffMode = false;
|
||||
bool InBoostMode = false;
|
||||
bool InCalibMode = false;
|
||||
bool IsWorky = true;
|
||||
bool BeepIfWorky = true;
|
||||
bool TipIsPresent = true;
|
||||
bool FlipState = false;
|
||||
// Timing variables
|
||||
uint32_t Sleepmillis;
|
||||
uint32_t Boostmillis;
|
||||
uint32_t Buttonmillis;
|
||||
uint8_t GoneMinutes;
|
||||
uint8_t GoneSeconds;
|
||||
uint8_t SensorCounter = 255;
|
||||
//串口助手
|
||||
//int x, y, a, b;
|
||||
//欠压报警
|
||||
byte UnderVoltage = 0;
|
||||
// Control variables
|
||||
uint16_t Time2settle = 300;
|
||||
|
||||
//模拟数字滚轮 Numerical scrolling effect
|
||||
int Value;
|
||||
int LastValue[3];
|
||||
int SlidingAnimationY[3];
|
||||
|
||||
//开机密码 BootPassword
|
||||
int Password = 0;
|
||||
|
||||
//屏幕保护-主题:密集运算
|
||||
byte Line[4];
|
||||
|
||||
//编码器旋转调整方向设定
|
||||
bool RotaryD = false;
|
||||
|
||||
//开机非线性动画
|
||||
byte BootAnimationY=64;
|
||||
|
||||
// Specify the links and initial PID tuning parameters
|
||||
PID ctrl(&Input, &Output, &Setpoint, aggKp, aggKi, aggKd, REVERSE);
|
||||
|
||||
//NMOS - PMOS软件切换
|
||||
#define UsePMOS false
|
||||
|
||||
//LANG 语言支持
|
||||
/* 0 - 中文 CHINESE
|
||||
1 - 英文 ENGLISH
|
||||
2 - 日语 x (此版本不支持)
|
||||
*/
|
||||
byte LANG = 0;
|
||||
|
||||
|
||||
|
||||
void setup() {
|
||||
//设置看门狗自动复位
|
||||
set_wdt_mod(3, 7);
|
||||
|
||||
//启动arduboy内核
|
||||
arduboy.begin();
|
||||
arduboy.setFrameRate(30);
|
||||
|
||||
//Serial.begin(115200);
|
||||
|
||||
// set the pin modes
|
||||
//设置IO
|
||||
pinMode(SENSOR_PIN, INPUT);
|
||||
pinMode(VIN_PIN, INPUT);
|
||||
pinMode(BUZZER_PIN, OUTPUT);
|
||||
pinMode(CONTROL_PIN, OUTPUT);
|
||||
pinMode(ROTARY_1_PIN, INPUT_PULLUP);
|
||||
pinMode(ROTARY_2_PIN, INPUT_PULLUP);
|
||||
pinMode(BUTTON_PIN, INPUT_PULLUP);
|
||||
pinMode(SWITCH_PIN, INPUT_PULLUP);
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 0);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, 255); // this shuts off the heater
|
||||
#endif
|
||||
digitalWrite(BUZZER_PIN, LOW); // must be LOW when buzzer not in use
|
||||
|
||||
//初始化ADC
|
||||
//setup ADC
|
||||
ADCSRA |= bit (ADPS0) | bit (ADPS1) | bit (ADPS2); // set ADC prescaler to 128
|
||||
ADCSRA |= bit (ADIE); // enable ADC interrupt
|
||||
interrupts (); // enable global interrupts
|
||||
|
||||
//初始化编码器IO
|
||||
// setup pin change interrupt for rotary encoder
|
||||
PCMSK0 = bit (PCINT0); // Configure pin change interrupt on Pin8
|
||||
PCICR = bit (PCIE0); // Enable pin change interrupt
|
||||
PCIFR = bit (PCIF0); // Clear interrupt flag
|
||||
|
||||
//从EEPROM读取设置
|
||||
// get default values from EEPROM
|
||||
GetEEPROM();
|
||||
|
||||
//设置屏幕反转状态
|
||||
Flip(FlipState);
|
||||
|
||||
//设置屏幕亮度
|
||||
SetOLEDLightLevel(32); //降低屏幕亮度 延长OLED使用寿命
|
||||
|
||||
//初始化屏幕保护动画
|
||||
for (byte a = 0; a < 4; a++) Line[a] = 32 * a;
|
||||
|
||||
//密码保护
|
||||
BootPassword();
|
||||
// read supply voltages in mV
|
||||
Vcc = getVCC(); Vin = getVIN();
|
||||
// read and set current iron temperature
|
||||
SetTemp = DefaultTemp;
|
||||
RawTemp = denoiseAnalog(SENSOR_PIN);
|
||||
ChipTemp = getChipTemp();
|
||||
calculateTemp();
|
||||
// turn on heater if iron temperature is well below setpoint
|
||||
#if UsePMOS
|
||||
if ((CurrentTemp + 20) < DefaultTemp) analogWrite(CONTROL_PIN, 255);
|
||||
#else
|
||||
if ((CurrentTemp + 20) < DefaultTemp) analogWrite(CONTROL_PIN, 0);
|
||||
#endif
|
||||
// tell the PID to range between 0 and the full window size
|
||||
ctrl.SetOutputLimits(0, 255);
|
||||
// start PID
|
||||
ctrl.SetMode(AUTOMATIC);
|
||||
// set initial rotary encoder values
|
||||
a0 = PINB & 1; b0 = PIND >> 7 & 1; ab0 = (a0 == b0);
|
||||
setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, DefaultTemp);
|
||||
// reset sleep timer
|
||||
Sleepmillis = millis();
|
||||
|
||||
// long beep for setup completion
|
||||
beep(); beep();
|
||||
ShowVersion();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
//HelpMeSerialer();
|
||||
ROTARYCheck(); // check rotary encoder (temp/boost setting, enter setup menu)
|
||||
SLEEPCheck(); // check and activate/deactivate sleep modes
|
||||
SENSORCheck(); // reads temperature and vibration switch of the iron
|
||||
Thermostat(0); // heater control
|
||||
MainScreen(); // updates the main page on the OLED
|
||||
//beep(0);
|
||||
}
|
@@ -0,0 +1,85 @@
|
||||
|
||||
//关于界面-项目页面二维码 ->为了加入欠压报警只能阉割掉关于页面的二维码
|
||||
//const unsigned char QRCode[] PROGMEM = { 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0e, 0x7c, 0x0c, 0x00, 0x00, 0x1f, 0xfe, 0x3f, 0xc1, 0x8c, 0x0c, 0x7f, 0xf8, 0x1f, 0xfe, 0x3f, 0xc1, 0x8c, 0x0c, 0x7f, 0xf8, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x30, 0x01, 0xf3, 0x8c, 0x60, 0x18, 0x18, 0x06, 0x3e, 0x0f, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3e, 0x0f, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x18, 0x06, 0x3f, 0xc1, 0xf0, 0x0c, 0x60, 0x18, 0x1f, 0xfe, 0x3e, 0x30, 0x70, 0x0c, 0x7f, 0xf8, 0x1f, 0xfe, 0x3e, 0x30, 0x70, 0x0c, 0x7f, 0xf8, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x31, 0xce, 0x73, 0x8c, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x01, 0x83, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x01, 0x83, 0x8f, 0xff, 0xff, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x00, 0xc0, 0x01, 0xc1, 0x8c, 0x00, 0x7f, 0x1f, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0x07, 0xc7, 0xcf, 0xce, 0x7f, 0x8c, 0x1f, 0xf8, 0xf8, 0x00, 0x3e, 0x3e, 0x03, 0xf0, 0x7f, 0x00, 0xf8, 0x00, 0x3e, 0x3e, 0x03, 0xf0, 0x7f, 0x00, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0xe0, 0xc7, 0xcf, 0xfe, 0x03, 0x80, 0x1f, 0xe7, 0x18, 0xc0, 0x31, 0xfe, 0x0c, 0x0c, 0x1c, 0xe0, 0x18, 0xc0, 0x31, 0xfe, 0x0c, 0x0c, 0x1c, 0xe0, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0xe7, 0x39, 0xf1, 0xf0, 0x03, 0xfc, 0x7c, 0xf8, 0x1f, 0x00, 0x31, 0xcf, 0xf3, 0x8c, 0x03, 0x00, 0x1f, 0x00, 0x31, 0xcf, 0xf3, 0x8c, 0x03, 0x00, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0xe0, 0x3f, 0xff, 0xc1, 0x83, 0x8f, 0x9c, 0xe7, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0x18, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x3e, 0x7c, 0x0f, 0xe0, 0x00, 0xff, 0xff, 0xf0, 0x3e, 0x7c, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x00, 0x00, 0x31, 0xce, 0x0c, 0x0c, 0x63, 0xe0, 0x1f, 0xfe, 0x30, 0x01, 0x83, 0x8f, 0xe0, 0xff, 0x1f, 0xfe, 0x30, 0x01, 0x83, 0x8f, 0xe0, 0xff, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x31, 0xf1, 0x8f, 0x80, 0x03, 0xe7, 0x18, 0x06, 0x3f, 0xff, 0x83, 0x83, 0xe3, 0x1f, 0x18, 0x06, 0x3f, 0xff, 0x83, 0x83, 0xe3, 0x1f, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x18, 0x06, 0x31, 0xfe, 0x73, 0x8f, 0x80, 0xf8, 0x1f, 0xfe, 0x31, 0xfe, 0x00, 0x0c, 0x60, 0xe7, 0x1f, 0xfe, 0x31, 0xfe, 0x00, 0x0c, 0x60, 0xe7, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0, 0x00, 0x00, 0x31, 0xfe, 0x0c, 0x0f, 0x9f, 0xe0 };
|
||||
const unsigned char QRCode[] PROGMEM = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0x86, 0x70, 0x80, 0x03, 0x80, 0x03, 0x86, 0x70, 0x80, 0x03, 0x9f, 0xf3, 0xe1, 0x30, 0x9f, 0xf3, 0x9f, 0xf3, 0xe1, 0x30, 0x9f, 0xf3, 0x98, 0x33, 0x01, 0xcc, 0x98, 0x33, 0x98, 0x33, 0x01, 0xcc, 0x98, 0x33, 0x98, 0x33, 0x87, 0xc0, 0x98, 0x33, 0x98, 0x33, 0xe1, 0xc0, 0x98, 0x33, 0x98, 0x33, 0xe1, 0xc0, 0x98, 0x33, 0x9f, 0xf3, 0x98, 0xc0, 0x9f, 0xf3, 0x9f, 0xf3, 0x98, 0xc0, 0x9f, 0xf3, 0x80, 0x03, 0x66, 0xcc, 0x80, 0x03, 0x80, 0x03, 0x66, 0xcc, 0x80, 0x03, 0xff, 0xff, 0x01, 0x0c, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x61, 0x30, 0x1f, 0x3f, 0x87, 0x3c, 0xe6, 0xfc, 0x87, 0x33, 0x87, 0x3c, 0xe6, 0xfc, 0x87, 0xf3, 0xf8, 0x03, 0x9e, 0x0f, 0x1f, 0x03, 0xf8, 0x03, 0x9e, 0x0f, 0x1f, 0x03, 0xe1, 0x3c, 0xfe, 0x0c, 0x07, 0xcf, 0xe1, 0x3c, 0xfe, 0x0c, 0x07, 0xcf, 0x99, 0x03, 0x3e, 0x30, 0x86, 0xc3, 0xe6, 0xcf, 0x38, 0x0f, 0x9e, 0xf3, 0xe6, 0xcf, 0x38, 0x0f, 0x9e, 0xf3, 0x9e, 0x03, 0x27, 0xcc, 0x81, 0x03, 0x9e, 0x03, 0x27, 0xcc, 0x81, 0x03, 0xe0, 0xff, 0xe1, 0x0c, 0xe6, 0xcf, 0xe0, 0xff, 0xe1, 0x0c, 0xe6, 0xcf, 0x98, 0x03, 0x06, 0x00, 0x00, 0xff, 0x98, 0x03, 0x06, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1e, 0xf0, 0xf8, 0x03, 0x80, 0x03, 0x66, 0x30, 0x99, 0xc3, 0x80, 0x03, 0x66, 0x30, 0x99, 0xc3, 0x9f, 0xf3, 0x01, 0x0c, 0xf8, 0xff, 0x9f, 0xf3, 0x01, 0x0c, 0xf8, 0xff, 0x98, 0x33, 0x39, 0x3c, 0x01, 0xcf, 0x98, 0x33, 0x39, 0x3c, 0x01, 0xcf, 0x98, 0x33, 0xff, 0x0c, 0x79, 0x3f, 0x98, 0x33, 0x3e, 0xcc, 0xe0, 0xf3, 0x98, 0x33, 0x3e, 0xcc, 0xe0, 0xf3, 0x9f, 0xf3, 0x3e, 0x00, 0x98, 0xcf, 0x9f, 0xf3, 0x3e, 0x00, 0x98, 0xcf, 0x80, 0x03, 0x3e, 0x30, 0xe7, 0xc3, 0x80, 0x03, 0x3e, 0x30, 0xe7, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
||||
//ICO
|
||||
//width:16,height:16
|
||||
const unsigned char Tag[] PROGMEM = { 0x00, 0x00, 0x3b, 0xec, 0x7b, 0xee, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0xe6, 0x63, 0x66, 0x62, 0x26, 0x60, 0x06, 0x60, 0x06, 0x7f, 0xfe, 0x3f, 0xfc, 0x00, 0x00 };
|
||||
const unsigned char Chip[] PROGMEM = { 0x14, 0xa0, 0x3f, 0xf0, 0x7f, 0xf8, 0xe0, 0x1c, 0x6e, 0x18, 0xec, 0x1c, 0x68, 0x18, 0x60, 0x18, 0xe0, 0x1c, 0x60, 0x58, 0xe0, 0x1c, 0x7f, 0xf8, 0x3f, 0xf0, 0x14, 0xa0 };
|
||||
//const unsigned char HeatPipe[] PROGMEM = { 0x00, 0x00, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x11, 0x88, 0x21, 0x84, 0x11, 0x88, 0x09, 0x90, 0x01, 0x80, 0x00, 0x00 };
|
||||
const unsigned char Lightning[] PROGMEM = { 0x0f, 0xe0, 0x1f, 0xc0, 0x1f, 0xc0, 0x3f, 0x80, 0x3f, 0xf8, 0x7f, 0xf0, 0x7f, 0xe0, 0x07, 0xc0, 0x07, 0x80, 0x0f, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x10, 0x00 };
|
||||
//const unsigned char Thermometer[] PROGMEM = { 0x01, 0x80, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x03, 0x40, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0 };
|
||||
const unsigned char Pointer[] PROGMEM = { 0x20, 0x20, 0x70, 0xf8 };
|
||||
//状态提示
|
||||
//width:14,height:14 图标库
|
||||
|
||||
const unsigned char c1[] PROGMEM = { 0x03, 0x00, 0x07, 0x80, 0x0f, 0xc0, 0x0c, 0xc0, 0x1c, 0xe0, 0x1c, 0xe0, 0x3c, 0xf0, 0x3c, 0xf0, 0x7f, 0xf8, 0x7f, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xff, 0xfc, 0x7f, 0xf8 };
|
||||
const unsigned char c2[] PROGMEM = { 0x7f, 0xf8, 0xff, 0xfc, 0xc0, 0x0c, 0xc3, 0x0c, 0xcb, 0x4c, 0xdb, 0x6c, 0xdb, 0x6c, 0xd8, 0x6c, 0xdc, 0xec, 0xcf, 0xcc, 0xc7, 0x8c, 0xc0, 0x0c, 0xff, 0xfc, 0x7f, 0xf8 };
|
||||
const unsigned char c3[] PROGMEM = { 0x00, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x18, 0xf8, 0x38, 0xf0, 0x30, 0x30, 0x70, 0x60, 0x70, 0x78, 0x78, 0xf8, 0x78, 0x00, 0x3c, 0x02, 0x3f, 0x0c, 0x1f, 0xf8, 0x0f, 0xf0, 0x03, 0xc0, 0x00, 0x00 };
|
||||
const unsigned char c5[] PROGMEM = { 0x7f, 0xf0, 0xff, 0xe0, 0xc0, 0x08, 0xc0, 0x1c, 0xc0, 0x38, 0xc8, 0x70, 0xdc, 0xe4, 0xcf, 0xcc, 0xc7, 0x8c, 0xc3, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xff, 0xfc, 0x7f, 0xf8 };
|
||||
const unsigned char c6[] PROGMEM = { 0x1e, 0x10, 0x33, 0x38, 0x2d, 0x7c, 0x25, 0x38, 0x2d, 0x38, 0x25, 0x38, 0x2d, 0x38, 0x6d, 0x80, 0xde, 0xc0, 0xbf, 0x40, 0xbf, 0x40, 0xde, 0xc0, 0x61, 0x80, 0x3f, 0x00 };
|
||||
const unsigned char c7[] PROGMEM = { 0x1f, 0xe0, 0x3f, 0xf0, 0x70, 0x38, 0x60, 0x18, 0x60, 0x18, 0x60, 0x18, 0xff, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xf8, 0x7c, 0xf8, 0x7c, 0xfc, 0xfc, 0x7f, 0xf8 };
|
||||
const unsigned char c_NO[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x37, 0xb0, 0x23, 0x10, 0x30, 0x30, 0x38, 0x70, 0x38, 0x70, 0x30, 0x30, 0x23, 0x10, 0x37, 0xb0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char *C_table[] = {c1, c2, c3, Lightning, c5, c6, c7};
|
||||
|
||||
//设置(语言是一种低像素的表达方式,容易造成隔阂; 交互界面设计尽可能形象化)
|
||||
// width: 14, height: 14
|
||||
const unsigned char QRC[] PROGMEM = { 0x05, 0x80, 0x74, 0xb8, 0x57, 0xa8, 0x76, 0xb8, 0x05, 0x80, 0xf9, 0x7c, 0x46, 0x94, 0xaa, 0xa8, 0xf9, 0x7c, 0x06, 0x88, 0x74, 0xa8, 0x57, 0x8c, 0x75, 0x74, 0x06, 0x98 };
|
||||
const unsigned char Set0[] PROGMEM = { 0x88, 0x24, 0x08, 0x20, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, 0x30, 0x39, 0x30, 0x3b, 0xb0, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set1[] PROGMEM = { 0xf8, 0x7c, 0xf3, 0x3c, 0xf4, 0xbc, 0xf6, 0xbc, 0xf4, 0xbc, 0xf6, 0xbc, 0xf4, 0xbc, 0xe4, 0x9c, 0xc8, 0x4c, 0xd0, 0x2c, 0xd0, 0x2c, 0xc8, 0x4c, 0xe7, 0x9c, 0xf0, 0x3c };
|
||||
const unsigned char Set2[] PROGMEM = { 0x8f, 0xc4, 0x10, 0x20, 0x20, 0x10, 0x4c, 0xc8, 0x9f, 0xe4, 0x3d, 0xf0, 0x3d, 0xf0, 0x1d, 0xe0, 0x3e, 0xf0, 0x3f, 0x70, 0x9f, 0xe4, 0x8c, 0xc4, 0x00, 0x00, 0x30, 0x30 };
|
||||
const unsigned char Set3[] PROGMEM = { 0xc3, 0xfc, 0x18, 0x00, 0x18, 0x00, 0xc3, 0xfc, 0xff, 0xfc, 0xff, 0x0c, 0x00, 0x60, 0x00, 0x60, 0xff, 0x0c, 0xff, 0xfc, 0xf0, 0xfc, 0x06, 0x00, 0x06, 0x00, 0xf0, 0xfc };
|
||||
const unsigned char Set4[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set4F[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x38, 0x30, 0x33, 0x10, 0x3f, 0x90, 0x38, 0x10, 0x33, 0x90, 0x27, 0x90, 0x26, 0x10, 0x30, 0x90, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set4FF[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x24, 0x30, 0x21, 0x90, 0x27, 0x90, 0x27, 0x30, 0x20, 0x70, 0x27, 0xf0, 0x23, 0x30, 0x30, 0x70, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set5[] PROGMEM = { 0xfc, 0xfc, 0xf8, 0x7c, 0xe0, 0x1c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0x0c, 0x80, 0x04, 0x80, 0x04, 0xff, 0xfc, 0xf8, 0x7c, 0xfc, 0xfc };
|
||||
const unsigned char Set5_1[] PROGMEM = { 0xfc, 0xf4, 0xf8, 0x60, 0xe0, 0x44, 0xc0, 0x8c, 0xc1, 0x1c, 0xc2, 0x2c, 0xc4, 0x4c, 0xc8, 0x8c, 0xd1, 0x0c, 0xa2, 0x04, 0xc4, 0x04, 0x8f, 0xfc, 0x18, 0x7c, 0xbc, 0xfc };
|
||||
const unsigned char Set6[] PROGMEM = { 0xf8,0x7c,0xc0,0x0c,0xc0,0x0c,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xcf,0xcc,0xc8,0x4c,0xc8,0x4c,0xcf,0xcc,0xc0,0x0c,0xc0,0x0c };
|
||||
const unsigned char Set_LANG[] PROGMEM = { 0xf0, 0x3c, 0xce, 0x4c, 0xbc, 0x34, 0xb8, 0x14, 0x18, 0x80, 0x10, 0x80, 0x42, 0x30, 0x60, 0x78, 0x60, 0xf8, 0x44, 0xc0, 0x80, 0x04, 0xb8, 0x84, 0xcf, 0xcc, 0xf0, 0x3c };
|
||||
const unsigned char Set7[] PROGMEM = { 0x80, 0x0c, 0x00, 0x1c, 0x3f, 0xf4, 0x3f, 0xe0, 0x3f, 0xc4, 0x37, 0x8c, 0x23, 0x18, 0x30, 0x30, 0x38, 0x70, 0x3c, 0xf0, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set11[] PROGMEM = { 0xf3, 0xfc, 0xe7, 0xfc, 0xce, 0x0c, 0x8e, 0x1c, 0x9f, 0x9c, 0x1f, 0x3c, 0x1f, 0x0c, 0x0e, 0x0c, 0x0f, 0xfc, 0x87, 0xf8, 0x81, 0xe4, 0xc0, 0x0c, 0xe0, 0x1c, 0xf8, 0x7c };
|
||||
const unsigned char Set8[] PROGMEM = { 0x81, 0xdc, 0x55, 0x9c, 0x29, 0x04, 0x55, 0x00, 0x29, 0x90, 0x55, 0xd0, 0x03, 0xfc, 0xff, 0x00, 0x2e, 0x00, 0x26, 0x70, 0x02, 0x50, 0x82, 0x70, 0xe6, 0x00, 0xee, 0x04 };
|
||||
const unsigned char Set9[] PROGMEM = { 0xf0, 0x3c, 0xce, 0x0c, 0xbf, 0x04, 0xb3, 0x04, 0x73, 0x00, 0x7f, 0x00, 0x7e, 0x00, 0x7c, 0x00, 0x7c, 0x00, 0x7c, 0x60, 0xbc, 0x64, 0xbe, 0x04, 0xcf, 0x0c, 0xf0, 0x3c };
|
||||
const unsigned char Set10[] PROGMEM = { 0xf8, 0x7c, 0xf7, 0xbc, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0xbf, 0xf4, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xab, 0x54, 0xbf, 0xf4, 0xc0, 0x0c };
|
||||
const unsigned char Set13[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x34, 0xb0, 0x24, 0x90, 0x24, 0x90, 0x27, 0x90, 0x23, 0x10, 0x30, 0x30, 0x38, 0x70, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set12[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x20, 0x10, 0x20, 0x10, 0x3c, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set14[] PROGMEM = { 0xff, 0x7c, 0xfe, 0x7c, 0xfc, 0xec, 0xe8, 0xdc, 0xc8, 0x4c, 0x98, 0x4c, 0x88, 0x24, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x1c };
|
||||
const unsigned char Set15[] PROGMEM = { 0x15, 0x54, 0x3f, 0xfc, 0x15, 0x54, 0x3f, 0xfc, 0x15, 0x54, 0x3c, 0x04, 0x14, 0x04, 0x3c, 0xfc, 0x14, 0x54, 0x3c, 0xfc, 0x00, 0x54, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char Set16[] PROGMEM = { 0x15, 0x54, 0x3f, 0xf8, 0x15, 0x50, 0x3f, 0xf0, 0x15, 0x50, 0x38, 0x70, 0x10, 0x20, 0x31, 0x04, 0x13, 0x8c, 0x22, 0xa8, 0x17, 0xfc, 0x2a, 0xa8, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char Set17[] PROGMEM = { 0x80, 0x00, 0xbf, 0xf8, 0x1f, 0xf8, 0xb0, 0x08, 0x18, 0x08, 0xb9, 0xe8, 0x19, 0xb8, 0xb8, 0x38, 0x18, 0x38, 0xb9, 0xb8, 0xb9, 0xf8, 0xb0, 0xf8, 0xbf, 0xf8, 0x80, 0x00 };
|
||||
const unsigned char Set18[] PROGMEM = { 0x80, 0x00, 0xbf, 0xf8, 0x1f, 0xf8, 0xb0, 0x28, 0x1f, 0xf8, 0xb4, 0x08, 0x1f, 0xf8, 0xb1, 0x08, 0x1f, 0xf8, 0xb0, 0x48, 0xbf, 0xf8, 0xb2, 0x88, 0xbf, 0xf8, 0x80, 0x00 };
|
||||
const unsigned char Lang_CN[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x20, 0x10, 0x24, 0x90, 0x24, 0x90, 0x20, 0x10, 0x3c, 0xf0, 0x3c, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Lang_EN[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x38, 0x70, 0x30, 0x30, 0x23, 0x10, 0x27, 0x90, 0x20, 0x10, 0x20, 0x10, 0x27, 0x90, 0x27, 0x90, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Lang_JP[] PROGMEM = { 0x80, 0x04, 0x00, 0x00, 0x3f, 0xf0, 0x3d, 0xf0, 0x20, 0x10, 0x3b, 0xf0, 0x3b, 0x70, 0x30, 0x30, 0x2b, 0x50, 0x2a, 0xd0, 0x31, 0xb0, 0x3f, 0xf0, 0x00, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Save[] PROGMEM = { 0x00, 0x04, 0x58, 0x08, 0x58, 0x08, 0x58, 0x08, 0x40, 0x08, 0x7f, 0xf8, 0x60, 0x18, 0x5f, 0xe8, 0x5b, 0x68, 0x5f, 0xe8, 0x5b, 0x68, 0x1c, 0xe8, 0x5f, 0xe8, 0x00, 0x00 };
|
||||
const unsigned char Lock[] PROGMEM = { 0xe0, 0x1c, 0xc0, 0x0c, 0x8f, 0xc4, 0x9f, 0xe4, 0x9f, 0xe4, 0x9f, 0xe4, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0x00, 0x80, 0x04 };
|
||||
const unsigned char Set19[] PROGMEM = { 0xf8, 0x7c, 0x80, 0x04, 0xbc, 0xf4, 0x3f, 0xf0, 0x38, 0x70, 0xb7, 0xb4, 0xb6, 0xb4, 0xb5, 0xb4, 0xb7, 0xb4, 0x38, 0x70, 0x3f, 0xf0, 0xbc, 0xf4, 0x80, 0x04, 0xf8, 0x7c };
|
||||
#if LANG_JP_State
|
||||
const unsigned char *Ico_table[] = {
|
||||
Set0, Set1, Set2, Set3, Set4, Set5, Set19, Set6, Lock, Set_LANG, QRC, Set7,
|
||||
Set8, Set9, Set0, Set10, Set12, Set7,
|
||||
Set0, Set11, Set14, Save,
|
||||
Set11, Set13, Set14, Save,
|
||||
Set15, Set16,
|
||||
Set17, Set18, //5
|
||||
Set5_1, Set5,
|
||||
c_NO, Set7,
|
||||
Lang_CN, Lang_EN, Lang_JP, //8
|
||||
Set4, Set4F, Save,
|
||||
};
|
||||
#else
|
||||
const unsigned char *Ico_table[] = {
|
||||
Set0, Set1, Set2, Set3, Set4, Set5, Set19, Set6, Lock, Set_LANG, QRC, Set7,
|
||||
Set8, Set9, Set0, Set10, Set12, Save,
|
||||
Set0, Set11, Set14, Save,
|
||||
Set11, Set13, Set14, Save,
|
||||
Set15, Set16,
|
||||
Set17, Set18, //5
|
||||
Set5_1, Set5,
|
||||
c_NO, Set7,
|
||||
Lang_CN, Lang_EN,c_NO, //8
|
||||
Set4, Set4F, Save,
|
||||
};
|
||||
#endif
|
||||
const byte Menu_table[] = {12, 6, 4, 4, 2, 2, 2, 2, 3, 3}; //菜单 标签 温控 定时 控制方式 首页 蜂鸣器 标签删除确认界面 语言菜单 翻转 显示
|
||||
byte MenuLevel = 0; //菜单层级
|
@@ -0,0 +1,824 @@
|
||||
#define LANG_JP_State false
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
多语言支持
|
||||
Multilingual support
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
*/
|
||||
/*
|
||||
英语库 ENGLISH
|
||||
*/
|
||||
const char EN_0[] PROGMEM = "Tip";
|
||||
const char EN_1[] PROGMEM = "Temp";
|
||||
const char EN_2[] PROGMEM = "Timer";
|
||||
const char EN_3[] PROGMEM = "Control";
|
||||
const char EN_4[] PROGMEM = "Screen";
|
||||
const char EN_5[] PROGMEM = "Buzzer";
|
||||
const char EN_6[] PROGMEM = "LOW Vol";
|
||||
const char EN_7[] PROGMEM = "Lang";
|
||||
const char EN_8[] PROGMEM = "Return";
|
||||
const char EN_9[] PROGMEM = "Change";
|
||||
const char EN_10[] PROGMEM = "Calibrate";
|
||||
const char EN_11[] PROGMEM = "Rename";
|
||||
const char EN_12[] PROGMEM = "Delete";
|
||||
const char EN_13[] PROGMEM = "Add";
|
||||
const char EN_14[] PROGMEM = "Save";
|
||||
const char EN_15[] PROGMEM = "Default";
|
||||
const char EN_16[] PROGMEM = "Sleep";
|
||||
const char EN_17[] PROGMEM = "Boost";
|
||||
const char EN_18[] PROGMEM = "Save";
|
||||
const char EN_19[] PROGMEM = "Sleep";
|
||||
const char EN_20[] PROGMEM = "Off";
|
||||
const char EN_21[] PROGMEM = "Boost";
|
||||
const char EN_22[] PROGMEM = "Save";
|
||||
const char EN_23[] PROGMEM = "Direct";
|
||||
const char EN_24[] PROGMEM = "PID";
|
||||
const char EN_25[] PROGMEM = "Big";
|
||||
const char EN_26[] PROGMEM = "Infos";
|
||||
const char EN_27[] PROGMEM = "OFF";
|
||||
const char EN_28[] PROGMEM = "ON";
|
||||
const char EN_29[] PROGMEM = "NO";
|
||||
const char EN_30[] PROGMEM = "YES";
|
||||
const char EN_31[] PROGMEM = "CN";
|
||||
const char EN_32[] PROGMEM = "EN";
|
||||
const char EN_33[] PROGMEM = "NO";
|
||||
const char EN_34[] PROGMEM = "OK";
|
||||
const char EN_35[] PROGMEM = "Main Screen";
|
||||
const char EN_36[] PROGMEM = "Flip";
|
||||
const char EN_37[] PROGMEM = "Save";
|
||||
const char EN_38[] PROGMEM = "About";
|
||||
const char EN_39[] PROGMEM = "JP";
|
||||
const char EN_40[] PROGMEM = "Lock";
|
||||
const char EN_41[] PROGMEM = "Rotary";
|
||||
|
||||
const char *const EN_table[] PROGMEM = {EN_0, EN_1, EN_2, EN_3, EN_4, EN_5, EN_41, EN_6, EN_40, EN_7, EN_38, EN_8, EN_9, EN_10, EN_11, EN_12, EN_13, EN_8, EN_15, EN_16, EN_17, EN_18, EN_19, EN_20, EN_21, EN_22, EN_23, EN_24, EN_25, EN_26, EN_27, EN_28, EN_29, EN_30, EN_31, EN_32, EN_39, EN_35, EN_36, EN_37,};
|
||||
|
||||
/*
|
||||
#!/usr/bin/python
|
||||
# -*- coding: UTF-8 -*-
|
||||
for num in range(0,38):
|
||||
print("EN_",end="")
|
||||
print(num,end='')
|
||||
print(",",end="")
|
||||
*/
|
||||
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
多语言支持
|
||||
Multilingual support
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
*/
|
||||
|
||||
/*
|
||||
中文语言库 CHINESE
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
本地化提示:你可以按照位图的大小,把这里的文字位图替换成你的语言,确保位图分辨率一致即可,我们欢迎你把程序翻译为你当地的语言!
|
||||
Localization tips: you can according to the size of the bitmap,
|
||||
replace the text bitmap here with your language,
|
||||
ensure that the bitmap resolution is consistent,
|
||||
we welcome you to translate the program into your local language!
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
*/
|
||||
//width:28,height:14 主界面中文提示
|
||||
//Main Screen
|
||||
//错误-ERROR
|
||||
const unsigned char S1[] PROGMEM = { 0x20, 0x92, 0x1f, 0xc0, 0x3d, 0xf9, 0x90, 0x40, 0x20, 0x90, 0x90, 0x40, 0x40, 0x90, 0x1f, 0xc0, 0x7b, 0xff, 0x00, 0x00, 0xa0, 0x01, 0x3f, 0xe0, 0x21, 0xf9, 0x02, 0x00, 0xfd, 0x09, 0x02, 0x00, 0x21, 0x09, 0x7f, 0xf0, 0x21, 0xf9, 0x05, 0x00, 0x21, 0x09, 0x45, 0x00, 0x29, 0x09, 0x88, 0x80, 0x31, 0xf9, 0x10, 0x70, 0x21, 0x08, 0x20, 0x20 };
|
||||
//关机-OFF
|
||||
const unsigned char S2[] PROGMEM = { 0x10, 0x40, 0x47, 0xc0, 0x17, 0xfc, 0x44, 0x40, 0x20, 0x03, 0xf4, 0x40, 0x23, 0xf8, 0x44, 0x40, 0x62, 0x08, 0xc4, 0x40, 0xa3, 0xf8, 0xe4, 0x40, 0x20, 0x01, 0x54, 0x40, 0x2f, 0xfd, 0x44, 0x40, 0x28, 0x06, 0x44, 0x40, 0x23, 0xf8, 0x44, 0x40, 0x20, 0x40, 0x44, 0x50, 0x20, 0x40, 0x48, 0x50, 0x21, 0x40, 0x50, 0x30, 0x20, 0x80, 0x40, 0x00 };
|
||||
//休眠-SLEEP
|
||||
const unsigned char S3[] PROGMEM = { 0x10, 0x83, 0xdf, 0xc0, 0x10, 0x82, 0x50, 0x40, 0x20, 0x82, 0x50, 0x40, 0x2f, 0xff, 0xdf, 0xc0, 0x60, 0x82, 0x52, 0x00, 0x61, 0xc2, 0x52, 0x00, 0xa1, 0xc2, 0x5f, 0xe0, 0x22, 0xa3, 0xd2, 0x00, 0x22, 0xa2, 0x51, 0x00, 0x24, 0x92, 0x51, 0x00, 0x28, 0x8e, 0x50, 0x90, 0x30, 0x8b, 0xd4, 0x50, 0x20, 0x82, 0x58, 0x30, 0x20, 0x80, 0x10, 0x10 };
|
||||
//提温-BOOST
|
||||
const unsigned char S4[] PROGMEM = { 0x23, 0xf2, 0x1f, 0xc0, 0x22, 0x11, 0x10, 0x40, 0xfb, 0xf0, 0x90, 0x40, 0x22, 0x12, 0x1f, 0xc0, 0x2a, 0x11, 0x10, 0x40, 0x33, 0xf1, 0x10, 0x40, 0x60, 0x00, 0x5f, 0xc0, 0xaf, 0xfc, 0x80, 0x00, 0x20, 0x41, 0x3f, 0xe0, 0x22, 0x43, 0x25, 0x20, 0x22, 0x79, 0x25, 0x20, 0x22, 0x41, 0x25, 0x20, 0xa5, 0x41, 0x25, 0x20, 0x48, 0xfd, 0x7f, 0xf0 };
|
||||
//正常工作-WORKY
|
||||
const unsigned char S5[] PROGMEM = { 0x7f, 0xf8, 0x48, 0x80, 0x02, 0x00, 0x49, 0x00, 0x02, 0x01, 0xff, 0xf0, 0x02, 0x01, 0x00, 0x10, 0x02, 0x02, 0x7f, 0x20, 0x22, 0x00, 0x41, 0x00, 0x23, 0xf0, 0x7f, 0x00, 0x22, 0x00, 0x08, 0x00, 0x22, 0x00, 0xff, 0x80, 0x22, 0x00, 0x88, 0x80, 0x22, 0x00, 0x88, 0x80, 0x22, 0x00, 0x8a, 0x80, 0x22, 0x00, 0x89, 0x00, 0xff, 0xfc, 0x08, 0x00 };
|
||||
//加热-HEAT
|
||||
const unsigned char S6[] PROGMEM = { 0x0f, 0x42, 0x1f, 0xc0, 0x78, 0x41, 0x10, 0x40, 0x08, 0x40, 0x90, 0x40, 0x08, 0x42, 0x1f, 0xc0, 0x08, 0x41, 0x10, 0x40, 0xff, 0xfd, 0x10, 0x40, 0x08, 0x40, 0x5f, 0xc0, 0x08, 0x40, 0x80, 0x00, 0x08, 0x41, 0x3f, 0xe0, 0x08, 0x43, 0x25, 0x20, 0x10, 0x41, 0x25, 0x20, 0x10, 0x41, 0x25, 0x20, 0x20, 0x41, 0x25, 0x20, 0x40, 0x41, 0x7f, 0xf0 };
|
||||
//维持-HOLD
|
||||
const unsigned char S7[] PROGMEM = { 0x11, 0x40, 0x82, 0x00, 0x21, 0x20, 0x8f, 0xe0, 0x23, 0xfc, 0x82, 0x00, 0x4a, 0x23, 0xe2, 0x00, 0xfe, 0x20, 0x9f, 0xf0, 0x13, 0xf8, 0x80, 0x80, 0x22, 0x20, 0xc0, 0x80, 0x42, 0x21, 0xbf, 0xf0, 0xfb, 0xfa, 0x88, 0x80, 0x02, 0x20, 0x84, 0x80, 0x02, 0x20, 0x84, 0x80, 0x1a, 0x20, 0x80, 0x80, 0xe3, 0xfe, 0x82, 0x80, 0x02, 0x01, 0x01, 0x00 };
|
||||
const unsigned char *S_table[] = {S1, S2, S3, S4, S5, S6, S7};
|
||||
|
||||
// 菜单 width:36,height:16
|
||||
//MENU Oj
|
||||
/*
|
||||
The order here(↓) can refer to EN_table(↑↑↑)
|
||||
*/
|
||||
const unsigned char t0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0x90, 0xf8, 0x00, 0x01, 0x08, 0x08, 0x88, 0x00, 0x0a, 0x10, 0x08, 0x88, 0x00, 0x04, 0x7f, 0x01, 0x07, 0x00, 0x1f, 0xc1, 0x3a, 0x00, 0x00, 0x05, 0x49, 0x09, 0xfc, 0x00, 0x04, 0x49, 0x08, 0x84, 0x00, 0x04, 0x49, 0x08, 0x88, 0x00, 0x04, 0x49, 0x08, 0x48, 0x00, 0x04, 0x49, 0x08, 0x50, 0x00, 0x04, 0x49, 0x0a, 0x20, 0x00, 0x04, 0x16, 0x0c, 0x58, 0x00, 0x14, 0x21, 0x89, 0x87, 0x00, 0x08, 0xc0, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x08, 0x20, 0x00, 0x08, 0x82, 0x0b, 0xff, 0x00, 0x04, 0x82, 0x0a, 0x01, 0x00, 0x10, 0xfe, 0x3c, 0x51, 0x00, 0x08, 0x82, 0x08, 0x88, 0x00, 0x08, 0x82, 0x09, 0x04, 0x00, 0x02, 0xfe, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x19, 0xfc, 0x00, 0x09, 0xff, 0x28, 0x20, 0x00, 0x19, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x08, 0x20, 0x00, 0x09, 0x29, 0x2b, 0xff, 0x00, 0x0b, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x04, 0x00, 0x1f, 0xff, 0xa2, 0x04, 0x00, 0x10, 0x00, 0xa2, 0xff, 0x00, 0x00, 0x01, 0x22, 0x04, 0x00, 0x0f, 0xfe, 0x22, 0x04, 0x00, 0x00, 0x40, 0x3e, 0x44, 0x00, 0x00, 0x40, 0x22, 0x24, 0x00, 0x04, 0x40, 0x22, 0x24, 0x00, 0x04, 0x7c, 0x22, 0x04, 0x00, 0x04, 0x40, 0x22, 0x04, 0x00, 0x0a, 0x40, 0x3e, 0x04, 0x00, 0x09, 0x40, 0x22, 0x24, 0x00, 0x10, 0xff, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00 };
|
||||
const unsigned char t3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x12, 0x02, 0x00, 0x05, 0xff, 0x9f, 0xd2, 0x00, 0x05, 0x00, 0x92, 0x12, 0x00, 0x1e, 0x28, 0xa2, 0x12, 0x00, 0x04, 0x44, 0x3f, 0xf2, 0x00, 0x04, 0x82, 0x02, 0x12, 0x00, 0x06, 0x00, 0x02, 0x12, 0x00, 0x0c, 0xfe, 0x1f, 0xd2, 0x00, 0x14, 0x10, 0x12, 0x52, 0x00, 0x04, 0x10, 0x12, 0x42, 0x00, 0x04, 0x10, 0x13, 0x42, 0x00, 0x04, 0x10, 0x12, 0x82, 0x00, 0x15, 0xff, 0x82, 0x0a, 0x00, 0x08, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x0f, 0xf8, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x04, 0x02, 0x3f, 0xfe, 0x00, 0x04, 0x02, 0x00, 0x80, 0x00, 0x07, 0xfe, 0x00, 0x80, 0x00, 0x00, 0x90, 0x04, 0x90, 0x00, 0x08, 0x91, 0x0c, 0x88, 0x00, 0x06, 0x93, 0x10, 0x86, 0x00, 0x02, 0x94, 0x20, 0x82, 0x00, 0x00, 0x90, 0x00, 0x80, 0x00, 0x00, 0x90, 0x02, 0x80, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t5[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x1f, 0xff, 0x9f, 0xfc, 0x00, 0x00, 0x40, 0x04, 0x10, 0x00, 0x0f, 0xff, 0x02, 0x20, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x08, 0x42, 0x0f, 0xf8, 0x00, 0x08, 0x42, 0x08, 0x08, 0x00, 0x0f, 0xfe, 0x08, 0x08, 0x00, 0x08, 0x02, 0x0f, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x08, 0x00, 0x08, 0x00, 0x08, 0x08, 0x00, 0x08, 0x00, 0x0f, 0xf8, 0x00, 0x10, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t6[] PROGMEM = { 0x09, 0xff, 0x00, 0x40, 0x00, 0x04, 0x20, 0x3f, 0xff, 0x00, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x1c, 0x42, 0x0f, 0xfc, 0x00, 0x04, 0x42, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x04, 0x00, 0x0f, 0xfc, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x04, 0x81, 0x00, 0x00, 0x00, 0x05, 0x81, 0x0f, 0xfc, 0x00, 0x06, 0x81, 0x08, 0x04, 0x00, 0x04, 0xff, 0x08, 0x04, 0x00, 0x00, 0x81, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
const unsigned char t7[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xfe, 0x00, 0x01, 0x00, 0x08, 0x20, 0x00, 0x03, 0xff, 0x08, 0x20, 0x00, 0x02, 0x01, 0x08, 0x20, 0x00, 0x04, 0x22, 0x08, 0x20, 0x00, 0x08, 0x20, 0x0b, 0xfe, 0x00, 0x10, 0x20, 0x08, 0x20, 0x00, 0x00, 0x50, 0x08, 0x28, 0x00, 0x00, 0x50, 0x08, 0x24, 0x00, 0x00, 0x88, 0x08, 0x22, 0x00, 0x00, 0x88, 0x10, 0x20, 0x00, 0x01, 0x04, 0x10, 0x20, 0x00, 0x02, 0x03, 0xa7, 0xff, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char Back[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x00, 0x08, 0xf8, 0x3f, 0xfe, 0x00, 0x04, 0x80, 0x20, 0x02, 0x00, 0x00, 0x80, 0x20, 0x02, 0x00, 0x00, 0xbe, 0x23, 0xe2, 0x00, 0x1c, 0x82, 0x22, 0x22, 0x00, 0x04, 0xa4, 0x22, 0x22, 0x00, 0x04, 0x94, 0x22, 0x22, 0x00, 0x04, 0x88, 0x22, 0x22, 0x00, 0x04, 0x94, 0x23, 0xe2, 0x00, 0x05, 0x22, 0x20, 0x02, 0x00, 0x05, 0x42, 0x20, 0x02, 0x00, 0x0a, 0x00, 0x3f, 0xfe, 0x00, 0x11, 0xff, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
const unsigned char t1_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x20, 0x90, 0x00, 0x02, 0x7f, 0x98, 0x90, 0x00, 0x1f, 0x80, 0x09, 0xff, 0x00, 0x02, 0x22, 0x01, 0x10, 0x00, 0x06, 0x21, 0x8b, 0x10, 0x00, 0x07, 0x62, 0x8d, 0xfe, 0x00, 0x0a, 0xa2, 0x09, 0x10, 0x00, 0x0a, 0x14, 0x11, 0x10, 0x00, 0x12, 0x14, 0x31, 0xfe, 0x00, 0x02, 0x08, 0x11, 0x10, 0x00, 0x02, 0x14, 0x11, 0x10, 0x00, 0x02, 0x22, 0x11, 0x10, 0x00, 0x02, 0x43, 0x91, 0xff, 0x00, 0x02, 0x81, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t1_2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80, 0x00, 0x00, 0x50, 0x01, 0xfc, 0x00, 0x00, 0x88, 0x01, 0x04, 0x00, 0x01, 0x04, 0x03, 0x08, 0x00, 0x06, 0xfb, 0x04, 0x90, 0x00, 0x08, 0x00, 0xc0, 0x60, 0x00, 0x07, 0xdf, 0x01, 0x80, 0x00, 0x04, 0x51, 0x06, 0x00, 0x00, 0x04, 0x51, 0x1b, 0xfe, 0x00, 0x04, 0x51, 0x02, 0x02, 0x00, 0x07, 0xd9, 0x02, 0x02, 0x00, 0x04, 0x56, 0x02, 0x02, 0x00, 0x00, 0x10, 0x03, 0xfe, 0x00, 0x00, 0x10, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t1_3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x78, 0xbc, 0x20, 0x00, 0x09, 0x48, 0xa4, 0x50, 0x00, 0x09, 0x4a, 0xa8, 0x50, 0x00, 0x09, 0x4a, 0xa8, 0x88, 0x00, 0x09, 0x4a, 0xb1, 0x04, 0x00, 0x1f, 0xfe, 0xaa, 0xfb, 0x00, 0x09, 0x4a, 0xa4, 0x20, 0x00, 0x09, 0x4a, 0xa4, 0x20, 0x00, 0x09, 0x4a, 0xa7, 0xfe, 0x00, 0x09, 0x4a, 0xb4, 0x20, 0x00, 0x09, 0x48, 0xa9, 0x24, 0x00, 0x0b, 0x48, 0xa2, 0x22, 0x00, 0x08, 0x8a, 0xa4, 0xa2, 0x00, 0x11, 0x19, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t1_4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x10, 0x00, 0x1f, 0xdc, 0x3e, 0xfe, 0x00, 0x08, 0x90, 0x02, 0x12, 0x00, 0x05, 0x10, 0x04, 0xff, 0x00, 0x1f, 0xdf, 0x84, 0x12, 0x00, 0x02, 0x12, 0x0c, 0xfe, 0x00, 0x1f, 0xd2, 0x02, 0x10, 0x00, 0x02, 0x12, 0x22, 0xfe, 0x00, 0x0a, 0x92, 0x14, 0x10, 0x00, 0x0a, 0x52, 0x14, 0x10, 0x00, 0x12, 0x22, 0x0d, 0xff, 0x00, 0x02, 0x22, 0x08, 0x10, 0x00, 0x0a, 0x42, 0x14, 0x10, 0x00, 0x04, 0x02, 0x23, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
//默认
|
||||
const unsigned char t2_0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc8, 0x10, 0x20, 0x00, 0x12, 0x4a, 0x0c, 0x20, 0x00, 0x1a, 0xc9, 0x04, 0x20, 0x00, 0x17, 0x48, 0x00, 0x20, 0x00, 0x1f, 0xff, 0xb8, 0x20, 0x00, 0x02, 0x08, 0x08, 0x50, 0x00, 0x1f, 0xc8, 0x08, 0x50, 0x00, 0x02, 0x08, 0x08, 0x50, 0x00, 0x03, 0xc8, 0x08, 0x48, 0x00, 0x1e, 0x14, 0x08, 0x88, 0x00, 0x01, 0x54, 0x0a, 0x88, 0x00, 0x15, 0x22, 0x0c, 0x84, 0x00, 0x14, 0x43, 0x89, 0x07, 0x00, 0x00, 0x81, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
//休眠
|
||||
const unsigned char t2_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x3d, 0xfc, 0x00, 0x02, 0x10, 0x25, 0x04, 0x00, 0x04, 0x10, 0x25, 0x04, 0x00, 0x05, 0xff, 0xbd, 0xfc, 0x00, 0x0c, 0x10, 0x25, 0x20, 0x00, 0x0c, 0x38, 0x25, 0x20, 0x00, 0x14, 0x38, 0x25, 0xfe, 0x00, 0x04, 0x54, 0x3d, 0x20, 0x00, 0x04, 0x54, 0x25, 0x10, 0x00, 0x04, 0x92, 0x25, 0x10, 0x00, 0x05, 0x11, 0xa5, 0x09, 0x00, 0x06, 0x11, 0x3d, 0x45, 0x00, 0x04, 0x10, 0x25, 0x83, 0x00, 0x04, 0x10, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
//提温
|
||||
const unsigned char t2_2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x21, 0xfc, 0x00, 0x04, 0x42, 0x11, 0x04, 0x00, 0x1f, 0x7e, 0x09, 0x04, 0x00, 0x04, 0x42, 0x21, 0xfc, 0x00, 0x05, 0x42, 0x11, 0x04, 0x00, 0x06, 0x7e, 0x11, 0x04, 0x00, 0x0c, 0x00, 0x05, 0xfc, 0x00, 0x15, 0xff, 0x88, 0x00, 0x00, 0x04, 0x08, 0x13, 0xfe, 0x00, 0x04, 0x48, 0x32, 0x52, 0x00, 0x04, 0x4f, 0x12, 0x52, 0x00, 0x04, 0x48, 0x12, 0x52, 0x00, 0x14, 0xa8, 0x12, 0x52, 0x00, 0x09, 0x1f, 0x97, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
//关机
|
||||
const unsigned char t3_1[] PROGMEM = { 0x01, 0x04, 0x04, 0x7c, 0x00, 0x00, 0x88, 0x04, 0x44, 0x00, 0x0f, 0xff, 0x3f, 0x44, 0x00, 0x00, 0x20, 0x04, 0x44, 0x00, 0x00, 0x20, 0x0c, 0x44, 0x00, 0x00, 0x20, 0x0e, 0x44, 0x00, 0x1f, 0xff, 0x95, 0x44, 0x00, 0x00, 0x20, 0x14, 0x44, 0x00, 0x00, 0x50, 0x24, 0x44, 0x00, 0x00, 0x50, 0x04, 0x44, 0x00, 0x00, 0x88, 0x04, 0x45, 0x00, 0x01, 0x04, 0x04, 0x85, 0x00, 0x06, 0x03, 0x85, 0x03, 0x00, 0x18, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
const unsigned char t_4[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x20, 0x00, 0x0f, 0xff, 0x09, 0xfc, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x88, 0x00, 0x03, 0xfe, 0x08, 0x50, 0x00, 0x02, 0x02, 0x0b, 0xfe, 0x00, 0x03, 0xfe, 0x0c, 0x40, 0x00, 0x02, 0x02, 0x18, 0x40, 0x00, 0x03, 0xfe, 0x2b, 0xfe, 0x00, 0x02, 0x02, 0x08, 0x48, 0x00, 0x03, 0xfe, 0x08, 0x88, 0x00, 0x02, 0x02, 0x08, 0x50, 0x00, 0x02, 0x02, 0x28, 0x30, 0x00, 0x1f, 0xff, 0x91, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t_PID[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc3, 0xf1, 0xe0, 0x00, 0x0f, 0xe3, 0xf1, 0xf8, 0x00, 0x0c, 0x70, 0xc1, 0x9e, 0x00, 0x0c, 0x30, 0xc1, 0x86, 0x00, 0x0c, 0x30, 0xc1, 0x83, 0x00, 0x0c, 0x30, 0xc1, 0x83, 0x00, 0x0c, 0x60, 0xc1, 0x83, 0x00, 0x0c, 0x60, 0xc1, 0x83, 0x00, 0x0f, 0xc0, 0xc1, 0x83, 0x00, 0x0f, 0xc0, 0xc1, 0x86, 0x00, 0x0c, 0x00, 0xc1, 0x86, 0x00, 0x0c, 0x00, 0xc1, 0x98, 0x00, 0x0c, 0x03, 0xf1, 0xf8, 0x00, 0x0c, 0x03, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
const unsigned char t5_0[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0x88, 0x40, 0x00, 0x0a, 0x24, 0x10, 0x40, 0x00, 0x11, 0x42, 0x10, 0xfe, 0x00, 0x04, 0x00, 0x22, 0x82, 0x00, 0x02, 0xff, 0x3d, 0x02, 0x00, 0x08, 0x01, 0x0a, 0x42, 0x00, 0x09, 0xf9, 0x10, 0x32, 0x00, 0x09, 0x09, 0x20, 0x12, 0x00, 0x09, 0xf9, 0x3e, 0x02, 0x00, 0x09, 0x09, 0x00, 0x02, 0x00, 0x09, 0x09, 0x0e, 0x02, 0x00, 0x09, 0xf9, 0x30, 0x22, 0x00, 0x08, 0x05, 0x00, 0x14, 0x00, 0x08, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t5_1[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x44, 0x10, 0xfe, 0x00, 0x04, 0x28, 0x10, 0x92, 0x00, 0x05, 0xff, 0x22, 0x92, 0x00, 0x00, 0x10, 0x3c, 0x92, 0x00, 0x00, 0x10, 0x08, 0x92, 0x00, 0x1c, 0xfe, 0x10, 0x92, 0x00, 0x04, 0x10, 0x20, 0xfe, 0x00, 0x04, 0x10, 0x3e, 0x92, 0x00, 0x05, 0xff, 0x80, 0x92, 0x00, 0x04, 0x10, 0x00, 0x92, 0x00, 0x05, 0x10, 0x0e, 0x92, 0x00, 0x06, 0x10, 0x30, 0x92, 0x00, 0x04, 0x10, 0x00, 0xfe, 0x00, 0x00, 0x10, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t5_3[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x3f, 0xfe, 0x00, 0x1f, 0xff, 0x81, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x07, 0xfe, 0x0f, 0xf8, 0x00, 0x04, 0x02, 0x08, 0x08, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x07, 0xfe, 0x08, 0x88, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x04, 0x02, 0x08, 0x88, 0x00, 0x07, 0xfe, 0x08, 0x88, 0x00, 0x04, 0x02, 0x09, 0x48, 0x00, 0x04, 0x02, 0x02, 0x30, 0x00, 0x07, 0xfe, 0x04, 0x0c, 0x00, 0x04, 0x02, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
const unsigned char t_off[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x04, 0xff, 0x00, 0x00, 0x44, 0x02, 0x01, 0x00, 0x07, 0xff, 0x90, 0x21, 0x00, 0x00, 0x10, 0x10, 0x21, 0x00, 0x00, 0x10, 0x17, 0xfd, 0x00, 0x00, 0x10, 0x10, 0x21, 0x00, 0x0f, 0xff, 0xd0, 0x61, 0x00, 0x00, 0x10, 0x10, 0xa1, 0x00, 0x00, 0x28, 0x11, 0x21, 0x00, 0x00, 0x28, 0x12, 0x21, 0x00, 0x00, 0x44, 0x14, 0x21, 0x00, 0x00, 0x82, 0x10, 0xa1, 0x00, 0x03, 0x01, 0xd0, 0x45, 0x00, 0x0c, 0x00, 0x90, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t_on[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x20, 0x00, 0x00, 0x84, 0x07, 0xff, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x00, 0x84, 0x04, 0x01, 0x00, 0x0f, 0xff, 0xc7, 0xff, 0x00, 0x00, 0x84, 0x04, 0x00, 0x00, 0x00, 0x84, 0x04, 0x00, 0x00, 0x00, 0x84, 0x05, 0xff, 0x00, 0x00, 0x84, 0x05, 0x01, 0x00, 0x01, 0x04, 0x09, 0x01, 0x00, 0x01, 0x04, 0x09, 0x01, 0x00, 0x02, 0x04, 0x11, 0xff, 0x00, 0x04, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
const unsigned char t_NO[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x04, 0x91, 0x00, 0x04, 0x40, 0x02, 0x52, 0x00, 0x04, 0x7f, 0x90, 0x54, 0x00, 0x04, 0x50, 0x88, 0xff, 0x00, 0x07, 0xd0, 0x84, 0x81, 0x00, 0x04, 0x51, 0x00, 0x81, 0x00, 0x04, 0x49, 0x01, 0xff, 0x00, 0x07, 0xca, 0x02, 0x81, 0x00, 0x04, 0x44, 0x04, 0x81, 0x00, 0x04, 0x4a, 0x1c, 0xff, 0x00, 0x07, 0xea, 0x04, 0x81, 0x00, 0x0c, 0x51, 0x04, 0x81, 0x00, 0x00, 0x61, 0xc4, 0x85, 0x00, 0x00, 0x40, 0x80, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t_OK[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xdf, 0x10, 0x20, 0x00, 0x02, 0x12, 0x0c, 0x20, 0x00, 0x02, 0x24, 0x04, 0x20, 0x00, 0x04, 0x7f, 0x80, 0x20, 0x00, 0x04, 0x24, 0xb8, 0x20, 0x00, 0x0f, 0xa4, 0x88, 0x50, 0x00, 0x14, 0xbf, 0x88, 0x50, 0x00, 0x04, 0xa4, 0x88, 0x50, 0x00, 0x04, 0xa4, 0x88, 0x48, 0x00, 0x04, 0xbf, 0x88, 0x88, 0x00, 0x04, 0xa4, 0x8a, 0x88, 0x00, 0x07, 0xa4, 0x8c, 0x84, 0x00, 0x04, 0x44, 0x89, 0x07, 0x00, 0x00, 0x81, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
const unsigned char t_CN_CN[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x0f, 0xff, 0x3f, 0xff, 0x00, 0x08, 0x41, 0x04, 0x08, 0x00, 0x08, 0x41, 0x04, 0x08, 0x00, 0x08, 0x41, 0x04, 0x10, 0x00, 0x08, 0x41, 0x02, 0x10, 0x00, 0x0f, 0xff, 0x02, 0x20, 0x00, 0x08, 0x41, 0x01, 0x20, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0x40, 0x01, 0x30, 0x00, 0x00, 0x40, 0x02, 0x08, 0x00, 0x00, 0x40, 0x0c, 0x07, 0x00, 0x00, 0x40, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t_CN_EN[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x80, 0x00, 0x1f, 0xff, 0x80, 0x80, 0x00, 0x01, 0x10, 0x3f, 0xff, 0x00, 0x00, 0x40, 0x04, 0x08, 0x00, 0x07, 0xfc, 0x04, 0x08, 0x00, 0x04, 0x44, 0x04, 0x10, 0x00, 0x04, 0x44, 0x02, 0x10, 0x00, 0x04, 0x44, 0x02, 0x20, 0x00, 0x1f, 0xff, 0x81, 0x20, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0xa0, 0x01, 0x30, 0x00, 0x01, 0x10, 0x02, 0x08, 0x00, 0x06, 0x0c, 0x0c, 0x07, 0x00, 0x18, 0x03, 0xb0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t_CN_JP[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x13, 0xfe, 0x00, 0x04, 0x02, 0x08, 0x40, 0x00, 0x04, 0x02, 0x08, 0x40, 0x00, 0x04, 0x02, 0x01, 0xfc, 0x00, 0x04, 0x02, 0x38, 0x84, 0x00, 0x04, 0x02, 0x08, 0x84, 0x00, 0x07, 0xfe, 0x0f, 0xff, 0x00, 0x04, 0x02, 0x08, 0x00, 0x00, 0x04, 0x02, 0x09, 0xfe, 0x00, 0x04, 0x02, 0x09, 0x02, 0x00, 0x04, 0x02, 0x0b, 0x02, 0x00, 0x04, 0x02, 0x0d, 0x02, 0x00, 0x07, 0xfe, 0x09, 0xfe, 0x00, 0x04, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
//翻转
|
||||
const unsigned char t4f[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x1d, 0xc2, 0x08, 0x00, 0x05, 0x44, 0x42, 0x08, 0x00, 0x03, 0x84, 0x5f, 0xbf, 0x00, 0x0f, 0xe4, 0x44, 0x10, 0x00, 0x01, 0x15, 0x45, 0x10, 0x00, 0x05, 0x4c, 0xc9, 0x7f, 0x80, 0x09, 0x24, 0x4f, 0x90, 0x00, 0x07, 0xc4, 0xc1, 0x10, 0x00, 0x05, 0x4d, 0x41, 0x3f, 0x00, 0x05, 0x54, 0x43, 0x81, 0x00, 0x07, 0xc4, 0x4d, 0x02, 0x00, 0x05, 0x44, 0x41, 0x14, 0x00, 0x05, 0x55, 0x41, 0x08, 0x00, 0x07, 0xc8, 0x81, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
//保存
|
||||
const unsigned char t_save[] PROGMEM = { 0x02, 0xfe, 0x01, 0x00, 0x00, 0x02, 0x82, 0x3f, 0xff, 0x00, 0x04, 0x82, 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x0c, 0x10, 0x04, 0xfc, 0x00, 0x14, 0x10, 0x04, 0x08, 0x00, 0x05, 0xff, 0x8c, 0x10, 0x00, 0x04, 0x10, 0x14, 0x10, 0x00, 0x04, 0x38, 0x25, 0xff, 0x00, 0x04, 0x34, 0x04, 0x10, 0x00, 0x04, 0x52, 0x04, 0x10, 0x00, 0x04, 0x91, 0x84, 0x10, 0x00, 0x05, 0x10, 0x04, 0x50, 0x00, 0x04, 0x10, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char tAbout[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x0f, 0xfe, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x07, 0xff, 0x80, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x10, 0x1f, 0xff, 0x80, 0x0f, 0xff, 0xc0, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x28, 0x00, 0x40, 0x00, 0x00, 0x28, 0x00, 0x40, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x00, 0x82, 0x00, 0x40, 0x00, 0x03, 0x01, 0xc1, 0x40, 0x00, 0x0c, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char tPassword[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1f, 0x7e, 0x00, 0x1f, 0xff, 0x84, 0x02, 0x00, 0x10, 0x80, 0x84, 0x42, 0x00, 0x0a, 0x4a, 0x04, 0x42, 0x00, 0x0a, 0x31, 0x08, 0x42, 0x00, 0x12, 0xc5, 0x0f, 0x42, 0x00, 0x03, 0x04, 0x19, 0x7f, 0x00, 0x1d, 0xf8, 0x29, 0x01, 0x00, 0x00, 0x40, 0x09, 0x01, 0x00, 0x08, 0x42, 0x09, 0xfd, 0x00, 0x08, 0x42, 0x09, 0x01, 0x00, 0x08, 0x42, 0x0f, 0x01, 0x00, 0x0f, 0xfe, 0x09, 0x05, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char t19[] PROGMEM = { 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x1f, 0x88, 0xfe, 0x00, 0x1f, 0xd0, 0x0e, 0x22, 0x00, 0x04, 0x20, 0x30, 0x22, 0x00, 0x04, 0x5f, 0x80, 0x22, 0x00, 0x07, 0x84, 0x9e, 0x22, 0x00, 0x04, 0x85, 0x08, 0x22, 0x00, 0x04, 0x94, 0x08, 0x22, 0x00, 0x04, 0x94, 0x28, 0xfe, 0x00, 0x04, 0x97, 0x1e, 0x42, 0x00, 0x04, 0x94, 0x08, 0x42, 0x00, 0x08, 0x94, 0x08, 0x42, 0x00, 0x0a, 0xac, 0x0a, 0x42, 0x00, 0x11, 0x44, 0x0c, 0x42, 0x00, 0x00, 0x83, 0x89, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
const unsigned char *CN_table[] = {
|
||||
t0, t1, t2, t3, t4, t5, t19 , t7, tPassword, t6, tAbout, Back, //0
|
||||
t0, t1_1, t1_2, t1_3, t1_4, Back, //1
|
||||
t2_0, t2_1, t2_2, t_save, //2
|
||||
t2_1, t3_1, t2_2, t_save,//3
|
||||
t_4, t_PID,//4
|
||||
t5_0, t5_1,//5
|
||||
t_off, t_on,//6
|
||||
t_NO, t_OK,//7
|
||||
t_CN_CN, t_CN_EN, t_CN_JP, //8
|
||||
t5_3, t4f, t_save, //9
|
||||
};
|
||||
|
||||
/*
|
||||
日语 Japanese
|
||||
*/
|
||||
/*
|
||||
8x8 dot Japanese font for Arduboy
|
||||
|
||||
Copyright (c) 2016 emutyworks
|
||||
|
||||
Released under the MIT license
|
||||
https://github.com/emutyworks/8x8DotJPFont/blob/master/LICENSE.txt
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
利用しないフォントデータはヘッダファイルを読み込まないようにするとメモリが節約できます、
|
||||
drawText() 実行時にフォントが無い場合は処理がスキップされます。
|
||||
|
||||
例) 8x8 dot ひらがな・カタカナ・記号 のみ利用
|
||||
#include "misaki_font_f0.h" // 8x8 dot ひらがな・カタカナ・記号
|
||||
//#include "misaki_font_f1.h" // 4x8 dot 英語・カタカナ・記号
|
||||
//#include "misaki_font_f2.h" // 8x8 dot 漢字
|
||||
*/
|
||||
|
||||
#if LANG_JP_State
|
||||
#define MISAKI_FONT_H
|
||||
|
||||
#define MISAKI_FONT_F0_PAGE 0xF0
|
||||
#define MISAKI_FONT_F1_PAGE 0xF1
|
||||
#define MISAKI_FONT_F2_PAGE 0xF2
|
||||
|
||||
#define MISAKI_FONT_F0_W 8
|
||||
#define MISAKI_FONT_F1_W 3
|
||||
#define MISAKI_FONT_F2_W 7
|
||||
|
||||
#define MISAKI_FONT_F0_SIZE 0xEF
|
||||
#define MISAKI_FONT_F1_SIZE 0x9D
|
||||
#define MISAKI_FONT_F2_SIZE 0x22 // misaki_font_f2.h の最終行の値をここに設定する、最大0xEFまで
|
||||
PROGMEM const uint8_t misaki_font_0x00[1] = { 0x00 };
|
||||
#define MISAKI_FONT_F0_H
|
||||
PROGMEM const uint8_t misaki_font_f0[ MISAKI_FONT_F0_SIZE + 1 ][ MISAKI_FONT_F0_W ] =
|
||||
{
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x00 */
|
||||
{ 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x01 、 */
|
||||
{ 0x20, 0x50, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x02 。 */
|
||||
{ 0x50, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x03 , */
|
||||
{ 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x04 . */
|
||||
{ 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, /* 0x05 ・ */
|
||||
{ 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00 }, /* 0x06 : */
|
||||
{ 0x00, 0x00, 0x56, 0x36, 0x00, 0x00, 0x00, 0x00 }, /* 0x07 ; */
|
||||
{ 0x00, 0x02, 0x01, 0x51, 0x09, 0x09, 0x06, 0x00 }, /* 0x08 ? */
|
||||
{ 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00 }, /* 0x09 ! */
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x41, 0x41, 0x00 }, /* 0x0A [ */
|
||||
{ 0x41, 0x41, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x0B ] */
|
||||
{ 0x00, 0x00, 0x00, 0x3f, 0x01, 0x01, 0x01, 0x00 }, /* 0x0C 「 */
|
||||
{ 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00 }, /* 0x0D 」 */
|
||||
{ 0x00, 0x00, 0x3f, 0x21, 0x3d, 0x05, 0x07, 0x00 }, /* 0x0E 『 */
|
||||
{ 0x70, 0x50, 0x5e, 0x42, 0x7e, 0x00, 0x00, 0x00 }, /* 0x0F 』 */
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x63, 0x41, 0x00 }, /* 0x10 【 */
|
||||
{ 0x41, 0x63, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x11 】 */
|
||||
{ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00 }, /* 0x12 + */
|
||||
{ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0x13 - */
|
||||
{ 0x44, 0x44, 0x44, 0x5f, 0x44, 0x44, 0x44, 0x00 }, /* 0x14 ± */
|
||||
{ 0x41, 0x22, 0x14, 0x08, 0x14, 0x22, 0x41, 0x00 }, /* 0x15 × */
|
||||
{ 0x08, 0x08, 0x08, 0x2a, 0x08, 0x08, 0x08, 0x00 }, /* 0x16 ÷ */
|
||||
{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00 }, /* 0x17 = */
|
||||
{ 0x14, 0x34, 0x14, 0x1c, 0x14, 0x16, 0x14, 0x00 }, /* 0x18 ≠ */
|
||||
{ 0x08, 0x08, 0x14, 0x14, 0x14, 0x22, 0x22, 0x00 }, /* 0x19 < */
|
||||
{ 0x22, 0x22, 0x14, 0x14, 0x14, 0x08, 0x08, 0x00 }, /* 0x1A > */
|
||||
{ 0x02, 0x05, 0x02, 0x3c, 0x42, 0x42, 0x24, 0x00 }, /* 0x1B ℃ */
|
||||
{ 0x00, 0x2b, 0x2c, 0x78, 0x2c, 0x2b, 0x00, 0x00 }, /* 0x1C ¥ */
|
||||
{ 0x00, 0x24, 0x2a, 0x7a, 0x2f, 0x2a, 0x12, 0x00 }, /* 0x1D $ */
|
||||
{ 0x00, 0x1c, 0x62, 0x32, 0x2e, 0x23, 0x14, 0x00 }, /* 0x1E ¢ */
|
||||
{ 0x20, 0x54, 0x5e, 0x25, 0x41, 0x42, 0x20, 0x00 }, /* 0x1F £ */
|
||||
{ 0x42, 0x25, 0x12, 0x08, 0x24, 0x52, 0x21, 0x00 }, /* 0x20 % */
|
||||
{ 0x20, 0x62, 0x3e, 0x63, 0x3e, 0x23, 0x02, 0x00 }, /* 0x21 # */
|
||||
{ 0x20, 0x56, 0x49, 0x55, 0x22, 0x58, 0x40, 0x00 }, /* 0x22 & */
|
||||
{ 0x00, 0x22, 0x14, 0x7f, 0x14, 0x22, 0x00, 0x00 }, /* 0x23 * */
|
||||
{ 0x1c, 0x22, 0x59, 0x55, 0x4d, 0x12, 0x0c, 0x00 }, /* 0x24 @ */
|
||||
{ 0x00, 0x00, 0x4a, 0x55, 0x55, 0x29, 0x00, 0x00 }, /* 0x25 § */
|
||||
{ 0x04, 0x64, 0x3c, 0x17, 0x3c, 0x64, 0x04, 0x00 }, /* 0x26 ☆ */
|
||||
{ 0x04, 0x64, 0x3c, 0x1f, 0x3c, 0x64, 0x04, 0x00 }, /* 0x27 ★ */
|
||||
{ 0x1c, 0x22, 0x41, 0x41, 0x41, 0x22, 0x1c, 0x00 }, /* 0x28 ○ */
|
||||
{ 0x1c, 0x3e, 0x7f, 0x7f, 0x7f, 0x3e, 0x1c, 0x00 }, /* 0x29 ● */
|
||||
{ 0x1c, 0x22, 0x5d, 0x55, 0x5d, 0x22, 0x1c, 0x00 }, /* 0x2A ◎ */
|
||||
{ 0x08, 0x14, 0x22, 0x41, 0x22, 0x14, 0x08, 0x00 }, /* 0x2B ◇ */
|
||||
{ 0x08, 0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x08, 0x00 }, /* 0x2C ◆ */
|
||||
{ 0x7f, 0x41, 0x41, 0x41, 0x41, 0x41, 0x7f, 0x00 }, /* 0x2D □ */
|
||||
{ 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00 }, /* 0x2E ■ */
|
||||
{ 0x40, 0x70, 0x4c, 0x43, 0x4c, 0x70, 0x40, 0x00 }, /* 0x2F △ */
|
||||
{ 0x40, 0x70, 0x7c, 0x7f, 0x7c, 0x70, 0x40, 0x00 }, /* 0x30 ▲ */
|
||||
{ 0x01, 0x07, 0x19, 0x61, 0x19, 0x07, 0x01, 0x00 }, /* 0x31 ▽ */
|
||||
{ 0x01, 0x07, 0x1f, 0x7f, 0x1f, 0x07, 0x01, 0x00 }, /* 0x32 ▼ */
|
||||
{ 0x49, 0x22, 0x14, 0x49, 0x14, 0x22, 0x49, 0x00 }, /* 0x33 ※ */
|
||||
{ 0x05, 0x05, 0x05, 0x7d, 0x05, 0x05, 0x05, 0x00 }, /* 0x34 〒 */
|
||||
{ 0x08, 0x08, 0x08, 0x08, 0x2a, 0x1c, 0x08, 0x00 }, /* 0x35 → */
|
||||
{ 0x08, 0x1c, 0x2a, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0x36 ← */
|
||||
{ 0x00, 0x04, 0x02, 0x7f, 0x02, 0x04, 0x00, 0x00 }, /* 0x37 ↑ */
|
||||
{ 0x00, 0x10, 0x20, 0x7f, 0x20, 0x10, 0x00, 0x00 }, /* 0x38 ↓ */
|
||||
{ 0x00, 0x3e, 0x41, 0x41, 0x41, 0x41, 0x3e, 0x00 }, /* 0x39 0 */
|
||||
{ 0x00, 0x00, 0x42, 0x7f, 0x40, 0x00, 0x00, 0x00 }, /* 0x3A 1 */
|
||||
{ 0x00, 0x62, 0x51, 0x51, 0x49, 0x49, 0x46, 0x00 }, /* 0x3B 2 */
|
||||
{ 0x00, 0x22, 0x41, 0x49, 0x49, 0x49, 0x36, 0x00 }, /* 0x3C 3 */
|
||||
{ 0x00, 0x30, 0x28, 0x24, 0x22, 0x7f, 0x20, 0x00 }, /* 0x3D 4 */
|
||||
{ 0x00, 0x2f, 0x45, 0x45, 0x45, 0x45, 0x39, 0x00 }, /* 0x3E 5 */
|
||||
{ 0x00, 0x3e, 0x49, 0x49, 0x49, 0x49, 0x32, 0x00 }, /* 0x3F 6 */
|
||||
{ 0x00, 0x01, 0x01, 0x61, 0x19, 0x05, 0x03, 0x00 }, /* 0x40 7 */
|
||||
{ 0x00, 0x36, 0x49, 0x49, 0x49, 0x49, 0x36, 0x00 }, /* 0x41 8 */
|
||||
{ 0x00, 0x26, 0x49, 0x49, 0x49, 0x49, 0x3e, 0x00 }, /* 0x42 9 */
|
||||
{ 0x00, 0x20, 0x54, 0x7e, 0x34, 0x14, 0x60, 0x00 }, /* 0x43 ぁ */
|
||||
{ 0x20, 0x52, 0x7f, 0x2a, 0x1a, 0x4a, 0x30, 0x00 }, /* 0x44 あ */
|
||||
{ 0x00, 0x3c, 0x40, 0x20, 0x04, 0x18, 0x00, 0x00 }, /* 0x45 ぃ */
|
||||
{ 0x1e, 0x20, 0x40, 0x20, 0x02, 0x04, 0x18, 0x00 }, /* 0x46 い */
|
||||
{ 0x00, 0x10, 0x4a, 0x4a, 0x2a, 0x10, 0x00, 0x00 }, /* 0x47 ぅ */
|
||||
{ 0x00, 0x08, 0x45, 0x45, 0x45, 0x25, 0x18, 0x00 }, /* 0x48 う */
|
||||
{ 0x00, 0x48, 0x2a, 0x3a, 0x4a, 0x40, 0x00, 0x00 }, /* 0x49 ぇ */
|
||||
{ 0x00, 0x44, 0x25, 0x15, 0x3d, 0x45, 0x40, 0x00 }, /* 0x4A え */
|
||||
{ 0x00, 0x24, 0x7e, 0x14, 0x50, 0x24, 0x00, 0x00 }, /* 0x4B ぉ */
|
||||
{ 0x22, 0x52, 0x7f, 0x0a, 0x48, 0x4a, 0x34, 0x00 }, /* 0x4C お */
|
||||
{ 0x44, 0x34, 0x4f, 0x44, 0x38, 0x04, 0x18, 0x00 }, /* 0x4D か */
|
||||
{ 0x44, 0x34, 0x4f, 0x44, 0x39, 0x04, 0x19, 0x00 }, /* 0x4E が */
|
||||
{ 0x00, 0x2a, 0x5a, 0x4b, 0x4e, 0x5a, 0x08, 0x00 }, /* 0x4F き */
|
||||
{ 0x00, 0x2a, 0x5a, 0x4b, 0x4e, 0x5b, 0x08, 0x00 }, /* 0x50 ぎ */
|
||||
{ 0x00, 0x08, 0x14, 0x14, 0x22, 0x41, 0x00, 0x00 }, /* 0x51 く */
|
||||
{ 0x00, 0x08, 0x14, 0x14, 0x22, 0x45, 0x04, 0x00 }, /* 0x52 ぐ */
|
||||
{ 0x3f, 0x00, 0x04, 0x44, 0x3f, 0x04, 0x04, 0x00 }, /* 0x53 け */
|
||||
{ 0x3f, 0x00, 0x04, 0x44, 0x3f, 0x04, 0x05, 0x00 }, /* 0x54 げ */
|
||||
{ 0x00, 0x20, 0x52, 0x42, 0x42, 0x42, 0x40, 0x00 }, /* 0x55 こ */
|
||||
{ 0x00, 0x20, 0x52, 0x42, 0x43, 0x42, 0x41, 0x00 }, /* 0x56 ご */
|
||||
{ 0x00, 0x24, 0x54, 0x44, 0x47, 0x5c, 0x04, 0x00 }, /* 0x57 さ */
|
||||
{ 0x00, 0x24, 0x54, 0x44, 0x47, 0x5c, 0x05, 0x00 }, /* 0x58 ざ */
|
||||
{ 0x00, 0x00, 0x3f, 0x40, 0x40, 0x40, 0x20, 0x00 }, /* 0x59 し */
|
||||
{ 0x00, 0x00, 0x3f, 0x40, 0x41, 0x40, 0x21, 0x00 }, /* 0x5A じ */
|
||||
{ 0x02, 0x02, 0x0a, 0x56, 0x3f, 0x02, 0x02, 0x00 }, /* 0x5B す */
|
||||
{ 0x02, 0x02, 0x0a, 0x56, 0x3f, 0x02, 0x03, 0x00 }, /* 0x5C ず */
|
||||
{ 0x04, 0x04, 0x3f, 0x44, 0x54, 0x5f, 0x44, 0x00 }, /* 0x5D せ */
|
||||
{ 0x04, 0x04, 0x3f, 0x44, 0x54, 0x5f, 0x45, 0x00 }, /* 0x5E ぜ */
|
||||
{ 0x00, 0x08, 0x09, 0x3d, 0x4b, 0x49, 0x08, 0x00 }, /* 0x5F そ */
|
||||
{ 0x00, 0x08, 0x09, 0x3d, 0x4b, 0x49, 0x0a, 0x00 }, /* 0x60 ぞ */
|
||||
{ 0x42, 0x3a, 0x07, 0x22, 0x54, 0x44, 0x44, 0x00 }, /* 0x61 た */
|
||||
{ 0x42, 0x3a, 0x07, 0x22, 0x55, 0x44, 0x45, 0x00 }, /* 0x62 だ */
|
||||
{ 0x00, 0x02, 0x12, 0x4e, 0x4b, 0x4a, 0x32, 0x00 }, /* 0x63 ち */
|
||||
{ 0x00, 0x02, 0x12, 0x4e, 0x4b, 0x4a, 0x33, 0x00 }, /* 0x64 ぢ */
|
||||
{ 0x00, 0x10, 0x10, 0x48, 0x48, 0x30, 0x00, 0x00 }, /* 0x65 っ */
|
||||
{ 0x04, 0x04, 0x02, 0x22, 0x22, 0x22, 0x1c, 0x00 }, /* 0x66 つ */
|
||||
{ 0x04, 0x04, 0x02, 0x22, 0x23, 0x22, 0x1d, 0x00 }, /* 0x67 づ */
|
||||
{ 0x00, 0x02, 0x02, 0x1a, 0x25, 0x43, 0x41, 0x00 }, /* 0x68 て */
|
||||
{ 0x00, 0x02, 0x02, 0x1a, 0x25, 0x43, 0x45, 0x00 }, /* 0x69 で */
|
||||
{ 0x00, 0x20, 0x57, 0x48, 0x48, 0x44, 0x44, 0x00 }, /* 0x6A と */
|
||||
{ 0x00, 0x20, 0x57, 0x48, 0x49, 0x44, 0x45, 0x00 }, /* 0x6B ど */
|
||||
{ 0x12, 0x0a, 0x27, 0x52, 0x50, 0x3a, 0x24, 0x00 }, /* 0x6C な */
|
||||
{ 0x7f, 0x00, 0x20, 0x52, 0x42, 0x42, 0x40, 0x00 }, /* 0x6D に */
|
||||
{ 0x30, 0x4e, 0x38, 0x54, 0x0f, 0x64, 0x78, 0x00 }, /* 0x6E ぬ */
|
||||
{ 0x24, 0x14, 0x7f, 0x04, 0x22, 0x52, 0x3c, 0x00 }, /* 0x6F ね */
|
||||
{ 0x18, 0x24, 0x12, 0x4e, 0x42, 0x24, 0x18, 0x00 }, /* 0x70 の */
|
||||
{ 0x7f, 0x00, 0x24, 0x54, 0x54, 0x3f, 0x44, 0x00 }, /* 0x71 は */
|
||||
{ 0x7f, 0x00, 0x24, 0x54, 0x54, 0x3f, 0x45, 0x00 }, /* 0x72 ば */
|
||||
{ 0x7f, 0x00, 0x24, 0x54, 0x56, 0x3d, 0x46, 0x00 }, /* 0x73 ぱ */
|
||||
{ 0x02, 0x3a, 0x47, 0x40, 0x41, 0x3e, 0x04, 0x00 }, /* 0x74 ひ */
|
||||
{ 0x02, 0x3a, 0x47, 0x40, 0x41, 0x3e, 0x05, 0x00 }, /* 0x75 び */
|
||||
{ 0x02, 0x3a, 0x47, 0x40, 0x43, 0x3d, 0x06, 0x00 }, /* 0x76 ぴ */
|
||||
{ 0x40, 0x30, 0x40, 0x4d, 0x32, 0x10, 0x60, 0x00 }, /* 0x77 ふ */
|
||||
{ 0x40, 0x30, 0x40, 0x4d, 0x32, 0x11, 0x61, 0x00 }, /* 0x78 ぶ */
|
||||
{ 0x40, 0x30, 0x40, 0x4d, 0x32, 0x15, 0x62, 0x00 }, /* 0x79 ぷ */
|
||||
{ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x00 }, /* 0x7A へ */
|
||||
{ 0x08, 0x04, 0x02, 0x04, 0x09, 0x10, 0x11, 0x00 }, /* 0x7B べ */
|
||||
{ 0x08, 0x04, 0x02, 0x04, 0x0a, 0x15, 0x12, 0x00 }, /* 0x7C ぺ */
|
||||
{ 0x7f, 0x00, 0x6a, 0x6a, 0x7e, 0x2a, 0x4a, 0x00 }, /* 0x7D ほ */
|
||||
{ 0x7f, 0x00, 0x6a, 0x6a, 0x7f, 0x2a, 0x4b, 0x00 }, /* 0x7E ぼ */
|
||||
{ 0x7f, 0x00, 0x6a, 0x6a, 0x7e, 0x2d, 0x4a, 0x00 }, /* 0x7F ぽ */
|
||||
{ 0x00, 0x6a, 0x6a, 0x6a, 0x7f, 0x2a, 0x4a, 0x00 }, /* 0x80 ま */
|
||||
{ 0x30, 0x29, 0x1d, 0x4b, 0x48, 0x3c, 0x10, 0x00 }, /* 0x81 み */
|
||||
{ 0x12, 0x2a, 0x7f, 0x42, 0x40, 0x42, 0x24, 0x00 }, /* 0x82 む */
|
||||
{ 0x30, 0x4e, 0x38, 0x54, 0x0f, 0x44, 0x38, 0x00 }, /* 0x83 め */
|
||||
{ 0x00, 0x0a, 0x3e, 0x4b, 0x4a, 0x4a, 0x30, 0x00 }, /* 0x84 も */
|
||||
{ 0x00, 0x08, 0x0e, 0x38, 0x46, 0x14, 0x08, 0x00 }, /* 0x85 ゃ */
|
||||
{ 0x04, 0x07, 0x1c, 0x62, 0x03, 0x0a, 0x04, 0x00 }, /* 0x86 や */
|
||||
{ 0x00, 0x1c, 0x48, 0x3e, 0x24, 0x18, 0x00, 0x00 }, /* 0x87 ゅ */
|
||||
{ 0x1e, 0x04, 0x52, 0x3f, 0x12, 0x12, 0x0c, 0x00 }, /* 0x88 ゆ */
|
||||
{ 0x00, 0x20, 0x50, 0x50, 0x3e, 0x48, 0x00, 0x00 }, /* 0x89 ょ */
|
||||
{ 0x00, 0x20, 0x50, 0x50, 0x3f, 0x24, 0x44, 0x00 }, /* 0x8A よ */
|
||||
{ 0x00, 0x1c, 0x51, 0x49, 0x4a, 0x48, 0x30, 0x00 }, /* 0x8B ら */
|
||||
{ 0x00, 0x0f, 0x42, 0x41, 0x21, 0x1e, 0x00, 0x00 }, /* 0x8C り */
|
||||
{ 0x00, 0x10, 0x69, 0x6d, 0x4b, 0x49, 0x30, 0x00 }, /* 0x8D る */
|
||||
{ 0x24, 0x14, 0x7f, 0x04, 0x02, 0x3e, 0x40, 0x00 }, /* 0x8E れ */
|
||||
{ 0x00, 0x10, 0x49, 0x4d, 0x4b, 0x49, 0x30, 0x00 }, /* 0x8F ろ */
|
||||
{ 0x00, 0x28, 0x18, 0x7e, 0x08, 0x44, 0x38, 0x00 }, /* 0x90 ゎ */
|
||||
{ 0x24, 0x14, 0x7f, 0x04, 0x42, 0x42, 0x3c, 0x00 }, /* 0x91 わ */
|
||||
{ 0x30, 0x49, 0x25, 0x1f, 0x24, 0x54, 0x38, 0x00 }, /* 0x92 ゐ */
|
||||
{ 0x40, 0x28, 0x25, 0x57, 0x35, 0x28, 0x40, 0x00 }, /* 0x93 ゑ */
|
||||
{ 0x10, 0x0a, 0x2e, 0x5b, 0x72, 0x4a, 0x48, 0x00 }, /* 0x94 を */
|
||||
{ 0x40, 0x30, 0x0c, 0x33, 0x40, 0x40, 0x20, 0x00 }, /* 0x95 ん */
|
||||
{ 0x00, 0x04, 0x44, 0x3c, 0x14, 0x0c, 0x00, 0x00 }, /* 0x96 ァ */
|
||||
{ 0x00, 0x01, 0x41, 0x3d, 0x09, 0x05, 0x03, 0x00 }, /* 0x97 ア */
|
||||
{ 0x00, 0x20, 0x20, 0x10, 0x78, 0x04, 0x00, 0x00 }, /* 0x98 ィ */
|
||||
{ 0x00, 0x10, 0x10, 0x08, 0x7c, 0x02, 0x01, 0x00 }, /* 0x99 イ */
|
||||
{ 0x00, 0x18, 0x48, 0x4c, 0x28, 0x18, 0x00, 0x00 }, /* 0x9A ゥ */
|
||||
{ 0x00, 0x06, 0x42, 0x43, 0x22, 0x12, 0x0e, 0x00 }, /* 0x9B ウ */
|
||||
{ 0x00, 0x40, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00 }, /* 0x9C ェ */
|
||||
{ 0x20, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x20, 0x00 }, /* 0x9D エ */
|
||||
{ 0x00, 0x28, 0x28, 0x58, 0x7c, 0x08, 0x00, 0x00 }, /* 0x9E ォ */
|
||||
{ 0x22, 0x22, 0x12, 0x4a, 0x7f, 0x02, 0x02, 0x00 }, /* 0x9F オ */
|
||||
{ 0x00, 0x42, 0x22, 0x1f, 0x02, 0x42, 0x7e, 0x00 }, /* 0xA0 カ */
|
||||
{ 0x00, 0x42, 0x22, 0x1f, 0x02, 0x42, 0x7f, 0x00 }, /* 0xA1 ガ */
|
||||
{ 0x00, 0x12, 0x12, 0x1f, 0x72, 0x12, 0x10, 0x00 }, /* 0xA2 キ */
|
||||
{ 0x00, 0x12, 0x12, 0x1f, 0x72, 0x13, 0x10, 0x00 }, /* 0xA3 ギ */
|
||||
{ 0x00, 0x08, 0x44, 0x43, 0x22, 0x12, 0x0e, 0x00 }, /* 0xA4 ク */
|
||||
{ 0x00, 0x08, 0x44, 0x43, 0x22, 0x12, 0x0f, 0x00 }, /* 0xA5 グ */
|
||||
{ 0x08, 0x07, 0x42, 0x22, 0x1e, 0x02, 0x02, 0x00 }, /* 0xA6 ケ */
|
||||
{ 0x08, 0x07, 0x42, 0x22, 0x1f, 0x02, 0x03, 0x00 }, /* 0xA7 ゲ */
|
||||
{ 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x00 }, /* 0xA8 コ */
|
||||
{ 0x00, 0x42, 0x42, 0x42, 0x43, 0x42, 0x7f, 0x00 }, /* 0xA9 ゴ */
|
||||
{ 0x02, 0x02, 0x4f, 0x42, 0x22, 0x1f, 0x02, 0x00 }, /* 0xAA サ */
|
||||
{ 0x02, 0x02, 0x4f, 0x42, 0x23, 0x1e, 0x03, 0x00 }, /* 0xAB ザ */
|
||||
{ 0x00, 0x45, 0x4a, 0x40, 0x20, 0x10, 0x0c, 0x00 }, /* 0xAC シ */
|
||||
{ 0x00, 0x45, 0x4a, 0x40, 0x21, 0x10, 0x0d, 0x00 }, /* 0xAD ジ */
|
||||
{ 0x40, 0x42, 0x22, 0x22, 0x1a, 0x26, 0x40, 0x00 }, /* 0xAE ス */
|
||||
{ 0x40, 0x42, 0x22, 0x22, 0x1b, 0x26, 0x41, 0x00 }, /* 0xAF ズ */
|
||||
{ 0x04, 0x04, 0x3f, 0x44, 0x44, 0x54, 0x4c, 0x00 }, /* 0xB0 セ */
|
||||
{ 0x04, 0x04, 0x3f, 0x44, 0x45, 0x54, 0x4d, 0x00 }, /* 0xB1 ゼ */
|
||||
{ 0x00, 0x01, 0x46, 0x40, 0x20, 0x10, 0x0f, 0x00 }, /* 0xB2 ソ */
|
||||
{ 0x00, 0x01, 0x46, 0x40, 0x20, 0x11, 0x0f, 0x00 }, /* 0xB3 ゾ */
|
||||
{ 0x00, 0x08, 0x44, 0x4b, 0x2a, 0x12, 0x0e, 0x00 }, /* 0xB4 タ */
|
||||
{ 0x00, 0x08, 0x44, 0x4b, 0x2a, 0x12, 0x0f, 0x00 }, /* 0xB5 ダ */
|
||||
{ 0x08, 0x0a, 0x4a, 0x3e, 0x09, 0x09, 0x08, 0x00 }, /* 0xB6 チ */
|
||||
{ 0x08, 0x0a, 0x4a, 0x3e, 0x09, 0x08, 0x09, 0x00 }, /* 0xB7 ヂ */
|
||||
{ 0x00, 0x18, 0x40, 0x58, 0x20, 0x18, 0x00, 0x00 }, /* 0xB8 ッ */
|
||||
{ 0x02, 0x0c, 0x42, 0x4c, 0x20, 0x10, 0x0e, 0x00 }, /* 0xB9 ツ */
|
||||
{ 0x02, 0x0c, 0x42, 0x4c, 0x21, 0x10, 0x0d, 0x00 }, /* 0xBA ヅ */
|
||||
{ 0x04, 0x05, 0x45, 0x3d, 0x05, 0x05, 0x04, 0x00 }, /* 0xBB テ */
|
||||
{ 0x04, 0x05, 0x45, 0x3d, 0x05, 0x04, 0x05, 0x00 }, /* 0xBC デ */
|
||||
{ 0x00, 0x00, 0x7f, 0x08, 0x08, 0x10, 0x00, 0x00 }, /* 0xBD ト */
|
||||
{ 0x00, 0x00, 0x7f, 0x08, 0x09, 0x10, 0x01, 0x00 }, /* 0xBE ド */
|
||||
{ 0x04, 0x44, 0x24, 0x1f, 0x04, 0x04, 0x04, 0x00 }, /* 0xBF ナ */
|
||||
{ 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00 }, /* 0xC0 ニ */
|
||||
{ 0x40, 0x41, 0x25, 0x15, 0x19, 0x27, 0x00, 0x00 }, /* 0xC1 ヌ */
|
||||
{ 0x20, 0x22, 0x12, 0x7b, 0x06, 0x12, 0x20, 0x00 }, /* 0xC2 ネ */
|
||||
{ 0x40, 0x40, 0x20, 0x10, 0x08, 0x07, 0x00, 0x00 }, /* 0xC3 ノ */
|
||||
{ 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0c, 0x70, 0x00 }, /* 0xC4 ハ */
|
||||
{ 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0d, 0x71, 0x00 }, /* 0xC5 バ */
|
||||
{ 0x40, 0x30, 0x0e, 0x00, 0x02, 0x0d, 0x72, 0x00 }, /* 0xC6 パ */
|
||||
{ 0x00, 0x3f, 0x48, 0x48, 0x48, 0x44, 0x44, 0x00 }, /* 0xC7 ヒ */
|
||||
{ 0x00, 0x3f, 0x48, 0x48, 0x49, 0x44, 0x45, 0x00 }, /* 0xC8 ビ */
|
||||
{ 0x00, 0x3f, 0x48, 0x48, 0x4a, 0x45, 0x46, 0x00 }, /* 0xC9 ピ */
|
||||
{ 0x00, 0x02, 0x42, 0x42, 0x22, 0x12, 0x0e, 0x00 }, /* 0xCA フ */
|
||||
{ 0x00, 0x02, 0x42, 0x42, 0x23, 0x12, 0x0f, 0x00 }, /* 0xCB ブ */
|
||||
{ 0x00, 0x02, 0x42, 0x42, 0x22, 0x15, 0x0e, 0x00 }, /* 0xCC プ */
|
||||
{ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00 }, /* 0xCD ヘ */
|
||||
{ 0x08, 0x04, 0x02, 0x04, 0x09, 0x10, 0x21, 0x00 }, /* 0xCE ベ */
|
||||
{ 0x08, 0x04, 0x02, 0x04, 0x0a, 0x15, 0x22, 0x00 }, /* 0xCF ペ */
|
||||
{ 0x24, 0x14, 0x44, 0x7f, 0x04, 0x14, 0x24, 0x00 }, /* 0xD0 ホ */
|
||||
{ 0x24, 0x14, 0x44, 0x7f, 0x05, 0x14, 0x25, 0x00 }, /* 0xD1 ボ */
|
||||
{ 0x24, 0x14, 0x44, 0x7f, 0x06, 0x15, 0x22, 0x00 }, /* 0xD2 ポ */
|
||||
{ 0x02, 0x02, 0x12, 0x22, 0x52, 0x0a, 0x06, 0x00 }, /* 0xD3 マ */
|
||||
{ 0x00, 0x21, 0x25, 0x29, 0x4a, 0x42, 0x00, 0x00 }, /* 0xD4 ミ */
|
||||
{ 0x40, 0x70, 0x4c, 0x43, 0x50, 0x20, 0x40, 0x00 }, /* 0xD5 ム */
|
||||
{ 0x40, 0x44, 0x24, 0x14, 0x08, 0x37, 0x00, 0x00 }, /* 0xD6 メ */
|
||||
{ 0x00, 0x08, 0x09, 0x3f, 0x49, 0x49, 0x48, 0x00 }, /* 0xD7 モ */
|
||||
{ 0x00, 0x10, 0x1c, 0x68, 0x08, 0x18, 0x00, 0x00 }, /* 0xD8 ャ */
|
||||
{ 0x04, 0x04, 0x0f, 0x74, 0x02, 0x0a, 0x06, 0x00 }, /* 0xD9 ヤ */
|
||||
{ 0x00, 0x40, 0x48, 0x48, 0x78, 0x40, 0x00, 0x00 }, /* 0xDA ュ */
|
||||
{ 0x20, 0x22, 0x22, 0x22, 0x3e, 0x20, 0x20, 0x00 }, /* 0xDB ユ */
|
||||
{ 0x00, 0x00, 0x44, 0x54, 0x54, 0x7c, 0x00, 0x00 }, /* 0xDC ョ */
|
||||
{ 0x00, 0x42, 0x4a, 0x4a, 0x4a, 0x4a, 0x7e, 0x00 }, /* 0xDD ヨ */
|
||||
{ 0x00, 0x04, 0x45, 0x45, 0x25, 0x15, 0x0c, 0x00 }, /* 0xDE ラ */
|
||||
{ 0x00, 0x0f, 0x40, 0x40, 0x20, 0x1f, 0x00, 0x00 }, /* 0xDF リ */
|
||||
{ 0x40, 0x20, 0x1e, 0x00, 0x7f, 0x20, 0x10, 0x00 }, /* 0xE0 ル */
|
||||
{ 0x00, 0x00, 0x7f, 0x40, 0x20, 0x10, 0x08, 0x00 }, /* 0xE1 レ */
|
||||
{ 0x00, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x00 }, /* 0xE2 ロ */
|
||||
{ 0x00, 0x0c, 0x44, 0x44, 0x24, 0x1c, 0x00, 0x00 }, /* 0xE3 ヮ */
|
||||
{ 0x00, 0x06, 0x42, 0x42, 0x22, 0x12, 0x0e, 0x00 }, /* 0xE4 ワ */
|
||||
{ 0x10, 0x12, 0x1e, 0x12, 0x12, 0x7f, 0x12, 0x00 }, /* 0xE5 ヰ */
|
||||
{ 0x20, 0x22, 0x22, 0x3a, 0x26, 0x22, 0x20, 0x00 }, /* 0xE6 ヱ */
|
||||
{ 0x00, 0x01, 0x45, 0x45, 0x25, 0x15, 0x0f, 0x00 }, /* 0xE7 ヲ */
|
||||
{ 0x00, 0x41, 0x42, 0x40, 0x20, 0x10, 0x0c, 0x00 }, /* 0xE8 ン */
|
||||
{ 0x00, 0x06, 0x42, 0x43, 0x22, 0x12, 0x0f, 0x00 }, /* 0xE9 ヴ */
|
||||
{ 0x00, 0x48, 0x28, 0x1c, 0x48, 0x78, 0x00, 0x00 }, /* 0xEA ヵ */
|
||||
{ 0x00, 0x10, 0x0c, 0x48, 0x38, 0x08, 0x00, 0x00 }, /* 0xEB ヶ */
|
||||
{ 0x08, 0x04, 0x04, 0x08, 0x10, 0x10, 0x08, 0x00 }, /* 0xEC 〜 */
|
||||
{ 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00 }, /* 0xED … */
|
||||
{ 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0xEE ー */
|
||||
{ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08 }, /* 0xEF ― */
|
||||
};
|
||||
|
||||
#define MISAKI_FONT_F1_H
|
||||
PROGMEM const uint8_t misaki_font_f1[ MISAKI_FONT_F1_SIZE + 1 ][ MISAKI_FONT_F1_W ] =
|
||||
{
|
||||
{ 0x00, 0x00, 0x00 }, /* 0x00 */
|
||||
{ 0x00, 0x2f, 0x00 }, /* 0x01 ! */
|
||||
{ 0x03, 0x00, 0x03 }, /* 0x02 " */
|
||||
{ 0x3f, 0x12, 0x3f }, /* 0x03 # */
|
||||
{ 0x16, 0x3f, 0x1a }, /* 0x04 $ */
|
||||
{ 0x12, 0x08, 0x24 }, /* 0x05 % */
|
||||
{ 0x32, 0x3d, 0x2a }, /* 0x06 & */
|
||||
{ 0x02, 0x01, 0x00 }, /* 0x07 ' */
|
||||
{ 0x00, 0x3e, 0x41 }, /* 0x08 ( */
|
||||
{ 0x41, 0x3e, 0x00 }, /* 0x09 ) */
|
||||
{ 0x0a, 0x07, 0x0a }, /* 0x0A * */
|
||||
{ 0x08, 0x3e, 0x08 }, /* 0x0B + */
|
||||
{ 0x40, 0x20, 0x00 }, /* 0x0C , */
|
||||
{ 0x08, 0x08, 0x08 }, /* 0x0D - */
|
||||
{ 0x00, 0x20, 0x00 }, /* 0x0E . */
|
||||
{ 0x10, 0x08, 0x04 }, /* 0x0F / */
|
||||
{ 0x1c, 0x2a, 0x1c }, /* 0x10 0 */
|
||||
{ 0x24, 0x3e, 0x20 }, /* 0x11 1 */
|
||||
{ 0x32, 0x2a, 0x24 }, /* 0x12 2 */
|
||||
{ 0x22, 0x2a, 0x14 }, /* 0x13 3 */
|
||||
{ 0x18, 0x14, 0x3e }, /* 0x14 4 */
|
||||
{ 0x2e, 0x2a, 0x12 }, /* 0x15 5 */
|
||||
{ 0x1c, 0x2a, 0x12 }, /* 0x16 6 */
|
||||
{ 0x02, 0x3a, 0x06 }, /* 0x17 7 */
|
||||
{ 0x14, 0x2a, 0x14 }, /* 0x18 8 */
|
||||
{ 0x24, 0x2a, 0x1c }, /* 0x19 9 */
|
||||
{ 0x00, 0x24, 0x00 }, /* 0x1A : */
|
||||
{ 0x40, 0x24, 0x00 }, /* 0x1B ; */
|
||||
{ 0x08, 0x14, 0x22 }, /* 0x1C < */
|
||||
{ 0x14, 0x14, 0x14 }, /* 0x1D = */
|
||||
{ 0x22, 0x14, 0x08 }, /* 0x1E > */
|
||||
{ 0x02, 0x29, 0x06 }, /* 0x1F ? */
|
||||
{ 0x12, 0x29, 0x1e }, /* 0x20 @ */
|
||||
{ 0x3e, 0x09, 0x3e }, /* 0x21 A */
|
||||
{ 0x3f, 0x25, 0x1a }, /* 0x22 B */
|
||||
{ 0x1e, 0x21, 0x21 }, /* 0x23 C */
|
||||
{ 0x3f, 0x21, 0x1e }, /* 0x24 D */
|
||||
{ 0x3f, 0x25, 0x21 }, /* 0x25 E */
|
||||
{ 0x3f, 0x05, 0x01 }, /* 0x26 F */
|
||||
{ 0x1e, 0x21, 0x39 }, /* 0x27 G */
|
||||
{ 0x3f, 0x08, 0x3f }, /* 0x28 H */
|
||||
{ 0x21, 0x3f, 0x21 }, /* 0x29 I */
|
||||
{ 0x10, 0x20, 0x1f }, /* 0x2A J */
|
||||
{ 0x3f, 0x04, 0x3b }, /* 0x2B K */
|
||||
{ 0x3f, 0x20, 0x20 }, /* 0x2C L */
|
||||
{ 0x3f, 0x06, 0x3f }, /* 0x2D M */
|
||||
{ 0x3f, 0x01, 0x3e }, /* 0x2E N */
|
||||
{ 0x1e, 0x21, 0x1e }, /* 0x2F O */
|
||||
{ 0x3f, 0x09, 0x06 }, /* 0x30 P */
|
||||
{ 0x1e, 0x21, 0x5e }, /* 0x31 Q */
|
||||
{ 0x3f, 0x09, 0x36 }, /* 0x32 R */
|
||||
{ 0x22, 0x25, 0x19 }, /* 0x33 S */
|
||||
{ 0x01, 0x3f, 0x01 }, /* 0x34 T */
|
||||
{ 0x3f, 0x20, 0x3f }, /* 0x35 U */
|
||||
{ 0x3f, 0x10, 0x0f }, /* 0x36 V */
|
||||
{ 0x3f, 0x18, 0x3f }, /* 0x37 W */
|
||||
{ 0x33, 0x0c, 0x33 }, /* 0x38 X */
|
||||
{ 0x03, 0x3c, 0x03 }, /* 0x39 Y */
|
||||
{ 0x31, 0x2d, 0x23 }, /* 0x3A Z */
|
||||
{ 0x00, 0x7f, 0x41 }, /* 0x3B [ */
|
||||
{ 0x15, 0x3e, 0x15 }, /* 0x3C \ */
|
||||
{ 0x41, 0x7f, 0x00 }, /* 0x3D ] */
|
||||
{ 0x02, 0x01, 0x02 }, /* 0x3E ^ */
|
||||
{ 0x40, 0x40, 0x40 }, /* 0x3F _ */
|
||||
{ 0x00, 0x01, 0x02 }, /* 0x40 ` */
|
||||
{ 0x18, 0x24, 0x3c }, /* 0x41 a */
|
||||
{ 0x3f, 0x24, 0x18 }, /* 0x42 b */
|
||||
{ 0x18, 0x24, 0x24 }, /* 0x43 c */
|
||||
{ 0x18, 0x24, 0x3f }, /* 0x44 d */
|
||||
{ 0x18, 0x2c, 0x2c }, /* 0x45 e */
|
||||
{ 0x04, 0x3f, 0x05 }, /* 0x46 f */
|
||||
{ 0x48, 0x54, 0x3c }, /* 0x47 g */
|
||||
{ 0x3f, 0x04, 0x38 }, /* 0x48 h */
|
||||
{ 0x00, 0x3d, 0x00 }, /* 0x49 i */
|
||||
{ 0x40, 0x3d, 0x00 }, /* 0x4A j */
|
||||
{ 0x3f, 0x08, 0x34 }, /* 0x4B k */
|
||||
{ 0x01, 0x3f, 0x00 }, /* 0x4C l */
|
||||
{ 0x3c, 0x1c, 0x38 }, /* 0x4D m */
|
||||
{ 0x3c, 0x04, 0x38 }, /* 0x4E n */
|
||||
{ 0x18, 0x24, 0x18 }, /* 0x4F o */
|
||||
{ 0x7c, 0x24, 0x18 }, /* 0x50 p */
|
||||
{ 0x18, 0x24, 0x7c }, /* 0x51 q */
|
||||
{ 0x3c, 0x08, 0x04 }, /* 0x52 r */
|
||||
{ 0x28, 0x3c, 0x14 }, /* 0x53 s */
|
||||
{ 0x04, 0x3e, 0x24 }, /* 0x54 t */
|
||||
{ 0x3c, 0x20, 0x3c }, /* 0x55 u */
|
||||
{ 0x3c, 0x10, 0x0c }, /* 0x56 v */
|
||||
{ 0x3c, 0x30, 0x3c }, /* 0x57 w */
|
||||
{ 0x24, 0x18, 0x24 }, /* 0x58 x */
|
||||
{ 0x4c, 0x50, 0x3c }, /* 0x59 y */
|
||||
{ 0x24, 0x34, 0x2c }, /* 0x5A z */
|
||||
{ 0x08, 0x36, 0x41 }, /* 0x5B { */
|
||||
{ 0x00, 0x7f, 0x00 }, /* 0x5C | */
|
||||
{ 0x41, 0x36, 0x08 }, /* 0x5D } */
|
||||
{ 0x01, 0x01, 0x01 }, /* 0x5E ~ */
|
||||
{ 0x10, 0x28, 0x10 }, /* 0x5F 。 */
|
||||
{ 0x1f, 0x01, 0x01 }, /* 0x60 「 */
|
||||
{ 0x20, 0x20, 0x3e }, /* 0x61 」 */
|
||||
{ 0x10, 0x20, 0x00 }, /* 0x62 、 */
|
||||
{ 0x00, 0x08, 0x00 }, /* 0x63 ・ */
|
||||
{ 0x25, 0x15, 0x0f }, /* 0x64 ヲ */
|
||||
{ 0x24, 0x1c, 0x0c }, /* 0x65 ァ */
|
||||
{ 0x10, 0x38, 0x04 }, /* 0x66 ィ */
|
||||
{ 0x18, 0x0c, 0x38 }, /* 0x67 ゥ */
|
||||
{ 0x28, 0x38, 0x28 }, /* 0x68 ェ */
|
||||
{ 0x28, 0x18, 0x3c }, /* 0x69 ォ */
|
||||
{ 0x08, 0x3c, 0x18 }, /* 0x6A ャ */
|
||||
{ 0x28, 0x38, 0x20 }, /* 0x6B ュ */
|
||||
{ 0x24, 0x2c, 0x3c }, /* 0x6C ョ */
|
||||
{ 0x2c, 0x2c, 0x1c }, /* 0x6D ッ */
|
||||
{ 0x04, 0x08, 0x08 }, /* 0x6E ー */
|
||||
{ 0x21, 0x1d, 0x07 }, /* 0x6F ア */
|
||||
{ 0x08, 0x3c, 0x03 }, /* 0x70 イ */
|
||||
{ 0x06, 0x23, 0x1e }, /* 0x71 ウ */
|
||||
{ 0x22, 0x3e, 0x22 }, /* 0x72 エ */
|
||||
{ 0x12, 0x0a, 0x3f }, /* 0x73 オ */
|
||||
{ 0x32, 0x0f, 0x3e }, /* 0x74 カ */
|
||||
{ 0x0a, 0x3f, 0x0a }, /* 0x75 キ */
|
||||
{ 0x24, 0x13, 0x0e }, /* 0x76 ク */
|
||||
{ 0x27, 0x1e, 0x02 }, /* 0x77 ケ */
|
||||
{ 0x22, 0x22, 0x3e }, /* 0x78 コ */
|
||||
{ 0x27, 0x12, 0x0f }, /* 0x79 サ */
|
||||
{ 0x25, 0x25, 0x10 }, /* 0x7A シ */
|
||||
{ 0x21, 0x19, 0x27 }, /* 0x7B ス */
|
||||
{ 0x3f, 0x22, 0x2e }, /* 0x7C セ */
|
||||
{ 0x21, 0x16, 0x0f }, /* 0x7D ソ */
|
||||
{ 0x24, 0x1b, 0x0e }, /* 0x7E タ */
|
||||
{ 0x25, 0x1f, 0x05 }, /* 0x7F チ */
|
||||
{ 0x26, 0x26, 0x1e }, /* 0x80 ツ */
|
||||
{ 0x25, 0x1d, 0x05 }, /* 0x81 テ */
|
||||
{ 0x3f, 0x04, 0x08 }, /* 0x82 ト */
|
||||
{ 0x24, 0x1f, 0x04 }, /* 0x83 ナ */
|
||||
{ 0x20, 0x22, 0x22 }, /* 0x84 ニ */
|
||||
{ 0x25, 0x19, 0x27 }, /* 0x85 ヌ */
|
||||
{ 0x12, 0x3b, 0x16 }, /* 0x86 ネ */
|
||||
{ 0x20, 0x10, 0x0f }, /* 0x87 ノ */
|
||||
{ 0x3c, 0x01, 0x3e }, /* 0x88 ハ */
|
||||
{ 0x1f, 0x24, 0x24 }, /* 0x89 ヒ */
|
||||
{ 0x21, 0x11, 0x0f }, /* 0x8A フ */
|
||||
{ 0x0c, 0x03, 0x1c }, /* 0x8B ヘ */
|
||||
{ 0x1a, 0x3f, 0x1a }, /* 0x8C ホ */
|
||||
{ 0x09, 0x19, 0x27 }, /* 0x8D マ */
|
||||
{ 0x22, 0x2a, 0x2a }, /* 0x8E ミ */
|
||||
{ 0x38, 0x27, 0x30 }, /* 0x8F ム */
|
||||
{ 0x32, 0x0c, 0x13 }, /* 0x90 メ */
|
||||
{ 0x05, 0x3f, 0x25 }, /* 0x91 モ */
|
||||
{ 0x02, 0x3f, 0x0e }, /* 0x92 ヤ */
|
||||
{ 0x21, 0x3f, 0x20 }, /* 0x93 ユ */
|
||||
{ 0x25, 0x25, 0x3f }, /* 0x94 ヨ */
|
||||
{ 0x25, 0x25, 0x1d }, /* 0x95 ラ */
|
||||
{ 0x07, 0x20, 0x1f }, /* 0x96 リ */
|
||||
{ 0x3c, 0x3f, 0x20 }, /* 0x97 ル */
|
||||
{ 0x3f, 0x20, 0x10 }, /* 0x98 レ */
|
||||
{ 0x3e, 0x22, 0x3e }, /* 0x99 ロ */
|
||||
{ 0x23, 0x11, 0x0f }, /* 0x9A ワ */
|
||||
{ 0x21, 0x21, 0x18 }, /* 0x9B ン */
|
||||
{ 0x01, 0x00, 0x01 }, /* 0x9C ゙ */
|
||||
{ 0x02, 0x05, 0x02 }, /* 0x9D ゚ */
|
||||
};
|
||||
#define MISAKI_FONT_F2_H
|
||||
PROGMEM const uint8_t misaki_font_f2[ MISAKI_FONT_F2_SIZE + 1 ][ MISAKI_FONT_F2_W ] =
|
||||
{
|
||||
{ 0x75, 0x40, 0x77, 0x55, 0x75, 0x77, 0x40 }, /* 0x00 温 */
|
||||
{ 0x40, 0x3e, 0x4a, 0x5e, 0x2b, 0x5e, 0x4a }, /* 0x01 度 */
|
||||
{ 0x6b, 0x62, 0x7f, 0x35, 0x2f, 0x35, 0x7f }, /* 0x02 調 */
|
||||
{ 0x7c, 0x5b, 0x5e, 0x24, 0x7b, 0x0e, 0x3a }, /* 0x03 節 */
|
||||
{ 0x04, 0x7e, 0x01, 0x7e, 0x4a, 0x5e, 0x69 }, /* 0x04 低 */
|
||||
{ 0x06, 0x3a, 0x2f, 0x3f, 0x6b, 0x7e, 0x46 }, /* 0x05 電 */
|
||||
{ 0x40, 0x3f, 0x41, 0x49, 0x7f, 0x49, 0x41 }, /* 0x06 圧 */
|
||||
{ 0x02, 0x62, 0x6b, 0x6b, 0x6b, 0x62, 0x02 }, /* 0x07 言 */
|
||||
{ 0x6a, 0x6b, 0x14, 0x7d, 0x57, 0x7d, 0x10 }, /* 0x08 語 */
|
||||
{ 0x41, 0x3f, 0x55, 0x55, 0x3d, 0x57, 0x51 }, /* 0x09 戻 */
|
||||
{ 0x21, 0x3f, 0x2d, 0x7f, 0x2a, 0x12, 0x2e }, /* 0x0A 取 */
|
||||
{ 0x0a, 0x77, 0x5a, 0x50, 0x5a, 0x77, 0x0a }, /* 0x0B 替 */
|
||||
{ 0x20, 0x24, 0x13, 0x7d, 0x55, 0x53, 0x70 }, /* 0x0C 名 */
|
||||
{ 0x7a, 0x2a, 0x7b, 0x02, 0x1a, 0x43, 0x7a }, /* 0x0D 前 */
|
||||
{ 0x4a, 0x52, 0x5e, 0x2b, 0x5e, 0x42, 0x4a }, /* 0x0E 変 */
|
||||
{ 0x41, 0x5f, 0x35, 0x3f, 0x55, 0x5f, 0x41 }, /* 0x0F 更 */
|
||||
{ 0x7d, 0x14, 0x57, 0x7d, 0x0e, 0x40, 0x7f }, /* 0x10 削 */
|
||||
{ 0x7f, 0x1b, 0x54, 0x16, 0x7d, 0x16, 0x54 }, /* 0x11 除 */
|
||||
{ 0x49, 0x3a, 0x40, 0x7e, 0x57, 0x56, 0x76 }, /* 0x12 追 */
|
||||
{ 0x42, 0x3f, 0x42, 0x7e, 0x7e, 0x42, 0x7e }, /* 0x13 加 */
|
||||
{ 0x04, 0x7e, 0x51, 0x37, 0x7d, 0x37, 0x50 }, /* 0x14 保 */
|
||||
{ 0x12, 0x7a, 0x17, 0x52, 0x76, 0x1e, 0x12 }, /* 0x15 存 */
|
||||
{ 0x7f, 0x55, 0x7f, 0x14, 0x5d, 0x7f, 0x55 }, /* 0x16 睡 */
|
||||
{ 0x7f, 0x55, 0x7f, 0x7f, 0x55, 0x3d, 0x57 }, /* 0x17 眠 */
|
||||
{ 0x7f, 0x55, 0x37, 0x78, 0x17, 0x45, 0x7f }, /* 0x18 閉 */
|
||||
{ 0x7f, 0x2b, 0x7b, 0x28, 0x7b, 0x2b, 0x7f }, /* 0x19 開 */
|
||||
{ 0x1e, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x1e }, /* 0x1A 中 */
|
||||
{ 0x7f, 0x41, 0x6b, 0x7f, 0x6b, 0x51, 0x7f }, /* 0x1B 国 */
|
||||
{ 0x52, 0x5a, 0x57, 0x3a, 0x57, 0x5a, 0x52 }, /* 0x1C 英 */
|
||||
{ 0x00, 0x7f, 0x49, 0x49, 0x49, 0x49, 0x7f }, /* 0x1D 日 */
|
||||
{ 0x22, 0x12, 0x2a, 0x7f, 0x2a, 0x12, 0x22 }, /* 0x1E 本 */
|
||||
{ 0x16, 0x6a, 0x5e, 0x73, 0x56, 0x62, 0x16 }, /* 0x1F 密 */
|
||||
{ 0x09, 0x37, 0x31, 0x5f, 0x15, 0x5f, 0x75 }, /* 0x20 碼 */
|
||||
{ 0x42, 0x22, 0x1e, 0x0b, 0x4a, 0x7a, 0x02 }, /* 0x21 方 */
|
||||
{ 0x7e, 0x02, 0x3a, 0x2b, 0x3a, 0x42, 0x7e }, /* 0x22 向 */
|
||||
};
|
||||
/*
|
||||
プリセット
|
||||
温度調節
|
||||
タイマー
|
||||
コントロール
|
||||
スクリーン
|
||||
ブザー
|
||||
低電圧アラーム
|
||||
言語
|
||||
戻る
|
||||
取り替える
|
||||
キャリブレーション
|
||||
名前を変更
|
||||
削除
|
||||
追加
|
||||
保存
|
||||
デフォルト
|
||||
睡眠
|
||||
ブースト
|
||||
保存
|
||||
睡眠
|
||||
閉じる
|
||||
ブースト
|
||||
保存
|
||||
ダイレクト
|
||||
PID
|
||||
ビッグ
|
||||
ニュース
|
||||
閉じる
|
||||
開く
|
||||
いいえ、
|
||||
はい、
|
||||
中国語
|
||||
英語
|
||||
いいえ、
|
||||
はい、
|
||||
メインスクリーン
|
||||
フリップ
|
||||
保存
|
||||
アバウト
|
||||
日本語
|
||||
つまみ方向
|
||||
|
||||
汉字转换表:温度調節低電圧言語戻取替名前変更削除追加保存睡眠閉開中国英日本密碼
|
||||
*/
|
||||
const char JP_0[] PROGMEM = { 0xf0, 0xcc, 0xdf, 0xb0, 0xb8, 0xbd, };
|
||||
const char JP_1[] PROGMEM = { 0xf2, 0x00, 0x01, 0x02, 0x03, };
|
||||
const char JP_2[] PROGMEM = { 0xf0, 0xb4, 0x99, 0xd3, 0xee, };
|
||||
const char JP_3[] PROGMEM = { 0xf0, 0xa8, 0xe8, 0xbd, 0xe2, 0xee, 0xe0, };
|
||||
const char JP_4[] PROGMEM = { 0xf0, 0xae, 0xa4, 0xdf, 0xee, 0xe8, };
|
||||
const char JP_5[] PROGMEM = { 0xf0, 0xcb, 0xab, 0xee, };
|
||||
const char JP_6[] PROGMEM = { 0xf2, 0x04, 0x05, 0x06, 0xf0, 0x97, 0xde, 0xee, 0xd5, };
|
||||
const char JP_7[] PROGMEM = { 0xf2, 0x07, 0x08, };
|
||||
const char JP_8[] PROGMEM = { 0xf2, 0x09, 0xf0, 0x8d, };
|
||||
const char JP_9[] PROGMEM = { 0xf2, 0x0a, 0xf0, 0x8c, 0xf2, 0x0b, 0xf0, 0x4a, 0x8d, };
|
||||
const char JP_10[] PROGMEM = { 0xf0, 0xa2, 0xd8, 0xdf, 0xcb, 0xe1, 0xee, 0xac, 0xdc, 0xe8, };
|
||||
const char JP_11[] PROGMEM = { 0xf2, 0x0c, 0x0d, 0xf0, 0x94, 0xf2, 0x0e, 0x0f, };
|
||||
const char JP_12[] PROGMEM = { 0xf2, 0x10, 0x11, };
|
||||
const char JP_13[] PROGMEM = { 0xf2, 0x12, 0x13, };
|
||||
const char JP_14[] PROGMEM = { 0xf2, 0x14, 0x15, };
|
||||
const char JP_15[] PROGMEM = { 0xf0, 0xbc, 0xca, 0x9e, 0xe0, 0xbd, };
|
||||
const char JP_16[] PROGMEM = { 0xf2, 0x16, 0x17, };
|
||||
const char JP_17[] PROGMEM = { 0xf0, 0xcb, 0xee, 0xae, 0xbd, };
|
||||
const char JP_18[] PROGMEM = { 0xf2, 0x14, 0x15, };
|
||||
const char JP_19[] PROGMEM = { 0xf2, 0x16, 0x17, };
|
||||
const char JP_20[] PROGMEM = { 0xf2, 0x18, 0xf0, 0x5a, 0x8d, };
|
||||
const char JP_21[] PROGMEM = { 0xf0, 0xcb, 0xee, 0xae, 0xbd, };
|
||||
const char JP_22[] PROGMEM = { 0xf2, 0x14, 0x15, };
|
||||
const char JP_23[] PROGMEM = { 0xf0, 0xb5, 0x99, 0xe1, 0xa4, 0xbd, };
|
||||
const char JP_24[] PROGMEM = { 0xf1, 0x30, 0x29, 0x24, };
|
||||
const char JP_25[] PROGMEM = { 0xf0, 0xc8, 0xb8, 0xa5, };
|
||||
const char JP_26[] PROGMEM = { 0xf0, 0xc0, 0xda, 0xee, 0xae, };
|
||||
const char JP_27[] PROGMEM = { 0xf2, 0x18, 0xf0, 0x5a, 0x8d, };
|
||||
const char JP_28[] PROGMEM = { 0xf2, 0x19, 0xf0, 0x51, };
|
||||
const char JP_29[] PROGMEM = { 0xf0, 0x46, 0x46, 0x4a, 0x01, };
|
||||
const char JP_30[] PROGMEM = { 0xf0, 0x71, 0x46, 0x01, };
|
||||
const char JP_31[] PROGMEM = { 0xf2, 0x1a, 0x1b, 0x08, };
|
||||
const char JP_32[] PROGMEM = { 0xf2, 0x1c, 0x08, };
|
||||
const char JP_33[] PROGMEM = { 0xf0, 0x46, 0x46, 0x4a, 0x01, };
|
||||
const char JP_34[] PROGMEM = { 0xf0, 0x71, 0x46, 0x01, };
|
||||
const char JP_35[] PROGMEM = { 0xf0, 0xd6, 0x99, 0xe8, 0xae, 0xa4, 0xdf, 0xee, 0xe8, };
|
||||
const char JP_36[] PROGMEM = { 0xf0, 0xca, 0xdf, 0xb8, 0xcc, };
|
||||
const char JP_37[] PROGMEM = { 0xf2, 0x14, 0x15, };
|
||||
const char JP_38[] PROGMEM = { 0xf0, 0x97, 0xc5, 0x9b, 0xbd, };
|
||||
const char JP_39[] PROGMEM = { 0xf2, 0x1d, 0x1e, 0x08, };
|
||||
const char JP_40[] PROGMEM = { 0xf2, 0x1f, 0x20, }; //密码
|
||||
const char JP_41[] PROGMEM = { 0xf0, 0x66, 0x80, 0x81, 0xf2, 0x21, 0x22, }; //つまみ方向
|
||||
const char *const JP_table[] = {JP_0, JP_1, JP_2, JP_3, JP_4, JP_5, JP_41, JP_6, JP_40, JP_7, JP_38, JP_8, JP_9, JP_10, JP_11, JP_12, JP_13, JP_14, JP_15, JP_16, JP_17, JP_18, JP_19, JP_20, JP_21, JP_22, JP_23, JP_24, JP_25, JP_26, JP_27, JP_28, JP_29, JP_30, JP_31, JP_32, JP_39, JP_35, JP_36, JP_37,};
|
||||
const char JP_Length_table[] PROGMEM = {6, 5, 5, 7, 6, 4, 7, 9, 3, 3 , 5, 4, 9, 10, 8, 3, 3, 3, 6, 3, 5, 3, 3, 5, 5, 3, 6, 4, 4, 5, 5, 4, 5, 4, 4, 3, 4, 9, 5, 3,};
|
||||
#endif
|
||||
|
||||
/*
|
||||
8x8 dot Japanese font for Arduboy
|
||||
|
||||
Copyright (c) 2016 emutyworks
|
||||
|
||||
Released under the MIT license
|
||||
https://github.com/emutyworks/8x8DotJPFont/blob/master/LICENSE.txt
|
||||
*/
|
||||
#if LANG_JP_State
|
||||
void drawText(uint8_t x, uint8_t y, const uint8_t *mes, uint8_t cnt)
|
||||
{
|
||||
uint8_t pb;
|
||||
uint8_t page;
|
||||
uint8_t screen_start = 0;
|
||||
uint8_t screen_end = 128;
|
||||
|
||||
if (x < screen_start) {
|
||||
x = screen_start;
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < cnt; i++) {
|
||||
pb = pgm_read_byte_near(mes + i);
|
||||
|
||||
switch (pb) {
|
||||
case MISAKI_FONT_F0_PAGE:
|
||||
page = MISAKI_FONT_F0_PAGE;
|
||||
continue;
|
||||
case MISAKI_FONT_F1_PAGE:
|
||||
page = MISAKI_FONT_F1_PAGE;
|
||||
continue;
|
||||
case MISAKI_FONT_F2_PAGE:
|
||||
page = MISAKI_FONT_F2_PAGE;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!page) {
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (page) {
|
||||
#ifdef MISAKI_FONT_F0_H
|
||||
case MISAKI_FONT_F0_PAGE:
|
||||
if (pb > MISAKI_FONT_F0_SIZE) {
|
||||
continue;
|
||||
}
|
||||
if ((x + 8) > screen_end) {
|
||||
x = screen_start;
|
||||
y = y + 8;
|
||||
}
|
||||
arduboy.drawBitmap(x, y, misaki_font_f0[ pb ], MISAKI_FONT_F0_W, 8, WHITE);
|
||||
x = x + 8;
|
||||
break;
|
||||
#endif
|
||||
#ifdef MISAKI_FONT_F1_H
|
||||
case MISAKI_FONT_F1_PAGE:
|
||||
if (pb > MISAKI_FONT_F1_SIZE) {
|
||||
continue;
|
||||
}
|
||||
if ((x + 4) > screen_end) {
|
||||
x = screen_start;
|
||||
y = y + 8;
|
||||
}
|
||||
arduboy.drawBitmap(x, y, misaki_font_f1[ pb ], MISAKI_FONT_F1_W, 8, WHITE);
|
||||
arduboy.drawBitmap(x + 3, y, misaki_font_0x00, 1, 8, WHITE);
|
||||
x = x + 4;
|
||||
break;
|
||||
#endif
|
||||
#ifdef MISAKI_FONT_F2_H
|
||||
case MISAKI_FONT_F2_PAGE:
|
||||
if (pb > MISAKI_FONT_F2_SIZE) {
|
||||
continue;
|
||||
}
|
||||
if ((x + 8) > screen_end) {
|
||||
x = screen_start;
|
||||
y = y + 8;
|
||||
}
|
||||
arduboy.drawBitmap(x, y, misaki_font_f2[ pb ], MISAKI_FONT_F2_W, 8, WHITE);
|
||||
arduboy.drawBitmap(x + 7, y, misaki_font_0x00, 1, 8, WHITE);
|
||||
x = x + 8;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
//此片段用于DEBUG
|
||||
void HelpMeSerialer() {
|
||||
//串口助手
|
||||
if (Serial.available()) {
|
||||
char TmpChar = Serial.read();
|
||||
switch (TmpChar) {
|
||||
case 'x': x = Serial.parseInt();
|
||||
case 'y': y = Serial.parseInt();
|
||||
case 'a': a = Serial.parseInt();
|
||||
case 'b': b = Serial.parseInt();
|
||||
}
|
||||
}
|
||||
|
||||
Serial.println(String("X ->") + x);
|
||||
Serial.println(String("Y ->") + y);
|
||||
Serial.println(String("A ->") + a);
|
||||
Serial.println(String("B ->") + b);
|
||||
|
||||
}
|
||||
*/
|
@@ -0,0 +1,103 @@
|
||||
//********** 曲线拟合程序 **********
|
||||
//曲线拟合算法来至https://blog.csdn.net/m0_37362454/article/details/82456616 by欧阳小俊
|
||||
|
||||
/*==================polyfit(n,x,y,poly_n,a)===================*/
|
||||
/*=======拟合y=a0+a1*x+a2*x^2+……+apoly_n*x^poly_n========*/
|
||||
/*=====n是数据个数 xy是数据值 poly_n是多项式的项数======*/
|
||||
/*===返回a0,a1,a2,……a[poly_n],系数比项数多一(常数项)=====*/
|
||||
void polyfit(int n, int x[], int y[], int poly_n, float p[])
|
||||
{
|
||||
int i, j;
|
||||
float *tempx, *tempy, *sumxx, *sumxy, *ata;
|
||||
|
||||
tempx = (float *)calloc(n , sizeof(float));
|
||||
sumxx = (float *)calloc((poly_n * 2 + 1) , sizeof(float));
|
||||
tempy = (float *)calloc(n , sizeof(float));
|
||||
sumxy = (float *)calloc((poly_n + 1) , sizeof(float));
|
||||
ata = (float *)calloc( (poly_n + 1) * (poly_n + 1) , sizeof(float) );
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
tempx[i] = 1;
|
||||
tempy[i] = y[i];
|
||||
}
|
||||
for (i = 0; i < 2 * poly_n + 1; i++)
|
||||
{
|
||||
for (sumxx[i] = 0, j = 0; j < n; j++)
|
||||
{
|
||||
sumxx[i] += tempx[j];
|
||||
tempx[j] *= x[j];
|
||||
}
|
||||
}
|
||||
for (i = 0; i < poly_n + 1; i++)
|
||||
{
|
||||
for (sumxy[i] = 0, j = 0; j < n; j++)
|
||||
{
|
||||
sumxy[i] += tempy[j];
|
||||
tempy[j] *= x[j];
|
||||
}
|
||||
}
|
||||
for (i = 0; i < poly_n + 1; i++)
|
||||
{
|
||||
for (j = 0; j < poly_n + 1; j++)
|
||||
{
|
||||
ata[i * (poly_n + 1) + j] = sumxx[i + j];
|
||||
}
|
||||
}
|
||||
gauss_solve(poly_n + 1, ata, p, sumxy);
|
||||
|
||||
free(tempx);
|
||||
free(sumxx);
|
||||
free(tempy);
|
||||
free(sumxy);
|
||||
free(ata);
|
||||
}
|
||||
/*============================================================
|
||||
高斯消元法计算得到 n 次多项式的系数
|
||||
n: 系数的个数
|
||||
ata: 线性矩阵
|
||||
sumxy: 线性方程组的Y值
|
||||
p: 返回拟合的结果
|
||||
============================================================*/
|
||||
void gauss_solve(int n, float A[], float x[], float b[])
|
||||
{
|
||||
int i, j, k, r;
|
||||
float max;
|
||||
for (k = 0; k < n - 1; k++)
|
||||
{
|
||||
max = fabs(A[k * n + k]); // find maxmum
|
||||
r = k;
|
||||
for (i = k + 1; i < n - 1; i++)
|
||||
{
|
||||
if (max < fabs(A[i * n + i]))
|
||||
{
|
||||
max = fabs(A[i * n + i]);
|
||||
r = i;
|
||||
}
|
||||
}
|
||||
if (r != k)
|
||||
{
|
||||
for (i = 0; i < n; i++) //change array:A[k]&A[r]
|
||||
{
|
||||
max = A[k * n + i];
|
||||
A[k * n + i] = A[r * n + i];
|
||||
A[r * n + i] = max;
|
||||
}
|
||||
max = b[k]; //change array:b[k]&b[r]
|
||||
b[k] = b[r];
|
||||
b[r] = max;
|
||||
}
|
||||
|
||||
for (i = k + 1; i < n; i++)
|
||||
{
|
||||
for (j = k + 1; j < n; j++)
|
||||
A[i * n + j] -= A[i * n + k] * A[k * n + j] / A[k * n + k];
|
||||
b[i] -= A[i * n + k] * b[k] / A[k * n + k];
|
||||
}
|
||||
}
|
||||
|
||||
for (i = n - 1; i >= 0; x[i] /= A[i * n + i], i--)
|
||||
{
|
||||
for (j = i + 1, x[i] = b[i]; j < n; j++)
|
||||
x[i] -= A[i * n + j] * x[j];
|
||||
}
|
||||
}
|
@@ -0,0 +1,130 @@
|
||||
void ViewEEPRom() {
|
||||
setRotary(0, 1023, 16, 0);
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
arduboy.setTextSize(1);
|
||||
do {
|
||||
arduboy.clear();
|
||||
for (byte y = 0; y < 8; y++) {
|
||||
for (byte x = 0; x < 2; x++) {
|
||||
if (2 * y + x > 1024) break;
|
||||
arduboy.setCursor(x * 64, y * 8);
|
||||
arduboy.print(2 * y + x + getRotary());
|
||||
arduboy.print(F("->"));
|
||||
arduboy.print(EEPROM[2 * y + x + getRotary()]);
|
||||
arduboy.setCursor(x * 64 + 48, y * 8);
|
||||
arduboy.print((char)EEPROM[2 * y + x + getRotary()]);
|
||||
}
|
||||
}
|
||||
CheckLastButton();
|
||||
arduboy.display();
|
||||
} while (digitalRead(BUTTON_PIN) || lastbutton);
|
||||
}
|
||||
/* 从EEPROM读取烙铁头参数
|
||||
传入:烙铁头的序号
|
||||
作用:把对应序号的烙铁头参数直接载入内存
|
||||
原理:
|
||||
1 计算地址
|
||||
2 读取数据
|
||||
*/
|
||||
void GetEEPRomTip(byte n) {
|
||||
if (n <= TIPMAX) {
|
||||
uint16_t Counter = 21;
|
||||
//跳转到目标地址
|
||||
Counter += (TIPNAMELENGTH + 1) * n;
|
||||
Counter += 5 * 4 * n;
|
||||
//从EEPRom读取数据并载入内存
|
||||
for (int i = 0; i < (TIPNAMELENGTH + 1); i++) TipName[i] = EEPROM.read(Counter++);
|
||||
for (int i = 0; i < 4; i++) EEPROM.get(Counter += 4, PTemp[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* 把烙铁头参数写入EEPRom
|
||||
传入:烙铁头的序号
|
||||
作用:把对应序号的烙铁头参数从运行内存载入到EEPRom
|
||||
原理:
|
||||
1 计算地址
|
||||
2 写入EEProm
|
||||
*/
|
||||
void PutEEPRomTip(byte n) {
|
||||
if (n <= TIPMAX) {
|
||||
uint16_t Counter = 21;
|
||||
//跳转到目标地址
|
||||
Counter += (TIPNAMELENGTH + 1) * n;
|
||||
Counter += 5 * 4 * n;
|
||||
//从EEPRom读取数据并载入内存
|
||||
for (int i = 0; i < (TIPNAMELENGTH + 1); i++) EEPROM.update(Counter++, TipName[i]);
|
||||
for (int i = 0; i < 4; i++) EEPROM.put(Counter += 4, PTemp[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* 从EEPROM删除某一项烙铁头参数
|
||||
传入:烙铁头序号
|
||||
作用:把序号后的烙铁头数据位覆盖移到序号的位置,实现删除数据的目的
|
||||
*/
|
||||
void DelEEPRomTip(byte n) {
|
||||
if (n <= TIPMAX) {
|
||||
uint16_t Counter = 21;
|
||||
//跳转到目标地址
|
||||
Counter += (TIPNAMELENGTH + 1) * n;
|
||||
Counter += 5 * 4 * n;
|
||||
//开始覆盖移动后面的数据
|
||||
byte moveN = NumberOfTips - n - 1;
|
||||
while (moveN--) {
|
||||
for (int i = Counter; i < Counter + (TIPNAMELENGTH + 1) + 4 * 5; i++) EEPROM[i] = EEPROM[i + (TIPNAMELENGTH + 1) + 4 * 5];
|
||||
Counter += (TIPNAMELENGTH + 1) + 4 * 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// reads user settings from EEPROM; if EEPROM values are invalid, write defaults
|
||||
void GetEEPROM() {
|
||||
uint16_t identifier = (EEPROM.read(0) << 8) | EEPROM.read(1);
|
||||
if (identifier == EEPROM_IDENT) {
|
||||
DefaultTemp = (EEPROM.read(2) << 8) | EEPROM.read(3);
|
||||
SleepTemp = (EEPROM.read(4) << 8) | EEPROM.read(5);
|
||||
BoostTemp = EEPROM.read(6);
|
||||
Time2sleep = EEPROM.read(7);
|
||||
Time2off = EEPROM.read(8);
|
||||
TimeOfBoost = EEPROM.read(9);
|
||||
MainScrType = EEPROM.read(10);
|
||||
PIDenable = EEPROM.read(11);
|
||||
BeepEnable = EEPROM.read(12);
|
||||
CurrentTip = EEPROM.read(13);
|
||||
NumberOfTips = EEPROM.read(14);
|
||||
LANG = EEPROM.read(15);
|
||||
FlipState = EEPROM.read(16);
|
||||
UnderVoltage = EEPROM.read(17);
|
||||
Password = (EEPROM.read(18) << 8) | EEPROM.read(19);
|
||||
RotaryD = EEPROM.read(20);
|
||||
}
|
||||
else {
|
||||
EEPROM.update(0, EEPROM_IDENT >> 8); EEPROM.update(1, EEPROM_IDENT & 0xFF);
|
||||
UpdateEEPROM();
|
||||
}
|
||||
GetEEPRomTip(CurrentTip);
|
||||
}
|
||||
|
||||
|
||||
// writes user settings to EEPROM using updade function to minimize write cycles
|
||||
void UpdateEEPROM() {
|
||||
EEPROM.update( 2, DefaultTemp >> 8);
|
||||
EEPROM.update( 3, DefaultTemp & 0xFF);
|
||||
EEPROM.update( 4, SleepTemp >> 8);
|
||||
EEPROM.update( 5, SleepTemp & 0xFF);
|
||||
EEPROM.update( 6, BoostTemp);
|
||||
EEPROM.update( 7, Time2sleep);
|
||||
EEPROM.update( 8, Time2off);
|
||||
EEPROM.update( 9, TimeOfBoost);
|
||||
EEPROM.update(10, MainScrType);
|
||||
EEPROM.update(11, PIDenable);
|
||||
EEPROM.update(12, BeepEnable);
|
||||
EEPROM.update(13, CurrentTip);
|
||||
EEPROM.update(14, NumberOfTips);
|
||||
EEPROM.update(15, LANG);
|
||||
EEPROM.update(16, FlipState);
|
||||
EEPROM.update(17, UnderVoltage);
|
||||
EEPROM.update(18, Password >> 8);
|
||||
EEPROM.update(19, Password & 0xFF);
|
||||
EEPROM.update(20, RotaryD);
|
||||
PutEEPRomTip(CurrentTip);
|
||||
}
|
315
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/F.ino
Normal file
315
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/F.ino
Normal file
@@ -0,0 +1,315 @@
|
||||
|
||||
// reads current rotary encoder value
|
||||
int getRotary() {
|
||||
return (Count >> ROTARY_TYPE);
|
||||
}
|
||||
|
||||
//检查按键
|
||||
void CheckLastButton() {
|
||||
if (lastbutton && digitalRead(BUTTON_PIN)) {
|
||||
delay(10);
|
||||
lastbutton = false;
|
||||
}
|
||||
}
|
||||
//返回对应层数的对象数
|
||||
byte QueryMenuObject() {
|
||||
int SUM = 0;
|
||||
for (int i = 0; i < (MenuLevel); i++) SUM += Menu_table[i];
|
||||
return SUM;
|
||||
}
|
||||
|
||||
|
||||
// average several ADC readings in sleep mode to denoise
|
||||
uint16_t denoiseAnalog (byte port) {
|
||||
uint16_t result = 0;
|
||||
ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt
|
||||
if (port >= A0) port -= A0; // set port and
|
||||
ADMUX = (0x0F & port) | bit(REFS0); // reference to AVcc
|
||||
set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction
|
||||
for (uint8_t i = 0; i < 32; i++) { // get 32 readings
|
||||
sleep_mode(); // go to sleep while taking ADC sample
|
||||
while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed
|
||||
result += ADC; // add them up
|
||||
}
|
||||
bitClear (ADCSRA, ADEN); // disable ADC
|
||||
return (result >> 5); // devide by 32 and return value
|
||||
}
|
||||
|
||||
// get internal temperature by reading ADC channel 8 against 1.1V reference
|
||||
float getChipTemp() {
|
||||
uint16_t result = 0;
|
||||
ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt
|
||||
ADMUX = bit (REFS1) | bit (REFS0) | bit (MUX3); // set reference and mux
|
||||
delay(10); // wait for voltages to settle
|
||||
set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction
|
||||
for (uint8_t i = 0; i < 32; i++) { // get 32 readings
|
||||
sleep_mode(); // go to sleep while taking ADC sample
|
||||
while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed
|
||||
result += ADC; // add them up
|
||||
}
|
||||
bitClear (ADCSRA, ADEN); // disable ADC
|
||||
result >>= 2; // devide by 4
|
||||
return ((result - 2594) / 9.76); // calculate internal temperature in degrees C
|
||||
}
|
||||
|
||||
// get input voltage in mV by reading 1.1V reference against AVcc
|
||||
uint16_t getVCC() {
|
||||
uint16_t result = 0;
|
||||
ADCSRA |= bit (ADEN) | bit (ADIF); // enable ADC, turn off any pending interrupt
|
||||
// set Vcc measurement against 1.1V reference
|
||||
ADMUX = bit (REFS0) | bit (MUX3) | bit (MUX2) | bit (MUX1);
|
||||
delay(1); // wait for voltages to settle
|
||||
set_sleep_mode (SLEEP_MODE_ADC); // sleep during sample for noise reduction
|
||||
for (uint8_t i = 0; i < 16; i++) { // get 16 readings
|
||||
sleep_mode(); // go to sleep while taking ADC sample
|
||||
while (bitRead(ADCSRA, ADSC)); // make sure sampling is completed
|
||||
result += ADC; // add them up
|
||||
}
|
||||
bitClear (ADCSRA, ADEN); // disable ADC
|
||||
result >>= 4; // devide by 16
|
||||
return (1125300L / result); // 1125300 = 1.1 * 1023 * 1000
|
||||
}
|
||||
|
||||
|
||||
// get supply voltage in mV
|
||||
uint16_t getVIN() {
|
||||
long result;
|
||||
result = denoiseAnalog (VIN_PIN); {
|
||||
if (result < 540) return (result * Vcc / 184.416 + 86.987);
|
||||
else if (result < 660) return (result * Vcc / 173.204 - 878.29);
|
||||
else if (result < 745) return (result * Vcc / 143.579 - 4875);
|
||||
else if (result < 781) return (result * Vcc / 119.109 - 10260);
|
||||
else if (result < 800) return (result * Vcc / 86.178 - 23013);
|
||||
else return (result * Vcc / 86.178 - 23113);
|
||||
} // read supply voltage via voltage divider
|
||||
//return (result * Vcc / 179.474); // 179.474 = 1023 * R13 / (R12 + R13)
|
||||
}
|
||||
|
||||
//ADC中断服务
|
||||
// ADC interrupt service routine
|
||||
EMPTY_INTERRUPT (ADC_vect); // nothing to be done here
|
||||
|
||||
//旋转编码器触发中断
|
||||
// Pin change interrupt service routine for rotary encoder
|
||||
ISR (PCINT0_vect) {
|
||||
uint8_t a = PINB & 1;
|
||||
uint8_t b = PIND >> 7 & 1;
|
||||
if (a != a0) { // A changed
|
||||
a0 = a;
|
||||
if (b != b0) { // B changed
|
||||
b0 = b;
|
||||
Count = constrain(Count + ((a == b) ? CountStep : -CountStep), CountMin, CountMax);
|
||||
if (ROTARY_TYPE && ((a == b) != ab0)) {
|
||||
Count = constrain(Count + ((a == b) ? CountStep : -CountStep), CountMin, CountMax);;
|
||||
}
|
||||
ab0 = (a == b);
|
||||
handleMoved = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//计算实际温度
|
||||
// calculates real temperature value according to ADC reading and calibration values
|
||||
void calculateTemp() {
|
||||
CurrentTemp = PTemp[0] + RawTemp * PTemp[1] + RawTemp * RawTemp * PTemp[2] + RawTemp * RawTemp * RawTemp * PTemp[3];
|
||||
}
|
||||
|
||||
/*
|
||||
* 温度控制
|
||||
* mode-> 0:以实际温度数值为基准 1:以ADC数值为基准(非PID模式)
|
||||
*/
|
||||
void Thermostat(bool mode) {
|
||||
// define Setpoint acoording to current working mode
|
||||
if (InOffMode) Setpoint = 0;
|
||||
else if (InSleepMode) Setpoint = SleepTemp;
|
||||
else if (InBoostMode) Setpoint = SetTemp + BoostTemp;
|
||||
else Setpoint = SetTemp;
|
||||
|
||||
// control the heater (PID or direct)
|
||||
if (!mode) {
|
||||
gap = abs(Setpoint - CurrentTemp);
|
||||
if (PIDenable) {
|
||||
Input = CurrentTemp;
|
||||
if (gap < 30) ctrl.SetTunings(consKp, consKi, consKd);
|
||||
else ctrl.SetTunings(aggKp, aggKi, aggKd);
|
||||
ctrl.Compute();
|
||||
} else {
|
||||
// turn on heater if current temperature is below setpoint
|
||||
if ((CurrentTemp + 0.5) < Setpoint) Output = 0; else Output = 255;
|
||||
}
|
||||
} else {
|
||||
gap = 0; //此模式下不计算温度差
|
||||
if ((RawTemp + 0.5) < Setpoint) Output = 0; else Output = 255;
|
||||
}
|
||||
// set heater PWM
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 255 - Output);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, Output);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// creates a short beep on the buzzer
|
||||
void beep() {
|
||||
//体谅一下,没内存了,只能用原始的办法驱动无源蜂鸣器,否则我也不想牺牲宝贵响应资源换内存
|
||||
if (BeepEnable) {
|
||||
for (uint8_t i = 0; i < 255; i++) {
|
||||
digitalWrite(BUZZER_PIN, HIGH);
|
||||
delayMicroseconds(125);
|
||||
digitalWrite(BUZZER_PIN, LOW);
|
||||
delayMicroseconds(125);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//设置旋转编码器的起始值
|
||||
// sets start values for rotary encoder
|
||||
void setRotary(int rmin, int rmax, int rstep, int rvalue) {
|
||||
CountMin = rmin << ROTARY_TYPE;
|
||||
CountMax = rmax << ROTARY_TYPE;
|
||||
if (RotaryD) CountStep = rstep; else CountStep = -rstep;
|
||||
Count = rvalue << ROTARY_TYPE;
|
||||
}
|
||||
|
||||
// reads temperature, vibration switch and supply voltages
|
||||
void SENSORCheck() {
|
||||
// shut off heater in order to measure temperature
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 0);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, 255);
|
||||
#endif
|
||||
delayMicroseconds(Time2settle); // wait for voltage to settle
|
||||
|
||||
uint16_t temp = denoiseAnalog(SENSOR_PIN); // read ADC value for temperature
|
||||
uint8_t d = digitalRead(SWITCH_PIN); // check handle vibration switch
|
||||
if (d != d0) {
|
||||
handleMoved = true; // set flag if handle was moved
|
||||
d0 = d;
|
||||
}
|
||||
if (! SensorCounter--) Vin = getVIN(); // get Vin every now and then
|
||||
|
||||
// turn on again heater
|
||||
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 255 - Output);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, Output);
|
||||
#endif
|
||||
|
||||
|
||||
RawTemp += (temp - RawTemp) * SMOOTHIE; // stabilize ADC temperature reading
|
||||
calculateTemp();
|
||||
|
||||
// stabilize displayed temperature when around setpoint
|
||||
if ((ShowTemp != Setpoint) || (abs(ShowTemp - CurrentTemp) > 5)) ShowTemp = CurrentTemp;
|
||||
if (abs(ShowTemp - Setpoint) <= 1) ShowTemp = Setpoint;
|
||||
// set state variable if temperature is in working range; beep if working temperature was just reached
|
||||
gap = abs(SetTemp - CurrentTemp);
|
||||
if (gap < 10) {
|
||||
if (!IsWorky && BeepIfWorky) beep();
|
||||
IsWorky = true;
|
||||
BeepIfWorky = false;
|
||||
} else {
|
||||
IsWorky = false;
|
||||
BeepIfWorky = true;
|
||||
}
|
||||
// checks if tip is present or currently inserted
|
||||
if (ShowTemp > 500) TipIsPresent = false; // tip removed ?
|
||||
if (!TipIsPresent && (ShowTemp < 500)) { // new tip inserted ?
|
||||
//关闭加热
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 0);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, 255);
|
||||
#endif
|
||||
beep(); // beep for info
|
||||
TipIsPresent = true; // tip is present now
|
||||
ChangeTipScreen(); // show tip selection screen
|
||||
UpdateEEPROM(); // update setting in EEPROM
|
||||
handleMoved = true; // reset all timers
|
||||
RawTemp = denoiseAnalog(SENSOR_PIN); // restart temp smooth algorithm
|
||||
c0 = LOW; // switch must be released
|
||||
setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, SetTemp); // reset rotary encoder
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// check rotary encoder; set temperature, toggle boost mode, enter setup menu accordingly
|
||||
void ROTARYCheck() {
|
||||
// set working temperature according to rotary encoder value
|
||||
SetTemp = getRotary();
|
||||
|
||||
// check rotary encoder switch
|
||||
uint8_t c = digitalRead(BUTTON_PIN);
|
||||
if ( !c && c0 ) {
|
||||
beep();
|
||||
Buttonmillis = millis();
|
||||
while ( (!digitalRead(BUTTON_PIN)) && ((millis() - Buttonmillis) < 500) );
|
||||
if ((millis() - Buttonmillis) >= 500) SetupScreen();
|
||||
else {
|
||||
InBoostMode = !InBoostMode;
|
||||
if (InBoostMode) Boostmillis = millis();
|
||||
handleMoved = true;
|
||||
}
|
||||
}
|
||||
c0 = c;
|
||||
|
||||
// check timer when in boost mode
|
||||
if (InBoostMode && TimeOfBoost) {
|
||||
GoneSeconds = (millis() - Boostmillis) / 1000;
|
||||
if (GoneSeconds >= TimeOfBoost) {
|
||||
InBoostMode = false; // stop boost mode
|
||||
beep(); // beep if boost mode is over
|
||||
BeepIfWorky = true; // beep again when working temperature is reached
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// check and activate/deactivate sleep modes
|
||||
void SLEEPCheck() {
|
||||
if (handleMoved) { // if handle was moved
|
||||
if (InSleepMode) { // in sleep or off mode?
|
||||
if ((CurrentTemp + 20) < SetTemp) // if temp is well below setpoint
|
||||
|
||||
// then start the heater right now
|
||||
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 255);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, 0);
|
||||
#endif
|
||||
|
||||
beep(); // beep on wake-up
|
||||
BeepIfWorky = true; // beep again when working temperature is reached
|
||||
}
|
||||
handleMoved = false; // reset handleMoved flag
|
||||
InSleepMode = false; // reset sleep flag
|
||||
InOffMode = false; // reset off flag
|
||||
Sleepmillis = millis(); // reset sleep timer
|
||||
}
|
||||
|
||||
// check time passed since the handle was moved
|
||||
GoneMinutes = (millis() - Sleepmillis) / 60000;
|
||||
if ( (!InSleepMode) && (Time2sleep > 0) && (GoneMinutes >= Time2sleep) ) {
|
||||
InSleepMode = true;
|
||||
beep();
|
||||
}
|
||||
if ( (!InOffMode) && (Time2off > 0) && (GoneMinutes >= Time2off ) ) {
|
||||
InOffMode = true;
|
||||
beep();
|
||||
}
|
||||
}
|
||||
|
||||
void SetOLEDLightLevel(uint8_t level) {
|
||||
arduboy.sendLCDCommand(0x81); //向SSD1306发送指令:设置内部电阻微调
|
||||
arduboy.sendLCDCommand(level); //微调范围(0-255)
|
||||
}
|
||||
|
||||
ISR(WDT_vect) //WDT中断,8秒一次
|
||||
{
|
||||
WDTCSR |= _BV(WDIE);
|
||||
}
|
714
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/GUI.ino
Normal file
714
software/UI_upgrade_by_createskyblue/Program/1.8/1.8t7/GUI.ino
Normal file
@@ -0,0 +1,714 @@
|
||||
|
||||
// draws the main screen
|
||||
void MainScreen() {
|
||||
if (!(arduboy.nextFrame())) //帧率锁
|
||||
return;
|
||||
//状态
|
||||
byte SysState;
|
||||
if (ShowTemp > 500) SysState = 0;
|
||||
else if (InOffMode) {
|
||||
SysState = 1;
|
||||
DrawIntensiveComputing();
|
||||
} else if (InSleepMode) SysState = 2;
|
||||
else if (InBoostMode) SysState = 3;
|
||||
else if (IsWorky) SysState = 4;
|
||||
else if (Output < 180) SysState = 5;
|
||||
else SysState = 6;
|
||||
if (SysState != 1) {
|
||||
if (MainScrType) {
|
||||
//arduboy.invert(0);
|
||||
arduboy.clear();
|
||||
//详细信息页
|
||||
arduboy.fillRect(0, 0, 128, 64, 1); //白底
|
||||
arduboy.setTextSize(1);
|
||||
SetTextColor(0);
|
||||
//预设名
|
||||
//arduboy.drawSlowXYBitmap(0, 0, Tag, 16, 16, 0);
|
||||
arduboy.setCursor(7, 4); arduboy.print(TipName);
|
||||
//显示状态
|
||||
arduboy.setCursor(53, 1);
|
||||
arduboy.setTextSize(2);
|
||||
switch (LANG) {
|
||||
case 0: arduboy.drawSlowXYBitmap(95, 1, S_table[SysState], 28, 14, 0); break; //中文 Chinese
|
||||
default: //英文 English
|
||||
switch (SysState) {
|
||||
case 1: arduboy.print(F("OFF")); break;
|
||||
case 2: arduboy.print(F("SLEEP")); break;
|
||||
case 3: arduboy.print(F("BOOST")); break;
|
||||
case 4: arduboy.print(F("WORKY")); break;
|
||||
case 5: arduboy.print(F("HEAT")); break;
|
||||
case 6: arduboy.print(F("HOLD")); break;
|
||||
default: arduboy.print(F("ERROR")); break;
|
||||
} break;
|
||||
}
|
||||
|
||||
//运行状态图标
|
||||
arduboy.drawSlowXYBitmap(74, 1, C_table[SysState], 14, 14, 0);
|
||||
arduboy.setTextSize(1);
|
||||
|
||||
//显示探头温度
|
||||
DrawNumRect(0, 15, 5, ShowTemp);
|
||||
|
||||
//状态条
|
||||
DrawStatusBar(0);
|
||||
|
||||
//状态图标 以及 信息
|
||||
//自动报警-图标闪烁
|
||||
if (getChipTemp() < 80 || ((millis() * 4) / 1000) % 2) {
|
||||
arduboy.setCursor(91, 20); arduboy.print(getChipTemp(), 1); arduboy.print((char)248); arduboy.print(F("C")); //芯片温度
|
||||
arduboy.drawSlowXYBitmap(42, 1, Chip, 14, 14, 0);
|
||||
}
|
||||
if ((float)Vin / 100 > UnderVoltage || ((millis() * 4) / 1000) % 2) {
|
||||
arduboy.setCursor(91, 28); arduboy.print((float)getVIN() / 1000, 2); arduboy.print(F("V")); //输入电压
|
||||
arduboy.drawSlowXYBitmap(58, 1, Lightning, 14, 14, 0);
|
||||
}
|
||||
arduboy.setCursor(91, 36); arduboy.print((float)getVCC() / 1000, 3); arduboy.print(F("V")); //芯片电压
|
||||
arduboy.setCursor(91, 44); arduboy.print(RawTemp, 0); //烙铁头热偶原始数据
|
||||
|
||||
|
||||
|
||||
|
||||
arduboy.display();
|
||||
//警报声
|
||||
if (getChipTemp() > 80 && ((millis() * 4) / 1000) % 2 || (float)Vin / 100 < UnderVoltage && ((millis() * 4) / 1000) % 2) beep();
|
||||
} else {
|
||||
//arduboy.invert(1);
|
||||
arduboy.setTextSize(6);
|
||||
SetTextColor(1);
|
||||
arduboy.clear();
|
||||
if (getChipTemp() > 80 && ((millis() * 4) / 1000) % 2) beep();
|
||||
if ((float)Vin / 100 < UnderVoltage && ((millis() * 4) / 1000) % 2) beep();
|
||||
arduboy.setCursor(12, 2);
|
||||
|
||||
if (ShowTemp > 500) arduboy.print(999); else arduboy.print(ShowTemp);
|
||||
DrawStatusBar(1);
|
||||
arduboy.display();
|
||||
}
|
||||
}
|
||||
}
|
||||
void DrawNumRect(byte x, byte y, byte size, int n) {
|
||||
arduboy.setCursor(3 + x, 3 + y);
|
||||
arduboy.setTextSize(size);
|
||||
if (ShowTemp > 500) arduboy.print(F("000")); else arduboy.print(n);
|
||||
arduboy.drawRect(1 + x, 1 + y, 89, 39, 0);
|
||||
}
|
||||
|
||||
//绘制状态条
|
||||
void DrawStatusBar(bool color) {
|
||||
SetTextColor(color);
|
||||
arduboy.setTextSize(1);
|
||||
//温度条
|
||||
//框
|
||||
arduboy.drawRect(1, 54, 102, 9, color);
|
||||
//条
|
||||
if (ShowTemp <= 500) arduboy.fillRect(1, 54, map(ShowTemp, 0, 500, 2, 102), 9, color);
|
||||
//指示部分
|
||||
arduboy.fillRect(map(Setpoint, 0, 500, 2, 102) - 2, 55, 3, 7, color);
|
||||
//先来个白底
|
||||
arduboy.fillRect(map(Setpoint, 0, 500, 2, 102) - 3, 63, 5, 1, color);
|
||||
arduboy.drawLine(map(Setpoint, 0, 500, 2, 102) - 1, 63, map(Setpoint, 0, 500, 2, 102) - 1, 54, !color);
|
||||
|
||||
//画指示针
|
||||
arduboy.drawSlowXYBitmap(map(Setpoint, 0, 500, 2, 102) - 3, 59, Pointer, 5, 4, !color);
|
||||
|
||||
//功率条
|
||||
arduboy.drawRect(104, 54, 23, 9, color);
|
||||
arduboy.fillRect(104, 54, map(Output, 255, 0, 0, 23), 9, color);
|
||||
|
||||
SetTextColor(!color);
|
||||
//////////////进入反色////////////////////////////////
|
||||
arduboy.setCursor(2, 55); arduboy.print(Setpoint, 0);//探头预设温度
|
||||
arduboy.setCursor(105, 55); arduboy.print(map(Output, 255, 0, 0, 100)); arduboy.print(F("%")); //功率百分比
|
||||
SetTextColor(color);
|
||||
}
|
||||
|
||||
//设置画笔颜色
|
||||
void SetTextColor(bool color) {
|
||||
arduboy.setTextBackground(!color);
|
||||
arduboy.setTextColor(color);
|
||||
}
|
||||
|
||||
|
||||
// setup screen
|
||||
void SetupScreen() {
|
||||
//关闭加热
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 0);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, 255);
|
||||
#endif
|
||||
beep();
|
||||
uint16_t SaveSetTemp = SetTemp;
|
||||
uint8_t selection = 0;
|
||||
bool repeat = true;
|
||||
|
||||
while (repeat) {
|
||||
//arduboy.invert(0);
|
||||
MenuLevel = 0; //默认打开主菜单
|
||||
selection = MenuScreen(selection);
|
||||
switch (selection) {
|
||||
case 0: MenuLevel = 1; TipScreen(); repeat = false; break;
|
||||
case 1: MenuLevel = 2; TempScreen(); break;
|
||||
case 2: MenuLevel = 3; TimerScreen(); break;
|
||||
case 3: MenuLevel = 4; PIDenable = MenuScreen(PIDenable); break;
|
||||
case 4: ScreenSet(); break;
|
||||
case 5: MenuLevel = 6; BeepEnable = MenuScreen(BeepEnable); break;
|
||||
case 6: RotarySet(); break;
|
||||
case 7: UnderVoltageSet(); break;
|
||||
case 8: PasswordSet(); break;
|
||||
case 9: MenuLevel = 8; LANG = MenuScreen(LANG); if (LANG == 2 && !LANG_JP_State) LANG = 1; break;
|
||||
case 10: QRcodeScreen(); break;
|
||||
default: repeat = false; break;
|
||||
}
|
||||
}
|
||||
UpdateEEPROM();
|
||||
handleMoved = true;
|
||||
SetTemp = SaveSetTemp;
|
||||
setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, SetTemp);
|
||||
}
|
||||
|
||||
//设置滚轮方向
|
||||
void RotarySet() {
|
||||
bool Exit = false;
|
||||
float rad;
|
||||
byte ExitBar = 0;
|
||||
bool color = 0;
|
||||
SetTextColor(!color);
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
setRotary(60, 420, 18, 240);
|
||||
do {
|
||||
arduboy.setTextSize(1);
|
||||
Setpoint = getRotary();
|
||||
ShowTemp = Setpoint;
|
||||
|
||||
arduboy.clear();
|
||||
|
||||
arduboy.fillRect(0, 0, 128, 64, color);
|
||||
|
||||
//仪表盘
|
||||
arduboy.fillCircle(24 + 12 * cos(rad), 24 - 12 * sin(rad), 5, !color);
|
||||
arduboy.drawCircle(24, 24, 20, !color);
|
||||
|
||||
//右上角的模式提示文本
|
||||
arduboy.setCursor(55, 1);
|
||||
arduboy.setTextSize(2);
|
||||
arduboy.print(F("MODE "));
|
||||
if (RotaryD) {
|
||||
arduboy.print(F("-"));
|
||||
rad = ((Setpoint - 60) / 360.0) * (2 * PI) - PI / 2;
|
||||
} else {
|
||||
arduboy.print(F("+"));
|
||||
rad = ((-Setpoint - 60) / 360.0) * (2 * PI) + PI * 1 / 6;
|
||||
}
|
||||
//右侧数字显示
|
||||
DrawNumRect(55, 18, 4, ShowTemp);
|
||||
//下端的状态条
|
||||
DrawStatusBar(!color);
|
||||
//退出条
|
||||
arduboy.fillRect(0, 0, ExitBar, 4, !color);
|
||||
arduboy.display();
|
||||
CheckLastButton();
|
||||
if (!digitalRead(BUTTON_PIN) && !lastbutton) {
|
||||
ExitBar += 8;
|
||||
arduboy.display();
|
||||
if (ExitBar > 127) Exit = true;
|
||||
} else {
|
||||
if (ExitBar > 1 && ExitBar < 64) {
|
||||
RotaryD = !RotaryD;
|
||||
setRotary(60, 420, 18, 240);
|
||||
beep();
|
||||
}
|
||||
ExitBar = 0;
|
||||
}
|
||||
|
||||
} while (!Exit);
|
||||
beep(); beep();
|
||||
}
|
||||
//显示设置菜单
|
||||
// tip settings screen
|
||||
void ScreenSet() {
|
||||
uint8_t selection = 0;
|
||||
bool repeat = true;
|
||||
while (repeat) {
|
||||
MenuLevel = 9;
|
||||
selection = MenuScreen(selection);
|
||||
switch (selection) {
|
||||
case 0: MenuLevel = 5; MainScrType = MenuScreen(MainScrType); break;
|
||||
case 1: FlipState = !FlipState; break;
|
||||
default: repeat = false; break;
|
||||
}
|
||||
Flip(FlipState); //设置屏幕反转状态
|
||||
}
|
||||
UpdateEEPROM();
|
||||
}
|
||||
|
||||
//预设设置菜单
|
||||
// tip settings screen
|
||||
void TipScreen() {
|
||||
uint8_t selection = 0;
|
||||
bool repeat = true;
|
||||
while (repeat) {
|
||||
MenuLevel = 1;
|
||||
selection = MenuScreen(selection);
|
||||
switch (selection) {
|
||||
case 0: ChangeTipScreen(); break;
|
||||
case 1: CalibrationScreen(); break;
|
||||
case 2: InputNameScreen(); break;
|
||||
case 3: DeleteTipScreen(); break;
|
||||
case 4: AddTipScreen(); break;
|
||||
default: repeat = false; break;
|
||||
}
|
||||
}
|
||||
//ViewEEPRom();
|
||||
}
|
||||
|
||||
//温控设置菜单
|
||||
// temperature settings screen
|
||||
void TempScreen() {
|
||||
uint8_t selection = 0;
|
||||
bool repeat = true;
|
||||
while (repeat) {
|
||||
selection = MenuScreen(selection);
|
||||
switch (selection) {
|
||||
case 0: setRotary(TEMP_MIN, TEMP_MAX, TEMP_STEP, DefaultTemp);
|
||||
DefaultTemp = InputScreen(18); break;
|
||||
case 1: setRotary(20, 200, TEMP_STEP, SleepTemp);
|
||||
SleepTemp = InputScreen(19); break;
|
||||
case 2: setRotary(10, 100, TEMP_STEP, BoostTemp);
|
||||
BoostTemp = InputScreen(20); break;
|
||||
default: repeat = false; break;
|
||||
}
|
||||
}
|
||||
UpdateEEPROM();
|
||||
}
|
||||
|
||||
|
||||
//定时器设置菜单
|
||||
// timer settings screen
|
||||
void TimerScreen() {
|
||||
uint8_t selection = 0;
|
||||
bool repeat = true;
|
||||
while (repeat) {
|
||||
selection = MenuScreen(selection);
|
||||
switch (selection) {
|
||||
case 0: setRotary(0, 30, 1, Time2sleep);
|
||||
Time2sleep = InputScreen(22); break;
|
||||
case 1: setRotary(0, 60, 5, Time2off);
|
||||
Time2off = InputScreen(23); break;
|
||||
case 2: setRotary(0, 180, 10, TimeOfBoost);
|
||||
TimeOfBoost = InputScreen(24); break;
|
||||
default: repeat = false; break;
|
||||
}
|
||||
}
|
||||
UpdateEEPROM();
|
||||
}
|
||||
//英语支持
|
||||
//i-文本id c-居中
|
||||
void Print_EN(byte i) {
|
||||
char buffer[11];
|
||||
byte a = 0;
|
||||
strcpy_P(buffer, (char *)pgm_read_word(&(EN_table[i])));
|
||||
while (1) {
|
||||
if (buffer[a] != '\0') a++; else break;
|
||||
}
|
||||
arduboy.setCursor((128 - a * 6) / 2, 52);
|
||||
arduboy.print(buffer);
|
||||
}
|
||||
//菜单界面
|
||||
// menu screen
|
||||
uint8_t MenuScreen(uint8_t selected) {
|
||||
int SlidingAnimationX;
|
||||
uint8_t lastselected = selected;
|
||||
setRotary(0, Menu_table[MenuLevel] - 1, 1, selected);
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
SetTextColor(1);
|
||||
do {
|
||||
selected = getRotary();
|
||||
//非线性滑动动画
|
||||
SlidingAnimationX += (selected - lastselected) * 56;
|
||||
if (SlidingAnimationX != 0) SlidingAnimationX += 0.55 * (-SlidingAnimationX);
|
||||
lastselected = selected;
|
||||
arduboy.clear();
|
||||
//绘制图标 如果有指定的话
|
||||
for (byte i = 0; i < 5; i++) if (selected - 2 + i >= 0 && selected - 2 + i < Menu_table[MenuLevel]) DrawApp(-72 + i * 56 + SlidingAnimationX, selected - 2 + i + QueryMenuObject());
|
||||
DrawAppText(selected + QueryMenuObject());
|
||||
|
||||
arduboy.display();
|
||||
CheckLastButton();
|
||||
//beep(0);
|
||||
} while (digitalRead(BUTTON_PIN) || lastbutton);
|
||||
beep();
|
||||
return selected;
|
||||
}
|
||||
|
||||
//显示APP图标
|
||||
void DrawApp(int x, byte appID) {
|
||||
DrawUIFrame(x, 0, 1);
|
||||
drawSlowXYBitmapResize(x + 3, 3, Ico_table[appID], 14, 14, 3, 1);
|
||||
}
|
||||
|
||||
//显示APP对应的文本
|
||||
void DrawAppText(byte appID) {
|
||||
// arduboy.setCursor(0, 55); arduboy.print(appID);
|
||||
if (LANG == 0) arduboy.drawSlowXYBitmap(48, 48, CN_table[appID], 36, 16, 1); else if (LANG == 2 && LANG_JP_State) {
|
||||
#if LANG_JP_State
|
||||
drawText(48, 52, JP_table[appID], pgm_read_byte(&(JP_Length_table[appID])));
|
||||
#endif
|
||||
} else {
|
||||
arduboy.setCursor(48, 52);
|
||||
arduboy.setTextSize(1);
|
||||
Print_EN(appID);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawUIFrame(int x, int y, bool color) {
|
||||
arduboy.fillRect(x, y, 48, 48, color);
|
||||
arduboy.fillRect(x + 3, y + 3, 42, 42, !color); //雕空
|
||||
DrawPoint(x, y, 0);
|
||||
DrawPoint(x + 47, y, 0);
|
||||
DrawPoint(x, y + 47, 0);
|
||||
DrawPoint(x + 47, y + 47, 0);
|
||||
}
|
||||
|
||||
void DrawPoint(int x, int y, bool color) {
|
||||
arduboy.drawPixel(x + 1, y, color);
|
||||
arduboy.drawPixel(x - 1, y, color);
|
||||
arduboy.drawPixel(x, y + 1, color);
|
||||
arduboy.drawPixel(x, y - 1, color);
|
||||
arduboy.drawPixel(x, y, color);
|
||||
}
|
||||
|
||||
//FP 密集运算屏保
|
||||
void DrawIntensiveComputing() {
|
||||
//关闭加热
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 0);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, 255);
|
||||
#endif
|
||||
float calculate;
|
||||
// while (1) {
|
||||
arduboy.clear();
|
||||
|
||||
//随机线条
|
||||
DrawIntensiveComputingLine();
|
||||
|
||||
calculate = sin(millis() / 4000.0);
|
||||
//模拟噪点
|
||||
for (int i = 0; i < calculate * 256 + 256; i++) arduboy.drawPixel(random(0, 128), random(0, 64), 1);
|
||||
//声效
|
||||
if ((BeepEnable)) analogWrite(BUZZER_PIN, 64 + calculate * 64 + random(-8, 8));
|
||||
//if ((BeepEnable)) tone(BUZZER_PIN, int(calculate * 300) + 500 + random(-50, 50)); //没必要浪费内存
|
||||
|
||||
arduboy.display();
|
||||
//delay(60-calculate*30);
|
||||
//}
|
||||
}
|
||||
//绘制屏保-密集运算线条
|
||||
void DrawIntensiveComputingLine() {
|
||||
for (byte a = 0; a < 4; a++) {
|
||||
Line[a] += random(-1, 1);
|
||||
if (Line[a] > 128) Line[a] -= 128;
|
||||
for (byte b = 0; b < random(3, 6); b++) {
|
||||
arduboy.drawFastHLine(0, Line[a] + random(-10, 10), 128, 1); //水平线
|
||||
arduboy.drawFastVLine(Line[a] + random(-10, 10), 0, 64, 1); //垂直线
|
||||
}
|
||||
}
|
||||
}
|
||||
//模拟数字滚轮 Numerical scrolling effect
|
||||
void DisplayNum(int Num) {
|
||||
arduboy.setTextSize(6);
|
||||
SetTextColor(0);
|
||||
//数字滚轮
|
||||
for (byte i = 0; i < 3; i++) LastValue[i] = int(Value / pow(10, 2 - i)) % 10;
|
||||
Value = Num;
|
||||
for (byte i = 0; i < 3; i++) {
|
||||
SlidingAnimationY[i] += ((int(Value / pow(10, 2 - i)) % 10) - LastValue[i]) * 50;
|
||||
if (SlidingAnimationY[i] != 0) SlidingAnimationY[i] += 0.8 * (-SlidingAnimationY[i]);
|
||||
arduboy.fillRect(0 + i * 44, 0, 38, 50, 1); //白底
|
||||
for (int ii = -1; ii < 2; ii++) {
|
||||
arduboy.setCursor(4 + i * 44, 4 - SlidingAnimationY[i] + ii * 50);
|
||||
arduboy.print(LastValue[i] + ii);
|
||||
}
|
||||
}
|
||||
//刻度标
|
||||
arduboy.fillRect(0, 0, 128, 2, 0); //上遮罩层
|
||||
arduboy.fillRect(0, 48, 128, 16, 0); //下遮罩层
|
||||
}
|
||||
|
||||
//数值输入界面
|
||||
// input value screen
|
||||
uint16_t InputScreen(byte appID) {
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
do {
|
||||
arduboy.clear();
|
||||
DisplayNum(getRotary());
|
||||
DrawAppText(appID);
|
||||
arduboy.display();
|
||||
CheckLastButton();
|
||||
} while (digitalRead(BUTTON_PIN) || lastbutton);
|
||||
beep();
|
||||
return Value;
|
||||
}
|
||||
|
||||
//设置开机密码
|
||||
void PasswordSet() {
|
||||
Password = InputBigNum(Password, 8);
|
||||
beep();
|
||||
}
|
||||
|
||||
void BootPassword() {
|
||||
if (Password != 0) {
|
||||
do {
|
||||
arduboy.clear();
|
||||
DrawApp(40, 8);
|
||||
DrawAppText(8);
|
||||
arduboy.display();
|
||||
delay(1000);
|
||||
beep(); beep(); beep();
|
||||
} while (InputBigNum(0, 8) != Password);
|
||||
}
|
||||
}
|
||||
|
||||
//欠压报警设置
|
||||
// information display screen
|
||||
void UnderVoltageSet() {
|
||||
setRotary(0, 250, 1, UnderVoltage);
|
||||
UnderVoltage = InputScreen(7);
|
||||
beep();
|
||||
}
|
||||
|
||||
|
||||
//更换烙铁头预设界面
|
||||
// change tip screen
|
||||
void ChangeTipScreen() {
|
||||
uint8_t selected = CurrentTip;
|
||||
uint8_t lastselected = selected;
|
||||
int8_t arrow = 0;
|
||||
if (selected) arrow = 1;
|
||||
setRotary(0, NumberOfTips - 1, 1, selected);
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
do {
|
||||
//beep(0);
|
||||
arduboy.clear();
|
||||
selected = getRotary();
|
||||
arrow = constrain(arrow + selected - lastselected, 0, 2);
|
||||
lastselected = selected;
|
||||
SetTextColor(0);
|
||||
arduboy.setTextSize(2);
|
||||
arduboy.setCursor(0, 0); arduboy.print(F("Select Tip"));
|
||||
SetTextColor(1);
|
||||
arduboy.setCursor(0, 16 * (arrow + 1)); arduboy.print(F(">"));
|
||||
for (uint8_t i = 0; i < 3; i++) {
|
||||
uint8_t drawnumber = selected + i - arrow;
|
||||
if (drawnumber < NumberOfTips) {
|
||||
arduboy.setCursor(12, 16 * (i + 1));
|
||||
GetEEPRomTip(selected + i - arrow);
|
||||
arduboy.print(TipName);
|
||||
}
|
||||
}
|
||||
CheckLastButton();
|
||||
arduboy.display();
|
||||
} while (digitalRead(BUTTON_PIN) || lastbutton);
|
||||
|
||||
beep();
|
||||
CurrentTip = selected;
|
||||
GetEEPRomTip(CurrentTip);
|
||||
beep();
|
||||
ShowPTemp(&PTemp[0]);
|
||||
|
||||
|
||||
}
|
||||
|
||||
//温度校准界面
|
||||
// temperature calibration screen
|
||||
void CalibrationScreen() {
|
||||
float P[4];
|
||||
int xx[9];
|
||||
for (int CalStep = 0; CalStep < 9; CalStep++) {
|
||||
if (CalStep != 0) setRotary(0, 1023, 1, xx[CalStep - 1]); else setRotary(0, 1023, 1, 0);
|
||||
BeepIfWorky = true;
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
do {
|
||||
arduboy.clear();
|
||||
arduboy.setTextSize(1);
|
||||
SENSORCheck(); //读取传感器
|
||||
SetTemp = getRotary();
|
||||
Thermostat(1); //加热控制 - ADC数值为基准
|
||||
|
||||
arduboy.setCursor(8, 0);
|
||||
arduboy.print(F("Cal ADC-> "));
|
||||
arduboy.print(RawTemp);
|
||||
|
||||
for (byte y = 0; y < 5; y++) {
|
||||
for (byte x = 0; x < 2; x++) {
|
||||
if (2 * y + x > CalStep) break;
|
||||
arduboy.setCursor(x * 64 + 4, y * 8 + 16);
|
||||
arduboy.print(CalTemp[2 * y + x]);
|
||||
arduboy.print(F(" - "));
|
||||
if (2 * y + x == CalStep) arduboy.print(getRotary());
|
||||
else arduboy.print(xx[2 * y + x]);
|
||||
}
|
||||
}
|
||||
|
||||
CheckLastButton();
|
||||
arduboy.display();
|
||||
} while (digitalRead(BUTTON_PIN) || lastbutton);
|
||||
xx[CalStep] = getRotary();
|
||||
beep(); delay (10);
|
||||
}
|
||||
|
||||
//关闭加热
|
||||
#if UsePMOS
|
||||
analogWrite(CONTROL_PIN, 0);
|
||||
#else
|
||||
analogWrite(CONTROL_PIN, 255);
|
||||
#endif
|
||||
delayMicroseconds(Time2settle); // wait for voltage to settle
|
||||
bool pass = true;
|
||||
for (int i = 0; i < 8; i++) if (xx[i] + 5 >= xx[i + 1]) pass = false;
|
||||
if (pass) {
|
||||
MenuLevel = 7;
|
||||
free(&pass);
|
||||
polyfit(9, xx, CalTemp, 3, P); //拟合程序
|
||||
free(xx);
|
||||
ShowPTemp(&P[0]);
|
||||
if (MenuScreen(0)) {
|
||||
for (uint8_t i = 0; i < 4; i++) PTemp[i] = P[i]; //写入拟合系数
|
||||
free(P);
|
||||
UpdateEEPROM();
|
||||
}
|
||||
} else {
|
||||
arduboy.clear();
|
||||
arduboy.setCursor(0, 24); arduboy.print(F("ERROR"));
|
||||
arduboy.display();
|
||||
delay(5000);
|
||||
}
|
||||
}
|
||||
//显示默认烙铁头温度曲线系数
|
||||
void ShowPTemp(float *p) {
|
||||
arduboy.clear();
|
||||
arduboy.setTextSize(1);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
arduboy.setCursor(12, i * 8 + 16);
|
||||
arduboy.print(F("P["));
|
||||
arduboy.print(i, 7);
|
||||
arduboy.print(F("] = "));
|
||||
arduboy.print(*p, 7);
|
||||
p++;
|
||||
}
|
||||
arduboy.display();
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
while (digitalRead(BUTTON_PIN) || lastbutton) CheckLastButton();
|
||||
|
||||
}
|
||||
//命名界面 文本输入界面
|
||||
// input tip name screen
|
||||
void InputNameScreen() {
|
||||
uint8_t value;
|
||||
for (uint8_t digit = 0; digit < (TIPNAMELENGTH - 1); digit++) {
|
||||
lastbutton = (!digitalRead(BUTTON_PIN));
|
||||
setRotary(31, 96, 1, 65);
|
||||
do {
|
||||
value = getRotary();
|
||||
if (value == 31) {
|
||||
value = 95;
|
||||
setRotary(31, 96, 1, 95);
|
||||
}
|
||||
if (value == 96) {
|
||||
value = 32;
|
||||
setRotary(31, 96, 1, 32);
|
||||
}
|
||||
//arduboy.setCursor(0, 0);arduboy.print();
|
||||
arduboy.clear();
|
||||
arduboy.setTextSize(2);
|
||||
arduboy.setCursor(16 * digit, 48); arduboy.print(char(94));
|
||||
arduboy.setCursor(0, 32);
|
||||
for (uint8_t i = 0; i < digit; i++) arduboy.print(TipName[i]);
|
||||
arduboy.setCursor(16 * digit, 32); arduboy.print(char(value));
|
||||
CheckLastButton();
|
||||
arduboy.display();
|
||||
} while (digitalRead(BUTTON_PIN) || lastbutton);
|
||||
TipName[digit] = value;
|
||||
beep(); delay (10);
|
||||
}
|
||||
TipName[TIPNAMELENGTH - 1] = 0;
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
// delete tip screen
|
||||
void DeleteTipScreen() {
|
||||
MenuLevel = 7;
|
||||
if (NumberOfTips == 1) {
|
||||
//MessageScreen(DeleteMessage, sizeof(DeleteMessage));
|
||||
}
|
||||
else if (MenuScreen(0)) {
|
||||
if (CurrentTip == (NumberOfTips - 1)) {
|
||||
CurrentTip--;
|
||||
}
|
||||
else {
|
||||
DelEEPRomTip(CurrentTip);
|
||||
}
|
||||
NumberOfTips--;
|
||||
}
|
||||
}
|
||||
|
||||
//新建烙铁 预设
|
||||
// add new tip screen
|
||||
void AddTipScreen() {
|
||||
if (NumberOfTips < TIPMAX) {
|
||||
CurrentTip = NumberOfTips++; InputNameScreen();
|
||||
PTemp[0] = TempP1;
|
||||
PTemp[1] = TempP2;
|
||||
PTemp[2] = TempP3;
|
||||
PTemp[3] = TempP4;
|
||||
}
|
||||
UpdateEEPROM();
|
||||
}
|
||||
|
||||
int InputBigNum(int InputPW, byte appID) {
|
||||
setRotary(0, 900, 100, InputPW);
|
||||
InputPW = InputScreen(appID);
|
||||
setRotary(InputPW, InputPW + 90, 10, InputPW);
|
||||
InputPW = InputScreen(appID);
|
||||
setRotary(InputPW, InputPW + 9, 1, InputPW);
|
||||
InputPW = InputScreen(appID);
|
||||
return InputPW;
|
||||
}
|
||||
void QRcodeScreen() {
|
||||
arduboy.clear();
|
||||
arduboy.drawSlowXYBitmap(40, 0, QRCode, 48, 48, 1);
|
||||
arduboy.display();
|
||||
delay(100);
|
||||
do {
|
||||
} while (digitalRead(BUTTON_PIN) || lastbutton);
|
||||
beep();
|
||||
}
|
||||
|
||||
//位图缩放 代码片段改自arduboy2
|
||||
void drawSlowXYBitmapResize(int x, int y, const uint8_t *bitmap, uint8_t w, uint8_t h, uint8_t size, uint8_t color) {
|
||||
int16_t xi, yi, byteWidth = (w + 7) / 8;
|
||||
for (yi = 0; yi < h; yi ++) {
|
||||
for (xi = 0; xi < w; xi ++) {
|
||||
if (pgm_read_byte(bitmap + yi * byteWidth + xi / 8) & (128 >> (xi & 7))) {
|
||||
arduboy.fillRect(x + xi * size, y + yi * size, size, size, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//翻转
|
||||
void Flip(bool Fmode) {
|
||||
arduboy.flipVertical(Fmode);
|
||||
arduboy.flipHorizontal(Fmode);
|
||||
}
|
||||
|
||||
//展示版本号
|
||||
void ShowVersion() {
|
||||
arduboy.clear();
|
||||
arduboy.setCursor(43, 28);
|
||||
arduboy.print(F(VERSION));
|
||||
arduboy.display();
|
||||
delay(1000);
|
||||
}
|
@@ -0,0 +1,54 @@
|
||||
//********** 看门狗函数 **********
|
||||
void set_wdt_mod(uint8_t mod, uint8_t ii) //模式,超时时间
|
||||
{
|
||||
/*
|
||||
WDCE
|
||||
该位在定时序列中用于更改WDE和预分频器位
|
||||
要清除WDE位或更改预分频器位,必须将WDCE置1。
|
||||
一旦写入1,硬件将在四个时钟周期后清除WDCE。
|
||||
0=16ms,1=32ms,2=64ms,3=128ms,4=250ms
|
||||
5=500ms,6=1s,7=2s,8=4s,9=8s
|
||||
*/
|
||||
if (ii > 9 ) ii = 9;
|
||||
byte bb;
|
||||
bb = ii & 7;
|
||||
if (ii > 7) bb |= (1 << 5);
|
||||
bb |= (1 << WDCE);
|
||||
|
||||
switch (mod) {
|
||||
case 0: //关闭看门狗
|
||||
__asm__ __volatile__ ("wdr"); //看门狗复位
|
||||
MCUSR = 0x00; //看门狗复位标志清零
|
||||
WDTCSR = (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1
|
||||
WDTCSR = 0x00; //清除所有预分频位
|
||||
break;
|
||||
|
||||
case 1: //打开看门狗,设置复位模式
|
||||
__asm__ __volatile__ ("wdr"); //看门狗复位
|
||||
MCUSR &= ~(1 << WDRF); //MUUSR中的WDRF清零,清除复位标志
|
||||
WDTCSR |= (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1
|
||||
//设置新的看门狗超时值bb
|
||||
WDTCSR = bb; //8秒时bb=0011 0001
|
||||
WDTCSR |= _BV(WDE); //设置复位模式
|
||||
break;
|
||||
|
||||
case 2: //打开看门狗,设置中断模式
|
||||
__asm__ __volatile__ ("wdr"); //看门狗复位
|
||||
MCUSR &= ~(1 << WDRF); //MUUSR中的WDRF清零,清除复位标志
|
||||
WDTCSR |= (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1
|
||||
//设置新的看门狗超时值bb
|
||||
WDTCSR = bb; //8秒时bb=0011 0001
|
||||
WDTCSR |= _BV(WDIE); //设置中断模式
|
||||
break;
|
||||
|
||||
case 3: //打开看门狗,设置中断和复位模式
|
||||
__asm__ __volatile__ ("wdr"); //看门狗复位
|
||||
MCUSR &= ~(1 << WDRF); //MUUSR中的WDRF清零,清除复位标志
|
||||
WDTCSR |= (1 << WDCE) | (1 << WDE); //打开允许修改使能,并WDE置1
|
||||
//设置新的看门狗超时值bb
|
||||
WDTCSR = bb; //8秒时bb=0011 0001
|
||||
WDTCSR |= _BV(WDIE); //设置中断模式
|
||||
WDTCSR |= _BV(WDE); //设置复位模式
|
||||
break;
|
||||
}
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 280 B After Width: | Height: | Size: 267 B |
Reference in New Issue
Block a user