Часы на ssd1306 (много)
- Войдите на сайт для отправки комментариев
Пнд, 09/08/2021 - 21:01
По запросу из темы
http://arduino.ru/forum/proekty/imitatsiya-razlichnykh-shkal-na-displee-...
и от нечего делать (бейджик к Ардуино не цепляется :-( , сделал макет часов - каких точно ни у кого нет :-)
///////////// ЧАСЫ НА 2 ДИСПЛЕЯХ ИЗ 3 (можно добавить секунды ещё)
#include <OLED_I2C.h>
OLED myOLED(SDA, SCL);
#define disp_1 12 // управляющие дисплееями выводы
#define disp_2 11
#define disp_3 10
/////////////
#include <SPI.h>
#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS3231);
//SDA - A4 //SCL - A5 //ПОДКЛЮЧЕНИЕ ВЫВОДОВ МОДУЛЯ ВРЕМЕНИ
/////////////////
int t = 100; // пауза между считыванием данных по времени с модуля
extern uint8_t BigZif_0_9[];//внебиблиотечные цифры - самопальный шрифт, добавленный в библиотеку экранчика
void setup()
{
delay(50);
////// подключение всех дисплеев
pinMode(disp_1, OUTPUT);
digitalWrite(disp_1, HIGH);
myOLED.begin();
digitalWrite(disp_1, LOW);
delay(50);
//////
pinMode(disp_2, OUTPUT);
digitalWrite(disp_2, HIGH);
myOLED.begin();
digitalWrite(disp_2, LOW);
delay(50);
////////
pinMode(disp_3, OUTPUT);
digitalWrite(disp_3, HIGH);
myOLED.begin();
digitalWrite(disp_3, LOW);
delay(50);
////////
myOLED.setFont(BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт
myOLED.invert(0);//инверсия цвета
/////////////
time.begin();
////////начальная установка часов////////
//time.settime(0,58,18,20,8,19,2); // 0 сек, 58 мин, 18 час, 20, АВГУСТА, 2019 года, ВТОРНИК (раскомментить, выставить желаемое, загрузить скетч, закомментить,загрузить скетч)
}
void loop()
{
////////////////////
String cmd1 = time.gettime("H"); int K = cmd1.substring(0, 1).toInt(); myOLED. printNumI(K, 0, 0); //десятки часов
K = cmd1.substring(1).toInt(); myOLED.printNumI( K, 63, 0); //единицы часов
myOLED.drawLine(127, 0, 127, 63);//разделительная линия
dis_3();
////
cmd1 = time.gettime("i"); K = cmd1.substring(0, 1).toInt(); myOLED. printNumI(K, 0, 0); //десятки минут
K = cmd1.substring(1).toInt(); myOLED.printNumI( K, 63, 0); //единицы минут
myOLED.drawLine(0, 0, 0, 63);
dis_2();
///////////////////
delay(t);
}
////////////////////////////
////////////////////////////
///////////////////////////
void dis_1() { //функции обновления изображений на экранах
digitalWrite(disp_1, HIGH); myOLED.update(); digitalWrite(disp_1, LOW); myOLED.clrScr(); // очищаем дисплей
}
void dis_2() {
digitalWrite(disp_2, HIGH); myOLED.update(); digitalWrite(disp_2, LOW); myOLED.clrScr(); // очищаем дисплей
}
void dis_3() {
digitalWrite(disp_3, HIGH); myOLED.update(); digitalWrite(disp_3, LOW); myOLED.clrScr(); // очищаем дисплей
}
/////////////////////////



Картина маслом.
Запрос из 329 поста (забыл указать).
#if defined(__AVR__) #include <avr/pgmspace.h> #define fontdatatype const uint8_t #elif defined(__PIC32MX__) #define PROGMEM #define fontdatatype const unsigned char #elif defined(__arm__) #define PROGMEM #define fontdatatype const unsigned char #endif fontdatatype SmallFont[] PROGMEM = { 0x06, 0x08, 0x20, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // sp 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, // ! 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, // " 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14, // # 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12, // $ 0x00, 0x23, 0x13, 0x08, 0x64, 0x62, // % 0x00, 0x36, 0x49, 0x55, 0x22, 0x50, // & 0x00, 0x00, 0x05, 0x03, 0x00, 0x00, // ' 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00, // ( 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00, // ) 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, // * 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, // + 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00, // , 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, // - 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, // . 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, // / 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, // 1 0x00, 0x42, 0x61, 0x51, 0x49, 0x46, // 2 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31, // 3 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, // 4 0x00, 0x27, 0x45, 0x45, 0x45, 0x39, // 5 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, // 6 0x00, 0x01, 0x71, 0x09, 0x05, 0x03, // 7 0x00, 0x36, 0x49, 0x49, 0x49, 0x36, // 8 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, // 9 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, // : 0x00, 0x00, 0x56, 0x36, 0x00, 0x00, // ; 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, // < 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, // = 0x00, 0x00, 0x41, 0x22, 0x14, 0x08, // > 0x00, 0x02, 0x01, 0x51, 0x09, 0x06, // ? 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E, // @ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, // A 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, // B 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, // C 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C, // D 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, // E 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, // F 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A, // G 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, // H 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00, // I 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, // J 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, // K 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, // L 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F, // M 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, // N 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, // O 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, // P 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, // Q 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, // R 0x00, 0x46, 0x49, 0x49, 0x49, 0x31, // S 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, // T 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, // U 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, // V 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, // W 0x00, 0x63, 0x14, 0x08, 0x14, 0x63, // X 0x00, 0x07, 0x08, 0x70, 0x08, 0x07, // Y 0x00, 0x61, 0x51, 0x49, 0x45, 0x43, // Z 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00, // [ 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, // Backslash (Checker pattern) 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00, // ] 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, // ^ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, // _ 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, // ` 0x00, 0x20, 0x54, 0x54, 0x54, 0x78, // a 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38, // b 0x00, 0x38, 0x44, 0x44, 0x44, 0x20, // c 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F, // d 0x00, 0x38, 0x54, 0x54, 0x54, 0x18, // e 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02, // f 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, // g 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, // h 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00, // i 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00, // j 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, // k 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, // l 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, // m 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78, // n 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, // o 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18, // p 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC, // q 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08, // r 0x00, 0x48, 0x54, 0x54, 0x54, 0x20, // s 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20, // t 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C, // u 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, // v 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, // w 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, // x 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C, // y 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, // z 0x00, 0x00, 0x10, 0x7C, 0x82, 0x00, // { 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, // | 0x00, 0x00, 0x82, 0x7C, 0x10, 0x00, // } 0x00, 0x00, 0x06, 0x09, 0x09, 0x06 // ~ (Degrees) }; fontdatatype MediumNumbers[] PROGMEM = { 0x0c, 0x10, 0x2d, 0x0d, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, // - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, // . 0x00, 0x00, 0x02, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x81, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x81, 0x00, 0x00, // / 0x00, 0xfc, 0x7a, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7a, 0xfc, 0x00, 0x00, 0x7e, 0xbc, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xbc, 0x7e, 0x00, // 0 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x7e, 0x00, // 1 0x00, 0x00, 0x02, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x7a, 0xfc, 0x00, 0x00, 0x7e, 0xbd, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x81, 0x00, 0x00, // 2 0x00, 0x00, 0x02, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x7a, 0xfc, 0x00, 0x00, 0x00, 0x81, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xbd, 0x7e, 0x00, // 3 0x00, 0xfc, 0x78, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x78, 0xfc, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x3d, 0x7e, 0x00, // 4 0x00, 0xfc, 0x7a, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x81, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xbd, 0x7e, 0x00, // 5 0x00, 0xfc, 0x7a, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x02, 0x00, 0x00, 0x00, 0x7e, 0xbd, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xbd, 0x7e, 0x00, // 6 0x00, 0x00, 0x02, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7a, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x7e, 0x00, // 7 0x00, 0xfc, 0x7a, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x7a, 0xfc, 0x00, 0x00, 0x7e, 0xbd, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xbd, 0x7e, 0x00, // 8 0x00, 0xfc, 0x7a, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x7a, 0xfc, 0x00, 0x00, 0x00, 0x81, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xbd, 0x7e, 0x00, // 9 }; fontdatatype BigNumbers[] PROGMEM = { 0x0e, 0x18, 0x2d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xe0, 0xe0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, // . 0x00, 0x00, 0x02, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, // / 0x00, 0xfc, 0xfa, 0xf6, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0xf6, 0xfa, 0xfc, 0x00, 0x00, 0xef, 0xc7, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc7, 0xef, 0x00, 0x00, 0x7f, 0xbf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xbf, 0x7f, 0x00, // 0 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc7, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x7f, 0x00, // 1 0x00, 0x00, 0x02, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0xf6, 0xfa, 0xfc, 0x00, 0x00, 0xe0, 0xd0, 0xb8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3b, 0x17, 0x0f, 0x00, 0x00, 0x7f, 0xbf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, // 2 0x00, 0x00, 0x02, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0xf6, 0xfa, 0xfc, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xbb, 0xd7, 0xef, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xbf, 0x7f, 0x00, // 3 0x00, 0xfc, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xfc, 0x00, 0x00, 0x0f, 0x17, 0x3b, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xbb, 0xd7, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x7f, 0x00, // 4 0x00, 0xfc, 0xfa, 0xf6, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x17, 0x3b, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xb8, 0xd0, 0xe0, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xbf, 0x7f, 0x00, // 5 0x00, 0xfc, 0xfa, 0xf6, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0xef, 0xd7, 0xbb, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xb8, 0xd0, 0xe0, 0x00, 0x00, 0x7f, 0xbf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xbf, 0x7f, 0x00, // 6 0x00, 0x00, 0x02, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0xf6, 0xfa, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc7, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x7f, 0x00, // 7 0x00, 0xfc, 0xfa, 0xf6, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0xf6, 0xfa, 0xfc, 0x00, 0x00, 0xef, 0xd7, 0xbb, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xbb, 0xd7, 0xef, 0x00, 0x00, 0x7f, 0xbf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xbf, 0x7f, 0x00, // 8 0x00, 0xfc, 0xfa, 0xf6, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0xf6, 0xfa, 0xfc, 0x00, 0x00, 0x0f, 0x17, 0x3b, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xbb, 0xd7, 0xef, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xbf, 0x7f, 0x00, // 9 }; fontdatatype MegaNumbers[] PROGMEM = { 0x18,0x28,0x2D,0x0D, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xF8,0xFC,0xFE,0xFE,0xFC,0xF8,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // . 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,0x1F,0x0F,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x7C,0xFE,0xFF,0xFF,0xFE,0x7C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // : 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xF8,0xF8,0xF0,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFE,0x3F,0x07,0x01,0x03,0x03,0x07,0x0F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFC,0xF0,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x0F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFC,0xF8,0xF0,0xE0,0xE0,0xC0,0x80,0xE0,0xF8,0xFF,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x0F,0x1F,0x1F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x07,0x07,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x0F,0x1F,0x3F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00, // 1 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xF8,0xF0,0xF0,0xE0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x1C,0x3E,0x7F,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x03,0x01,0x83,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF8,0xFC,0xFF,0xFF,0x7F,0x3F,0x1F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xFE,0xDF,0xEF,0xEF,0xE7,0xE3,0xE1,0xE1,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x1E,0x1F,0x0F,0x0F,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x0F,0x0F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00, // 2 0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xF0,0xF8,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x0F,0x07,0x03,0x01,0x81,0xC0,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E,0x0F,0x0F,0x0F,0x1F,0x3F,0xFF,0xFF,0xFF,0xF9,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x18,0x3C,0x7E,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xC1,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0F,0x0F,0x0F,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, // 3 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xF8,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF8,0x3C,0x1F,0x07,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0xFF,0xE7,0xE3,0xE0,0xE0,0xE0,0xE0,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0x83,0xC3,0xC3,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x0F,0x0F,0x0F,0x07,0x03,0x01,0x01,0x00,0x00,0x00, // 4 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x78,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x07,0x01,0x81,0xC1,0xC1,0xE1,0xF1,0xE1,0xE1,0xC1,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x3F,0x1F,0x0E,0x07,0x07,0x07,0x07,0x0F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x60,0xF0,0xFC,0xFC,0xFC,0xF8,0xF0,0xF0,0xE0,0xC0,0xC0,0x80,0x80,0xE0,0xFF,0xFF,0x7F,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x07,0x07,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, // 5 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xF8,0xF8,0xF0,0xF0,0xE0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0xFC,0xFE,0x7F,0x0F,0x01,0x01,0x03,0x83,0x87,0xCF,0xCF,0xDF,0x8F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xB8,0x1C,0x1E,0x0E,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x0F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFC,0xF8,0xF0,0xE0,0xC0,0xC0,0x80,0xE0,0xFF,0xFF,0x3F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 6 0x00,0x00,0x00,0x00,0xC0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x78,0x38,0x00,0x00,0x00,0x00,0x18,0x1E,0x1F,0x07,0x03,0x03,0x01,0x01,0x01,0x81,0xC1,0xF1,0xF9,0xFD,0x3F,0x0F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFC,0xFE,0xFF,0xFF,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x07,0x07,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7 0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFC,0xFF,0xFF,0xE7,0xC1,0xC1,0x81,0x81,0x81,0x81,0x83,0xC3,0xFF,0xFF,0x7F,0x3F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xCF,0xFF,0xFF,0x7F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFE,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF8,0xF0,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0xFB,0x7F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x1F,0x1F,0x0F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 8 0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFE,0xFF,0xFF,0x87,0x01,0x01,0x01,0x03,0x07,0x0F,0x1F,0x7F,0xFF,0xFF,0xFF,0xFE,0xFC,0xE0,0x00,0x00,0x00,0x00,0x03,0x1F,0x7F,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0,0x70,0x38,0x3C,0x1E,0xCF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF9,0xFD,0xFB,0xF1,0xF0,0xE0,0xC0,0xC0,0xE0,0xFC,0xFF,0x7F,0x1F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x0F,0x0F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 9 }; fontdatatype TinyFont[] PROGMEM = { 0x04, 0x06, 0x20, 0x5f, 0x00, 0x00, 0x00, 0x03, 0xa0, 0x00, 0xc0, 0x0c, 0x00, 0xf9, 0x4f, 0x80, 0x6b, 0xeb, 0x00, 0x98, 0x8c, 0x80, 0x52, 0xa5, 0x80, 0x03, 0x00, 0x00, // Space, !"#$%&' 0x01, 0xc8, 0x80, 0x89, 0xc0, 0x00, 0x50, 0x85, 0x00, 0x21, 0xc2, 0x00, 0x08, 0x40, 0x00, 0x20, 0x82, 0x00, 0x00, 0x20, 0x00, 0x18, 0x8c, 0x00, // ()*+,-./ 0xfa, 0x2f, 0x80, 0x4b, 0xe0, 0x80, 0x5a, 0x66, 0x80, 0x8a, 0xa5, 0x00, 0xe0, 0x8f, 0x80, 0xea, 0xab, 0x00, 0x72, 0xa9, 0x00, 0x9a, 0x8c, 0x00, // 01234567 0xfa, 0xaf, 0x80, 0x4a, 0xa7, 0x00, 0x01, 0x40, 0x00, 0x09, 0x40, 0x00, 0x21, 0x48, 0x80, 0x51, 0x45, 0x00, 0x89, 0x42, 0x00, 0x42, 0x66, 0x00, // 89:;<=>? 0x72, 0xa6, 0x80, 0x7a, 0x87, 0x80, 0xfa, 0xa5, 0x00, 0x72, 0x25, 0x00, 0xfa, 0x27, 0x00, 0xfa, 0xa8, 0x80, 0xfa, 0x88, 0x00, 0x72, 0x2b, 0x00, // @ABCDEFG 0xf8, 0x8f, 0x80, 0x8b, 0xe8, 0x80, 0x8b, 0xe8, 0x00, 0xf8, 0x8d, 0x80, 0xf8, 0x20, 0x80, 0xf9, 0x0f, 0x80, 0xf9, 0xcf, 0x80, 0x72, 0x27, 0x00, // HIJKLMNO 0xfa, 0x84, 0x00, 0x72, 0x27, 0x40, 0xfa, 0x85, 0x80, 0x4a, 0xa9, 0x00, 0x83, 0xe8, 0x00, 0xf0, 0x2f, 0x00, 0xe0, 0x6e, 0x00, 0xf0, 0xef, 0x00, // PQRSTUVW 0xd8, 0x8d, 0x80, 0xc0, 0xec, 0x00, 0x9a, 0xac, 0x80, 0x03, 0xe8, 0x80, 0xc0, 0x81, 0x80, 0x8b, 0xe0, 0x00, 0x42, 0x04, 0x00, 0x08, 0x20, 0x80, // XYZ[\]^_ 0x02, 0x04, 0x00, 0x31, 0x23, 0x80, 0xf9, 0x23, 0x00, 0x31, 0x24, 0x80, 0x31, 0x2f, 0x80, 0x31, 0x62, 0x80, 0x23, 0xea, 0x00, 0x25, 0x53, 0x80, // `abcdefg 0xf9, 0x03, 0x80, 0x02, 0xe0, 0x00, 0x06, 0xe0, 0x00, 0xf8, 0x42, 0x80, 0x03, 0xe0, 0x00, 0x79, 0x87, 0x80, 0x39, 0x03, 0x80, 0x31, 0x23, 0x00, // hijklmno 0x7d, 0x23, 0x00, 0x31, 0x27, 0xc0, 0x78, 0x84, 0x00, 0x29, 0x40, 0x00, 0x43, 0xe4, 0x00, 0x70, 0x27, 0x00, 0x60, 0x66, 0x00, 0x70, 0x67, 0x00, // pqrstuvw 0x48, 0xc4, 0x80, 0x74, 0x57, 0x80, 0x59, 0xe6, 0x80, 0x23, 0xe8, 0x80, 0x03, 0x60, 0x00, 0x8b, 0xe2, 0x00, 0x61, 0x0c, 0x00 // zyx{|}~ }; fontdatatype RusFont[] PROGMEM = { 0x06, 0x08, 0x20, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // sp 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, // ! 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, // " 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14, // # 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12, // $ 0x00, 0x23, 0x13, 0x08, 0x64, 0x62, // % 0x00, 0x36, 0x49, 0x55, 0x22, 0x50, // & 0x00, 0x00, 0x05, 0x03, 0x00, 0x00, // ' 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00, // ( 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00, // ) 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, // * 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, // + 0x00, 0x3E, 0x49, 0x45, 0x45, 0x38, // , 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, // - 0x00, 0x7C, 0x10, 0x38, 0x44, 0x38, // . 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, // / 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, // 1 0x00, 0x42, 0x61, 0x51, 0x49, 0x46, // 2 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31, // 3 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, // 4 0x00, 0x27, 0x45, 0x45, 0x45, 0x39, // 5 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, // 6 0x00, 0x01, 0x71, 0x09, 0x05, 0x03, // 7 0x00, 0x36, 0x49, 0x49, 0x49, 0x36, // 8 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, // 9 0x00, 0x73, 0x0C, 0x7F, 0x0C, 0x73, // : 0x00, 0x4C, 0x30, 0x7C, 0x30, 0x4C, // ; 0x00, 0x7F, 0x49, 0x49, 0x49, 0x31, // < 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, // = 0x00, 0x7F, 0x10, 0x3E, 0x41, 0x3E, // > 0x00, 0x02, 0x01, 0x51, 0x09, 0x06, // ? 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E, // @ 0x00, 0x1C, 0x22, 0x7F, 0x22, 0x1C, // A 0x00, 0x7F, 0x10, 0x08, 0x04, 0x7F, // B 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, // C 0x00, 0x7F, 0x45, 0x45, 0x45, 0x3A, // D 0x00, 0x61, 0x26, 0x18, 0x06, 0x01, // E 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, // F 0x00, 0x7F, 0x01, 0x01, 0x01, 0x7F, // G 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, // H 0x00, 0x7F, 0x40, 0x7F, 0x40, 0x7F, // I 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, // J 0x00, 0x40, 0x3F, 0x01, 0x01, 0x7F, // K 0x00, 0x60, 0x3F, 0x21, 0x3F, 0x60, // L 0x00, 0x7F, 0x48, 0x48, 0x30, 0x00, // M 0x00, 0x03, 0x01, 0x7F, 0x01, 0x03, // N 0x00, 0x3F, 0x20, 0x3F, 0x20, 0x7F, // O 0x00, 0x21, 0x41, 0x49, 0x4D, 0x33, // P 0x00, 0x7E, 0x20, 0x11, 0x08, 0x7E, // Q 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, // R 0x00, 0x7F, 0x48, 0x78, 0x00, 0x7F, // S 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, // T 0x00, 0x7F, 0x01, 0x01, 0x01, 0x03, // U 0x00, 0x7F, 0x06, 0x08, 0x06, 0x7F, // V 0x00, 0x3F, 0x20, 0x20, 0x3F, 0x60, // W 0x00, 0x07, 0x08, 0x08, 0x08, 0x7F, // X 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, // Y 0x00, 0x66, 0x19, 0x09, 0x09, 0x7F, // Z 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, // [ 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, // Backslash (Checker pattern) 0x00, 0x04, 0x7C, 0x50, 0x70, 0x00, // ] 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, // ^ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, // _ 0x00, 0x42, 0x42, 0x52, 0x52, 0x3C, // ` 0x00, 0x18, 0x24, 0x7E, 0x24, 0x18, // a 0x00, 0x7C, 0x20, 0x10, 0x7C, 0x00, // b 0x00, 0x38, 0x44, 0x44, 0x44, 0x28, // c 0x00, 0x7E, 0x4A, 0x4A, 0x34, 0x00, // d 0x00, 0x4C, 0x90, 0x90, 0x90, 0x7C, // e 0x00, 0x20, 0x54, 0x54, 0x78, 0x40, // f 0x00, 0x7C, 0x04, 0x04, 0x7C, 0x00, // g 0x00, 0xFC, 0x18, 0x24, 0x24, 0x18, // h 0x00, 0x7C, 0x40, 0x7C, 0x40, 0x7C, // i 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, // j 0x00, 0x40, 0x3C, 0x04, 0x04, 0x7C, // k 0x00, 0x38, 0x45, 0x45, 0x49, 0x3E, // l 0x00, 0x7C, 0x50, 0x70, 0x00, 0x00, // m ~ 0x00, 0x04, 0x04, 0x7C, 0x04, 0x04, // n 0x00, 0x3C, 0x20, 0x3C, 0x20, 0x7C, // o 0x00, 0x24, 0x42, 0x4A, 0x34, 0x00, // p 0x00, 0x7C, 0x21, 0x11, 0x7C, 0x00, // q 0x00, 0x7C, 0x10, 0x28, 0x44, 0x00, // r 0x00, 0x7C, 0x50, 0x70, 0x00, 0x7C, // s 0x00, 0x38, 0x54, 0x54, 0x54, 0x18, // t 0x00, 0x7C, 0x04, 0x04, 0x0C, 0x00, // u 0x00, 0x7C, 0x08, 0x10, 0x08, 0x7C, // v 0x00, 0x3C, 0x20, 0x20, 0x3C, 0x60, // w 0x00, 0x1C, 0x10, 0x10, 0x7C, 0x00, // x 0x00, 0x7C, 0x10, 0x10, 0x7C, 0x00, // y 0x00, 0x40, 0x2C, 0x12, 0x7E, 0x00, // z 0x00, 0x63, 0x14, 0x08, 0x14, 0x63, // { 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, // | 0x00, 0x01, 0x7F, 0x48, 0x48, 0x30, // } 0x00, 0x41, 0x49, 0x49, 0x2A, 0x1C, // ~ (Degrees) }; fontdatatype BigZif_0_9[]PROGMEM = {64,64,48,10, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//0 0X80,0X80,0XC0,0XC0,0XC0,0XE0,0XE0,0XE0,0XE0,0XF0,0XF0,0XF0,0XF0,0X70,0X70,0X70, 0X70,0X70,0X70,0X70,0X70,0X70,0XF0,0XF0,0XF0,0XF0,0XF0,0XE0,0XE0,0XE0,0XC0,0XC0, 0XC0,0XC0,0X80,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0XE0,0X30,0X3C,0X6E,0X62,0X0D, 0X2C,0XC6,0X46,0X26,0XC8,0X19,0X09,0X3D,0XFF,0X3F,0X07,0X03,0X01,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X07,0X3F,0XFF,0XFD,0X09,0X19,0X20,0X24, 0X36,0XC6,0XE6,0X0C,0X41,0X66,0X3C,0X38,0XE0,0XC0,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0XE0,0XF8,0X0C,0XC7,0X1F,0XCF,0XE7,0X03,0X01,0XF9,0X01, 0X87,0XE7,0X5E,0X1F,0X87,0X07,0XFF,0X7F,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0X9F,0X07,0X4F,0X1F, 0XE6,0XA7,0X01,0XF9,0XE1,0X03,0XA7,0XE7,0X1F,0X47,0X0F,0XBC,0XF0,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0XF0,0XFF,0X7F,0X3E,0X9E,0XDC,0X10,0X69,0X99,0X63,0XCF,0X33, 0XC9,0X21,0X94,0X9C,0XBF,0XFF,0X1F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XBF,0XDE,0X9C, 0X30,0XC1,0X31,0XCF,0XCF,0X31,0XC9,0X30,0X9C,0X9E,0X3E,0X7F,0XFF,0XE0,0X00,0X00, 0X00,0X00,0X00,0X00,0X3F,0XFF,0XFE,0XF3,0X7F,0X3F,0X0F,0X00,0X9F,0X78,0X0F,0X70, 0X9F,0X00,0X0F,0X3F,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XF7,0X7F,0X1F, 0X0E,0X20,0XE0,0X3F,0X1F,0XC0,0XB0,0X06,0X1F,0X3F,0XF7,0XFE,0XFF,0X04,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X03,0X0F,0X3F,0XF8,0XF8,0XFE,0XCF,0XD1,0XD3,0XCC,0XD9, 0XD1,0X4F,0X7E,0XF8,0XD0,0X9F,0X3F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X7F,0X9F,0XD9,0XF0,0XF8, 0X6F,0X43,0XD1,0XCC,0XCC,0XD1,0XC1,0XE7,0XFC,0XF8,0X39,0X0F,0X01,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X07,0X0F,0X1F,0X3F,0X37, 0X6C,0X44,0X91,0XB9,0XBD,0XBD,0XBC,0X3F,0X0E,0XF8,0XF0,0XE0,0XC0,0X80,0X80,0X80, 0X80,0X80,0X80,0X80,0X80,0X80,0XC0,0XC0,0XE0,0X0C,0X3F,0XBE,0XBC,0XBD,0XB9,0X91, 0XC0,0X6C,0X67,0X3F,0X1F,0X0F,0X07,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X01,0X01,0X01,0X01,0X03,0X03,0X03,0X03,0X03,0X03,0X07,0X07, 0X07,0X07,0X07,0X07,0X03,0X03,0X03,0X03,0X03,0X03,0X03,0X01,0X01,0X01,0X01,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//1 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80, 0X80,0X80,0X00,0X40,0X80,0XC0,0X20,0X60,0X60,0X60,0XF0,0XF0,0X20,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XC0,0XC0,0XC0,0XE0,0XE0,0XE0, 0XE0,0XF0,0XF0,0XF0,0XF8,0XF8,0XF8,0X7C,0XFC,0XFE,0X82,0X06,0X1E,0X3E,0X3F,0X3D, 0X3C,0X3E,0X32,0X33,0X2D,0X2F,0X6F,0XE7,0XE6,0XF0,0XF8,0XFF,0X02,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X01,0X01,0X01,0X01,0X01, 0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XBE,0X06,0X06,0XF2,0XFA, 0XBA,0XBB,0X3B,0X7B,0XF2,0XF0,0X60,0X00,0X01,0X03,0XFF,0XFF,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFC,0XF8,0XF1,0XF3, 0XF3,0XF3,0X70,0X3C,0X1F,0X07,0X81,0XC0,0XF0,0X70,0X0F,0XFF,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X3F,0X0F,0XC3,0XE3,0X70, 0X48,0X6C,0X64,0XE6,0XE7,0XE3,0XE3,0XE3,0XF1,0XF0,0XF8,0XFF,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XF0,0XC0,0X8F,0XB0,0XC6, 0X9F,0X1C,0X3C,0X1F,0X3F,0X7B,0XE3,0X03,0X07,0XCF,0X9F,0X7F,0X40,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X80,0X80,0X80,0X80, 0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0XC0,0XFF,0XFB,0X83,0X03,0X1B,0X93, 0X7B,0XF9,0XF3,0XF3,0X66,0X0E,0X8C,0XF8,0XF0,0XE0,0X03,0X3F,0XFC,0X80,0X80,0X80, 0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0X07,0X07,0X07,0X07, 0X07,0X07,0X07,0X07,0X07,0X07,0X07,0X07,0X07,0X07,0X07,0X07,0X07,0X07,0X06,0X06, 0X06,0X06,0X06,0X07,0X07,0X07,0X07,0X07,0X07,0X07,0X06,0X06,0X07,0X07,0X07,0X07, 0X07,0X07,0X07,0X07,0X07,0X07,0X07,0X07,0X07,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//2 0X80,0X80,0X80,0X40,0X40,0X40,0XC0,0XC0,0XE0,0XE0,0XE0,0XE0,0XE0,0XE0,0XE0,0X60, 0X60,0X60,0X60,0X30,0X60,0X30,0X60,0XE0,0XE0,0XE0,0XE0,0X20,0X60,0XC0,0X80,0X80, 0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XE0,0XF0,0XFC,0XE4,0X42,0X2D,0X3D, 0X1B,0X19,0X19,0X09,0X0F,0X0E,0X0E,0X0D,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F, 0X18,0X18,0X11,0X23,0X77,0XFE,0XFE,0X38,0X3C,0X5F,0X1F,0X38,0X70,0X71,0XF3,0X3F, 0X83,0X0F,0XFF,0X7C,0XFA,0X3C,0X38,0X88,0XE0,0XC0,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X03,0X03,0X03,0X01,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X0F,0XF8,0XF3,0XE7,0XE7,0XFE,0XFE,0XCC,0X91, 0X86,0X4C,0X6D,0X8C,0X1D,0X62,0X64,0X48,0X7F,0XFF,0X0C,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X80,0XC0,0XF0,0XFE,0X7F,0X3F,0X9F,0X5F,0XEF,0XEF,0XE7,0XE3, 0X01,0X84,0XF0,0XF3,0X7B,0X39,0X18,0X0E,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0X60,0XB0, 0XB0,0XB8,0XAC,0XAE,0X8F,0X9F,0X9F,0XB1,0XF6,0X73,0X70,0X18,0X1E,0X1F,0X09,0X04, 0X02,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X80,0XC0,0X40,0X80,0XA0,0XB0,0X18,0X8C,0XEC,0X66,0X76,0X67,0X3F,0X3F,0X1F,0X1F, 0X0F,0X07,0X07,0X03,0X03,0X01,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X80,0XC0,0XE0,0XF0,0XF8,0XF8,0X78,0X10,0X00, 0X00,0X00,0X00,0X00,0X80,0XC0,0XC0,0XE0,0XF0,0X10,0X18,0X6C,0XEC,0XCC,0XDE,0X1F, 0X87,0X8F,0X3C,0X38,0X7D,0X7C,0XC5,0XC6,0X06,0X36,0X72,0X72,0XE6,0XAC,0X8C,0XEC, 0XFC,0XEC,0XC6,0XF6,0X32,0X06,0X86,0X96,0XDC,0XCC,0XEC,0XB6,0XF6,0XF6,0X76,0XB6, 0XB6,0X86,0XCE,0XFF,0XF1,0XFD,0XED,0XE1,0X71,0X19,0X07,0X03,0X00,0X00,0X00,0X00, 0X00,0X06,0X07,0X07,0X07,0X07,0X07,0X07,0X03,0X07,0X06,0X06,0X06,0X07,0X07,0X06, 0X07,0X07,0X07,0X07,0X07,0X06,0X06,0X06,0X06,0X06,0X06,0X07,0X07,0X05,0X05,0X05, 0X04,0X06,0X06,0X06,0X06,0X07,0X07,0X07,0X07,0X07,0X07,0X07,0X07,0X03,0X03,0X07, 0X03,0X07,0X0F,0X0F,0X0F,0X07,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//3 0X00,0X00,0X00,0X80,0X80,0X80,0X80,0XC0,0XC0,0XE0,0X60,0X20,0XA0,0XA0,0XA0,0X20, 0X60,0XE0,0XA0,0X60,0XE0,0XE0,0XC0,0XC0,0XC0,0XC0,0XC0,0XC0,0XC0,0XC0,0XC0,0X80, 0X80,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XF0,0X28,0X1C,0XD4,0XF6, 0X66,0X3B,0X3B,0X1D,0X1F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0C,0X0C,0X0C,0X0D,0X0F,0X0F, 0X0C,0X0E,0X1F,0X1C,0X38,0X78,0XF0,0X70,0X18,0X88,0XE8,0XE8,0X68,0X68,0XE8,0XE8, 0XD1,0X01,0X03,0X06,0X1E,0XFC,0XF0,0XE0,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0X0F,0X0C,0X0D,0X0D,0X03,0X01,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0XC3,0XFE,0XF8,0XF1,0X73,0X33,0X33,0X38,0X1F,0X8F, 0XC7,0XC0,0XE0,0XF0,0X7C,0X7F,0X3F,0X0F,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0XC0,0XE0,0XC0,0XC0,0XE0,0XE0,0X20,0X30,0XB0,0X30,0X30,0X30, 0X38,0X98,0XFC,0X1C,0X86,0XE3,0XF1,0X79,0X18,0X8C,0X8C,0X8E,0XCE,0XC7,0XC7,0XC3, 0X83,0X81,0X81,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X01,0X01,0X01,0X01,0X02,0X02,0X03,0X03,0X07, 0X07,0X07,0X0F,0X0C,0X18,0X33,0X7F,0XCE,0XEC,0XE5,0X33,0X03,0X80,0XE8,0X79,0X39, 0X29,0X0E,0XE4,0XF1,0XE7,0XCE,0X9C,0X38,0XF8,0XF0,0XE0,0X80,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X8F,0XFF,0X63,0X77,0X70,0X71,0X8A, 0X28,0X67,0X07,0XF3,0XFC,0XFF,0X8F,0XC0,0X80,0X97,0XCF,0XFF,0X3F,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X20,0XF8,0XFC,0XEC,0X8C,0X26,0X26,0X74,0XE4,0XE4,0X6C,0X18, 0XD8,0XF0,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X80,0X80,0XC0,0X40,0XC0,0XE0,0XF0,0XFC,0X7B,0X31,0X3A,0X26,0X86,0XC6,0XE4, 0XC7,0XC7,0X6F,0X67,0X33,0X31,0X18,0X09,0X07,0X07,0X01,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X03,0X03,0X06,0X06,0X06,0X07,0X0F,0X0F, 0X0D,0X08,0X08,0X0E,0X0B,0X0B,0X0B,0X0E,0X0E,0X09,0X0D,0X0D,0X09,0X0C,0X0F,0X0F, 0X0F,0X08,0X0E,0X0F,0X04,0X04,0X07,0X07,0X07,0X03,0X03,0X03,0X03,0X01,0X01,0X01, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//4 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X80,0XC0,0XC0, 0XC0,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X80,0XC0,0XE0,0X30,0XC8,0XE8,0XEC,0X24,0X6F,0XEF,0XE0,0XC0,0X00, 0X03,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0X60,0XB0,0XD8,0X0C,0X2C, 0XAE,0XA6,0XE7,0XCF,0X4F,0X2F,0X24,0X14,0X99,0XC9,0XCC,0X4C,0X47,0X63,0X70,0XF0, 0XF8,0XFF,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0, 0XC0,0X60,0XD0,0X38,0X10,0X96,0XFA,0XBB,0XCB,0X61,0X34,0X17,0X1F,0X0E,0X06,0X03, 0X03,0X1B,0XC3,0X98,0X3C,0XFE,0XFF,0XFF,0X7F,0X38,0X70,0X22,0XE6,0XEF,0XEE,0XFE, 0XF5,0XFD,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X80,0XC0,0X40,0XE0,0XE0,0X70,0X78,0X34,0X36,0X3B,0XFB,0X78,0X39, 0X3B,0X1A,0X0A,0X0E,0X07,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X0C,0XFF,0XC1,0X91,0X07,0X39,0X6C,0X00,0XF0,0XFE,0X40,0X64,0X39,0X07,0X89, 0XF1,0XE7,0X1E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X80,0XFF,0XDF,0XC0,0XE0,0XF8,0XFE,0XFE,0XFB,0XFF,0XFF,0XFF,0XDE,0XF9, 0XF6,0XE6,0XC3,0XD3,0X93,0X87,0XB1,0XF9,0XDE,0XCE,0XC6,0XE6,0XBB,0XDB,0XDB,0XE3, 0X76,0XFE,0XCF,0XE7,0XF7,0XF7,0XC5,0X18,0X06,0XF9,0XF3,0X04,0X3A,0X84,0XF7,0XF7, 0XEF,0X8F,0X7E,0XFE,0XEE,0XC3,0XD3,0XD3,0X99,0XDB,0XCF,0XFF,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0XC0,0XFF,0XFE,0X1F,0X07,0XC1,0X68,0X79,0X0F,0X01,0XD8,0X6C,0XC0,0X83,0X0F, 0X7F,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X0C,0X0F,0X0F,0X0E,0X0E,0X0D,0X0A,0X0C,0X0B,0X0B,0X0C,0X0C,0X09,0X0F,0X0E, 0X0E,0X0F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//5 0X00,0X80,0XC0,0XC0,0X40,0X40,0X40,0X40,0X40,0X40,0X40,0X40,0X40,0X40,0XC0,0XC0, 0XC0,0XC0,0XC0,0XC0,0XC0,0XC0,0XC0,0XC0,0XC0,0X40,0X40,0X40,0X40,0X40,0X40,0XC0, 0XC0,0XC0,0XC0,0XC0,0X60,0X20,0X90,0XC8,0X6C,0XF4,0X7C,0X1C,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0XF0,0X5F,0X7F,0XDC,0X06,0XF2,0XFB,0X63,0XEB,0XCF,0XDF,0XCE,0XCE,0XDE,0XDC,0X98, 0XF8,0XF1,0XE3,0XE3,0XC7,0XCF,0XCF,0XC8,0XD8,0X9A,0X96,0X92,0X9A,0X9E,0X9E,0XCC, 0XC9,0XCF,0XC7,0XE0,0XE0,0XF0,0X7B,0X1E,0X07,0X01,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0XF8, 0X0F,0X7E,0XFC,0XFE,0X7F,0X0F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XE0,0XFF,0XFF, 0XE0,0XC0,0X83,0X8F,0X0F,0X1F,0X3F,0X3F,0X33,0X21,0X39,0X39,0X5B,0X26,0X1E,0X06, 0X66,0X66,0X72,0X72,0X72,0XF2,0XF4,0XFC,0X38,0X18,0X98,0X98,0XD8,0X90,0XB0,0X20, 0X60,0XC0,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X03, 0X03,0X03,0X03,0X03,0X03,0X03,0X03,0X02,0X02,0X02,0X02,0X07,0X07,0X07,0X07,0X0F, 0X09,0X0D,0X17,0X13,0X32,0X78,0X7B,0XC3,0X8E,0X8C,0X8C,0XD9,0X4B,0X4B,0X4F,0X4C, 0X4E,0X0F,0X8F,0X0F,0X1E,0X7C,0XF8,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0XFF,0XFF,0XE0,0XC4,0XCF,0XCB,0X4B, 0X63,0X7F,0X3E,0X0E,0X80,0XC0,0X79,0X3F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X80,0XE0,0XE0,0XE0,0XE0,0XE0,0XE0,0XC0,0X20,0X40,0XC0,0XC0, 0X80,0X80,0X80,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X80,0X00,0X80,0X80, 0X80,0XC0,0XC0,0X60,0X60,0X60,0XF8,0XCC,0X86,0XA7,0XF1,0XF1,0X79,0X78,0X3C,0X3C, 0X1C,0X0E,0X0E,0X07,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X03,0X07,0X07,0X07,0X0F,0X0F,0X0F,0X0E,0X0C, 0X08,0X0F,0X0D,0X0C,0X0D,0X0D,0X0D,0X0D,0X0E,0X0F,0X0A,0X09,0X0D,0X0F,0X0D,0X05, 0X05,0X06,0X06,0X07,0X03,0X02,0X03,0X01,0X01,0X01,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//6 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X80,0X80,0X80,0XC0,0XC0,0XC0,0X60,0X60,0X60,0X60,0XE0,0XD0,0X90,0XF0,0X68,0X70, 0X70,0X70,0X30,0X38,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80, 0X80,0X80,0XC0,0XE0,0XE0,0X70,0X30,0X98,0XCC,0XCC,0XC6,0X62,0X6B,0XEF,0XEF,0XE7, 0X7F,0X3F,0X3B,0X1B,0X09,0X0C,0X06,0X03,0X02,0X01,0X01,0X01,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XF0,0XF8,0XFC,0X1E,0X07,0X01, 0X26,0X37,0X17,0X33,0X20,0X66,0XF3,0XF9,0X79,0X3C,0X0E,0X06,0X03,0X01,0X01,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0XB0,0X98,0X9E,0X9F,0X3F,0X7F,0XFF,0XFF,0XC3,0X00,0XF8,0XFE, 0XFF,0XFF,0XFB,0XF9,0X73,0X06,0XF3,0X71,0X78,0X38,0X3C,0X3C,0X3C,0X3C,0X3E,0X2E, 0X2E,0X2E,0X6E,0X6E,0XE6,0XE6,0XF3,0XE3,0XF3,0XE7,0XCA,0XC2,0XE6,0X76,0X3E,0X9C, 0XDC,0XD8,0X98,0X30,0XF0,0XF0,0X20,0XC0,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0XC0,0XFF,0XFC,0XF9,0XF9,0X1F,0X0F,0X48,0X4F,0X8F,0X87,0X2F,0X4F,0XC3, 0XE1,0XFF,0XFC,0XFE,0XFE,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X07,0X1F,0XFF,0X1F,0XCF,0XE7,0XF6,0X30,0X33, 0XF2,0XF7,0X64,0XE4,0XC7,0X0F,0X3F,0X1C,0X01,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X0F,0X7F,0XFF,0XFF,0XF8,0XE0,0XC3,0XCF,0X99,0X91,0X17,0X30,0X30, 0X7F,0X7F,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC7,0XFC,0XFC,0XF9,0XFD,0X7C,0X9E, 0XCF,0XC7,0XC0,0XC6,0X93,0X38,0X78,0XFC,0XFF,0X7F,0X1F,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X07,0X0F,0X1F,0X3F,0X31,0X61,0X49,0XDD,0XB9, 0XFA,0XC2,0XE4,0XFC,0XF1,0X87,0XFC,0X38,0X60,0X60,0X40,0XC0,0X80,0X80,0X80,0X80, 0X80,0X80,0X80,0XC0,0X40,0X60,0XE0,0XB0,0XFC,0X3F,0X8F,0XEF,0XF7,0XF7,0XFF,0X7F, 0X7F,0X3F,0X39,0X1B,0X19,0X0D,0X06,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X01,0X01,0X01,0X03,0X03,0X03,0X03,0X03,0X03,0X03,0X06,0X07,0X04,0X04,0X07,0X07, 0X07,0X03,0X03,0X03,0X03,0X02,0X02,0X03,0X02,0X01,0X01,0X01,0X01,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XF0,0XFC,0X5C,0X7C,//7 0XBC,0XB0,0XB0,0X10,0X50,0X50,0X40,0XD0,0XD0,0X90,0X90,0X90,0X30,0X30,0X30,0XB0, 0X60,0X60,0X60,0XE0,0XE0,0XE0,0XE0,0XE0,0XB0,0X10,0X50,0XD0,0X60,0X60,0X30,0XD0, 0XD0,0XD0,0X30,0X30,0X30,0XE0,0XE0,0X60,0XE0,0XE0,0XE0,0XE0,0XF0,0X30,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XE0,0XF8,0XFE,0XFF,0XFF,0X7F,0X7F,0X7F,0X3F, 0X3E,0X38,0X30,0X32,0X26,0X3F,0X3E,0X34,0X31,0X39,0X3F,0X3B,0X33,0X33,0X33,0X30, 0X31,0X3B,0X32,0X36,0X3A,0X28,0X29,0X3D,0X35,0X39,0X39,0X39,0X39,0X30,0X34,0X36, 0X36,0X96,0X96,0X76,0X37,0X93,0XD3,0XFB,0X78,0X3C,0X0F,0X07,0X03,0X01,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X03,0X07,0X07,0X03,0X03,0X01,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XE0,0XF0,0X78,0X1C,0X8E, 0XE3,0X79,0X3C,0X1E,0X0F,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X80,0XC0,0XE0,0X30,0X0C,0XE6,0XDA,0XE9,0X71,0X1F,0XC7,0X60,0X38,0X0E,0X03, 0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XE0,0XD8,0XCC,0XE6,0XE6, 0XE3,0XE1,0XE1,0XE1,0XE3,0XE3,0XF3,0XF1,0X38,0X0E,0X03,0X01,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X80,0XE0,0XF0,0X38,0X0C,0X32,0X39,0X78,0X71,0XBB,0X07,0X07,0XCF,0X4F, 0XA7,0XF0,0X18,0XE7,0X3F,0X0F,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF8, 0XFE,0XFF,0XE1,0XC1,0X8D,0X9D,0XF9,0XFB,0XA3,0X17,0X1F,0X9F,0XC6,0XE0,0XF0,0X7F, 0X30,0X1D,0X07,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X01,0X03,0X03,0X03,0X03,0X07,0X07,0X07,0X03,0X03,0X03,0X03,0X01,0X01,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X80,0XC0,//8 0XC0,0X40,0X20,0XA0,0XC0,0X30,0X30,0X10,0XD0,0XF0,0XB0,0X98,0XD8,0XD8,0X58,0X58, 0X58,0X58,0X58,0X58,0XF0,0XF0,0XF0,0XF0,0XD0,0X30,0X70,0XF0,0XC0,0X90,0XA0,0X20, 0X60,0X40,0XC0,0X80,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X80,0XE0,0XF0,0XF8,0XFC,0X76,0X63,0X61,0X39,0X3B,0X33, 0X1F,0X02,0X04,0XDD,0XFD,0X3D,0X0D,0X06,0X03,0X01,0X01,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X01,0X03,0X06,0X1E,0XFE,0XF1,0XB5,0X97, 0X9C,0XC0,0X60,0X00,0XF1,0X03,0X26,0XEC,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X0C,0X7F,0XFF,0XC3,0X00,0X00,0X00,0X18,0XE4,0XF0,0XFA,0XFA, 0X1B,0X5B,0X73,0X73,0X0F,0X1C,0X30,0XE0,0XC0,0X80,0X80,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XF0,0XDE,0XCF,0XEF,0X77, 0X33,0XB9,0XDC,0XCF,0X63,0X30,0X1C,0X0F,0X07,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X01,0X03,0X06,0X0E,0X0C,0X18,0X19,0X31,0X33, 0X73,0X66,0X66,0XE6,0XE6,0XE6,0XE7,0XE7,0XE7,0X27,0XA7,0XC7,0XC7,0XA7,0XA6,0X26, 0X46,0XCC,0XCC,0X98,0X3C,0X3C,0XFE,0XFE,0XFF,0XEF,0XE7,0XE7,0XC7,0XC7,0X43,0XC3, 0X81,0X81,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X80,0XC0,0XC0,0X60,0X70,0X30,0X98, 0XD8,0XCC,0XEC,0XE4,0X72,0X3F,0X1F,0X0F,0X0F,0X06,0X04,0X05,0X0D,0X09,0X09,0X1A, 0X1A,0X3B,0X33,0X77,0X4F,0X68,0XE8,0X6F,0X4F,0X5F,0X30,0XF0,0XE2,0X66,0X2F,0X3C, 0X34,0XF1,0XFB,0XFF,0XFE,0XFC,0XF8,0X18,0X70,0XC0,0X80,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0XF0,0XFC,0X0F,0X03,0XF1,0XF8,0X8C,0XAE,0XEF,0X6F,0X0F, 0XFF,0XFF,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X01,0X03,0X0F,0XFB,0X60,0X0C,0X0E,0X5E, 0XFE,0XEF,0XC1,0X19,0XCB,0X99,0X3D,0X0F,0XC0,0XFF,0X7F,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X03,0X0F,0X1E,0X3C,0X3C,0X78,0X59,0XC9,0XE9,0XA9,0XB0, 0XB6,0XC5,0X7E,0X38,0X30,0X20,0X60,0X60,0XC0,0X80,0X40,0XC0,0X80,0X80,0X80,0X80, 0X80,0X80,0X80,0XC0,0X80,0XC0,0XC0,0XE0,0XE0,0X18,0X1E,0XE3,0X86,0XE3,0XF0,0XEE, 0X47,0X69,0X74,0X30,0X1C,0X1F,0X0C,0X07,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X01, 0X01,0X01,0X03,0X03,0X03,0X03,0X02,0X03,0X02,0X02,0X06,0X05,0X05,0X04,0X07,0X07, 0X07,0X07,0X02,0X03,0X03,0X03,0X03,0X03,0X03,0X03,0X01,0X01,0X01,0X01,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X80,0XC0,0XC0,//9 0XE0,0X20,0X30,0X90,0XD0,0XD0,0XD0,0XC0,0XC8,0X70,0X70,0X70,0X70,0X70,0X70,0X70, 0X70,0X30,0X70,0X70,0XF0,0XF0,0XF0,0XF0,0XF0,0XE0,0XE0,0XE0,0XE0,0XC0,0X40,0X40, 0X80,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0XC0,0X60,0X30,0XB8,0XBC,0X3E,0X7E,0XF3,0XF3,0XE9,0XFC,0XFE, 0XFE,0XC0,0XFE,0X3E,0X0F,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X01,0X03,0X07,0X7F,0XFF,0X1F,0X3F,0X70,0X70,0X62,0X66,0X6F, 0X7E,0X34,0X31,0X7A,0X7E,0XF8,0XF0,0XE0,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0XFF,0X05,0X7E,0X71,0XE1,0XC1,0XDF,0XCE,0XE0,0XFF,0XFF,0XFB,0X3F, 0X1F,0XFF,0X7F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFE,0XFC,0X3C,0X0C,0XE4,0XF6,0XB2, 0X38,0XF4,0XF4,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X07,0X1F,0X38,0X60,0XC7,0X9C,0X7E,0X6E,0X61,0X7F,0X7F,0X3F,0XB7, 0XA0,0X08,0X3E,0XBF,0X8E,0XF8,0XF0,0XE0,0X40,0X40,0XC0,0X80,0X80,0X80,0X80,0X80, 0X80,0X80,0X80,0X80,0X80,0X80,0XC0,0XE0,0XFF,0XFF,0XFF,0XDE,0X38,0X61,0X39,0X19, 0X8C,0X87,0X23,0X60,0X78,0XFE,0XFF,0XFF,0XFF,0X7F,0X07,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X01,0X03,0X02,0X06,0X07,0X07,0X0F, 0X0F,0X0E,0X0F,0X0F,0X0F,0X0D,0X0D,0X0D,0X0D,0X0E,0X0C,0X0C,0X0D,0X0C,0X0D,0X0D, 0X0D,0X0D,0X05,0X05,0X87,0XE3,0XFB,0X8F,0X83,0X21,0XF9,0XF8,0XF0,0X76,0X66,0X26, 0X33,0X9E,0X9E,0XC0,0XE0,0X39,0X1F,0X07,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XC0, 0XB0,0XB0,0X7C,0XE6,0X33,0X3B,0X79,0XE9,0X25,0XF5,0XFC,0XFE,0X7E,0X7E,0X3F,0X1F, 0X0F,0X07,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80, 0X80,0X80,0XC0,0XC0,0XE0,0XE0,0XF0,0XF0,0XF8,0XD8,0XFC,0XFE,0XF7,0X7F,0X7C,0X38, 0X38,0X39,0X1B,0X19,0X0A,0X0F,0X05,0X06,0X02,0X03,0X01,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X07,0X07,0X07,0X03, 0X03,0X03,0X03,0X03,0X03,0X01,0X01,0X01,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00 }; fontdatatype SmallZif_0_9[]PROGMEM = {48,48,48,10, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X80,0XC0,0XA0,0XA0,0XB0,0X30,//0 0X70,0X30,0XF0,0XF8,0XF8,0X78,0X18,0X18,0X18,0X18,0X18,0X18,0X38,0X78,0XF8,0XF8, 0X70,0X70,0X30,0X30,0XB0,0XA0,0XA0,0X40,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X80,0X40,0X30,0X7C,0X36,0X17,0X94,0X11,0X31,0XFC,0XF0,0X39, 0XF1,0XF3,0X1F,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F, 0XFF,0XF1,0X72,0XF0,0X26,0X3C,0XD1,0X14,0X37,0X33,0XFC,0X70,0XE0,0X80,0X00,0X00, 0X00,0X00,0X00,0XE0,0X7F,0X38,0XBA,0X32,0X57,0XB4,0XCE,0X6C,0X96,0X23,0XB0,0XFC, 0XFE,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0XFF,0XFE,0XBC,0XB8,0X23,0XE4,0XDF,0XDF,0XC4,0X63,0XB8,0X38,0X7E,0XFF,0X40,0X00, 0X00,0X00,0X00,0X1F,0XFE,0XF9,0X1F,0X0F,0XC0,0X6F,0XDC,0X58,0X6F,0XC0,0X0F,0X3F, 0XF3,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0XFF,0XFF,0X3B,0X0F,0XC6,0X70,0X1F,0X8F,0X70,0XC2,0X0F,0X3B,0XFE,0X7F,0X00,0X00, 0X00,0X00,0X00,0X00,0X01,0X03,0X0F,0X1F,0X39,0X7A,0XF8,0XB9,0X48,0X05,0XDF,0XDA, 0XC3,0XFC,0X60,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF8, 0XE7,0XCB,0XDE,0X9E,0X05,0X68,0XF9,0XF9,0X78,0X3C,0X1F,0X0F,0X01,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X01,0X02,0X02,0X06, 0X06,0X04,0X0C,0X0F,0X0F,0X0E,0X0E,0X0E,0X0E,0X0E,0X0E,0X0E,0X0E,0X0E,0X0F,0X0C, 0X06,0X06,0X06,0X02,0X03,0X01,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//1 0X00,0X00,0X80,0X80,0X80,0X80,0XC0,0X60,0X20,0X80,0X50,0XE0,0XD0,0XD0,0X90,0X38, 0XF8,0X90,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X08,0X1C,0X1C,0X1C,0X1C,0X1C,0X1C,0X0E,0X0E,0X0F, 0X0F,0X07,0X0F,0XF8,0XE0,0X23,0X27,0X83,0XC3,0XD2,0XD2,0X85,0X85,0X0C,0X1C,0XFE, 0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0XBF,0XFF,0XF0,0XE0,0XE7,0XE6,0XE0,0X71,0X3F,0X0F,0X80,0XE0,0X7F, 0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0XFF,0X1F,0X07,0XF1,0X98,0XD4,0X16,0XB2,0XF3,0X73,0X73,0XF9,0XF8, 0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X7F,0XFE,0X18,0X19,0X98,0XDB,0X93,0X93,0X27,0X6E,0XC0,0X80,0X19, 0XF7,0XE4,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0A,0X0E,0X0E,0X0E,0X0E,0X0E,0X0E,0X0E, 0X0E,0X0E,0X0E,0X0F,0X0F,0X0C,0X0C,0X08,0X09,0X0B,0X0F,0X0D,0X0C,0X0F,0X0F,0X0C, 0X08,0X0F,0X0E,0X0E,0X0E,0X0E,0X0E,0X0E,0X0E,0X0E,0X0E,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X80,0XC0,0X40,0X60,0X60,0X60,0XD0,//2 0XB0,0XB0,0XF0,0XF0,0XF0,0XF0,0XF0,0XD0,0X10,0X10,0X58,0XD8,0X98,0X30,0X30,0XF0, 0X10,0X30,0X60,0XE0,0XE0,0XC0,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X30,0X38,0X3C,0X1E,0X0F,0X0C,0X04,0X07,0X03,0X03,0X01,0X01, 0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X03,0X02,0X00,0X0E,0X1F,0X73,0X83,0X33, 0X33,0XE6,0X6E,0X17,0X60,0X61,0X67,0XFF,0X23,0X49,0XFC,0XF8,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XF8,0X7F,0X3F, 0X3F,0XDF,0XCF,0XCE,0X06,0X81,0XE6,0X74,0X31,0X19,0X0F,0X07,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X80,0X80,0X80,0XC0,0XE0,0XD0,0XC8,0XC8,0XEC,0XE6,0XE7,0X6F,0X29,0X3A,0X19, 0X0C,0X0E,0X0F,0X04,0X02,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0X60,0X60,0X60,0XF0,0X38,0X6C,0XC8,0XCE, 0X43,0X21,0X2D,0XA6,0XA4,0X27,0X63,0X63,0XE1,0X60,0XA0,0XA0,0X20,0XA0,0X60,0X60, 0XA0,0XA0,0XA0,0XA0,0XA0,0X60,0XF0,0X90,0X58,0X18,0X9C,0XFE,0X3F,0X0F,0X02,0X00, 0X00,0X0C,0X0C,0X0E,0X0E,0X0F,0X0F,0X0C,0X09,0X0B,0X0E,0X08,0X0E,0X0C,0X0C,0X0D, 0X09,0X0B,0X08,0X09,0X0D,0X0F,0X0E,0X0F,0X1B,0X0B,0X0B,0X08,0X0C,0X0E,0X0E,0X0E, 0X0C,0X0F,0X0D,0X0C,0X0E,0X1E,0X1F,0X1F,0X0F,0X03,0X01,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X80,0XC0,0X40,0X60,0XE0,//3 0XE0,0XE0,0XF0,0XB0,0X90,0XB0,0XF0,0XD0,0X90,0XB0,0X90,0X30,0X30,0X30,0X30,0X30, 0X30,0X30,0X30,0X20,0X60,0X60,0XC0,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X70,0X68,0X6E,0X71,0X1B,0X0E,0X04,0X07,0X03,0X03, 0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X03,0X07,0X3E,0XE6,0X83,0X99, 0X9D,0X95,0XC5,0X7D,0X3A,0X00,0X80,0XE3,0XFF,0X7C,0X18,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0, 0XC0,0XC0,0XC0,0XC0,0X60,0XE0,0X20,0X20,0X30,0XB0,0X38,0X8C,0XE6,0X77,0X33,0X9B, 0X99,0XD9,0XCC,0XCE,0X8E,0X87,0X03,0X01,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X01,0X01,0X01,0X01,0X03,0X03,0X03,0X03,0X03,0X07,0X06,0X0C,0X1B,0X36,0X74,0XDB, 0XC3,0XE0,0X7C,0X1D,0X05,0XC6,0X79,0X33,0XE6,0X0C,0X3C,0XF8,0XE0,0XC0,0X00,0X00, 0X00,0X00,0X00,0X80,0XC0,0X60,0X60,0X20,0XA0,0X20,0X60,0XC0,0XC0,0X80,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XE0,0X9F, 0XC4,0X26,0X26,0X29,0X35,0X70,0X3E,0X9F,0X89,0X48,0X38,0X39,0X0F,0X07,0X00,0X00, 0X00,0X00,0X00,0X01,0X07,0X0F,0X0C,0X0C,0X09,0X0B,0X1D,0X1C,0X13,0X13,0X18,0X1C, 0X1C,0X18,0X18,0X14,0X1C,0X14,0X18,0X1C,0X1C,0X1A,0X1F,0X09,0X0B,0X0F,0X0F,0X0D, 0X0C,0X0C,0X06,0X07,0X03,0X03,0X01,0X01,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//4 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80, 0XC0,0XE0,0X20,0X30,0XF0,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X80,0X40,0X60,0X60,0X30,0X78,0X7C,0X66,0X8D,0XDD,0X4D, 0X65,0X3D,0X9C,0X80,0XC0,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XC0,0XE0,0X70,0X20, 0XB8,0XF4,0XC4,0X62,0X2D,0X3E,0X18,0X0C,0X0E,0X8F,0X93,0X31,0XF9,0XFC,0X7E,0X63, 0X41,0XC9,0XD9,0XFB,0XE7,0X73,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0XE0,0XF0,0X30,0X30,0X98,0X98,0XCA,0XCD,0X9C,0X5D,0X8D,0XCC,0XC6,0XC3, 0XC1,0X40,0X80,0X80,0X80,0X40,0X40,0X40,0X84,0XDF,0XF1,0XC9,0XCF,0X1C,0X80,0X7E, 0X90,0X18,0X8F,0XC5,0XF9,0X9F,0X80,0X80,0XC0,0X40,0X40,0XC0,0XC0,0X00,0X00,0X00, 0X00,0X08,0X0F,0X0D,0X0C,0X0E,0X0F,0X0F,0X0F,0X0F,0X0D,0X0F,0X0E,0X0C,0X0C,0X0A, 0X08,0X0E,0X0D,0X0D,0X0C,0X0F,0X0F,0X0C,0X06,0X4D,0XEC,0XFE,0X1C,0X43,0XD0,0X7E, 0XC0,0X43,0X18,0X7E,0XFD,0XC1,0X0F,0X0D,0X0C,0X0E,0X0B,0X0D,0X0F,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X10,0X1B,0X1F,0X18,0X18,0X1B,0X19,0X1C, 0X1A,0X13,0X1E,0X18,0X19,0X1F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XE0,0XB0,0X90,//5 0X50,0X50,0XD0,0XD0,0X90,0X90,0XB0,0X30,0X30,0X70,0X60,0XE0,0XE0,0X30,0X30,0X90, 0X90,0X90,0X90,0XB0,0X70,0XF0,0X30,0X10,0X48,0XA4,0XD6,0X7C,0X0C,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X7E,0XE7,0XEF,0XF0, 0X6E,0X0C,0X0D,0X0D,0X0D,0X0D,0X0B,0X0B,0X0E,0X0C,0X0C,0X0C,0X0D,0X0D,0X0B,0X0B, 0X0A,0X0B,0X0B,0X09,0X0D,0X0D,0X0C,0X0C,0X0E,0X03,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFE,0XFF,0XC0,0X83,0X9F,0X1D, 0X3C,0X7C,0X64,0X64,0X34,0X3C,0X38,0X08,0X48,0X6C,0X6C,0X6C,0XE8,0XF8,0X30,0X30, 0XB0,0XB0,0XA0,0X60,0X40,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X03,0X03,0X03,0X03, 0X03,0X03,0X02,0X02,0X03,0X03,0X03,0X07,0X05,0X0F,0X0B,0X18,0X1C,0X73,0XE6,0XE6, 0X2C,0X97,0XC7,0XC6,0XC6,0XC7,0X87,0X0E,0X3C,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X60,0X30,0X9F, 0X9C,0XC8,0XCD,0XC5,0XE4,0X67,0X71,0X38,0X1E,0X07,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X02,0X07,0X0F,0X0F,0X0F,0X1F,0X1C,0X1B,0X1B,0X12,0X1E,0X1A,0X1C, 0X1C,0X1C,0X18,0X1E,0X14,0X1E,0X1C,0X1E,0X0E,0X0B,0X0D,0X0D,0X0F,0X07,0X06,0X07, 0X03,0X01,0X01,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//6 0X00,0X00,0X80,0X80,0X80,0XC0,0XC0,0XC0,0XE0,0X60,0X60,0X30,0XB0,0XD0,0X90,0X70, 0X78,0X28,0X38,0X18,0X18,0X18,0X1C,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0XE0,0X70,0X18,0XA8,0XB8,0XBC,0X0C, 0XB6,0X9B,0XC9,0XED,0X64,0X35,0X1D,0X0C,0X07,0X07,0X03,0X01,0X01,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0XE0,0XB0,0XBC,0X3E,0X7F,0XFF,0X07,0X00,0XF8,0XFD,0XFC,0XE4,0X6D, 0X8F,0XE7,0X71,0X70,0X70,0X70,0X78,0X58,0X58,0X58,0X58,0XC8,0XCC,0XCC,0XEC,0XCC, 0X88,0XC8,0X78,0X38,0XB0,0XB0,0X20,0XE0,0X60,0XC0,0X80,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0XFF,0XFC,0XFD,0X0F,0X07,0XC4,0X67,0X63,0X57,0X33,0XF1,0XFE,0XFE,0XFE, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X0F,0XFF, 0X27,0X73,0X18,0X89,0XFB,0XBB,0XB0,0X63,0X0F,0X0C,0XC1,0XFF,0X00,0X00,0X00,0X00, 0X00,0X00,0X01,0X0F,0X1F,0X3F,0X7C,0XF9,0X9B,0X1A,0X52,0XD2,0X87,0X2F,0XCF,0X9F, 0X70,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XE0,0X7D, 0X7F,0XBF,0XB7,0XF3,0XF9,0XD8,0XD8,0XDA,0X67,0X3F,0X1F,0X07,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X01,0X03,0X03,0X07,0X07,0X07,0X0F, 0X0E,0X0C,0X0D,0X0D,0X0F,0X0A,0X0E,0X0E,0X0E,0X0E,0X0E,0X0D,0X0B,0X0F,0X0B,0X04, 0X07,0X07,0X03,0X03,0X01,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0XE0,0XF8,0XDC,0XDC,0XAC,0X38,0X08,0X98,//7 0XD8,0X38,0X68,0X68,0X68,0X48,0X48,0X38,0X50,0X50,0XB0,0X30,0X30,0X70,0X68,0X48, 0X78,0X50,0X18,0XB8,0XB8,0X98,0X98,0XD8,0X70,0X50,0X30,0XB0,0XF0,0XF8,0X08,0X00, 0X00,0X00,0X00,0X10,0X30,0X3C,0X3F,0X1F,0X0F,0X07,0X07,0X07,0X07,0X06,0X06,0X06, 0X07,0X06,0X06,0X07,0X07,0X06,0X06,0X06,0X06,0X06,0X06,0X07,0X05,0X07,0X06,0X07, 0X07,0X87,0XC6,0X66,0X12,0XCA,0XE6,0X72,0X1A,0X0E,0X07,0X03,0X01,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0X20,0X18,0XF8,0XC4,0X26, 0X8F,0X63,0X78,0X1E,0X07,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X80,0X40,0X20,0X70,0XE4,0XF6,0XF2,0XF3,0X31,0XF1,0XF3,0XF9,0X39,0X1C,0X07, 0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0XF0,0X10,0X1C,0X7E, 0XD3,0XD2,0X33,0XF6,0XFE,0X20,0X89,0XF5,0X8C,0XF2,0X2C,0X07,0X01,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X07,0X0F,0X0E,0X0E, 0X0E,0X0F,0X0C,0X0C,0X0E,0X07,0X07,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0X40,0X60,0X60,0XF0,0X10,0X30,0X70,//8 0X58,0X88,0XF8,0X78,0X2C,0X3C,0X3C,0X1C,0X1C,0X1C,0X1C,0X38,0X38,0X78,0X68,0XD8, 0XB8,0XA0,0X68,0XD0,0X10,0X30,0X20,0X60,0XC0,0X80,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X60,0XF8,0X3E,0X0F,0X0F,0XC4,0X24,0X87,0XC6,0XD3,0X90,0X9B,0X7F, 0XC3,0X81,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X83,0X6F,0X7E,0XBA,0X9B,0XCC,0X70,0X1E,0XC0,0X7D,0X3F,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X07,0X07,0X0C,0X18,0X18,0X33,0X27,0X67,0X6C,0X49,0XC9,0XC8, 0XCC,0XCF,0XCE,0X4E,0XCC,0XCC,0XCC,0X48,0X58,0X98,0X90,0X30,0X78,0XF8,0XDC,0XCE, 0XCF,0XCE,0XCF,0XCD,0X84,0X86,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0XC0,0X60,0X20,0X30,0X98,0XD8,0XCC,0XE4,0XF6,0X30,0X18, 0X0F,0X07,0X07,0X02,0X03,0X05,0X05,0X0C,0X0C,0X19,0X1B,0X17,0X34,0X77,0X47,0XC8, 0XF8,0X32,0X97,0X9E,0X98,0X79,0X7F,0X7E,0X7C,0XCC,0X18,0XE0,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X7F,0XE1,0XC0,0XCE,0XC9,0X5D,0X5D,0X81,0XAF,0X7F,0XC0,0X80, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XE1, 0X3F,0X34,0X91,0X63,0X3F,0X8C,0X83,0XE9,0XE3,0X71,0X3C,0X1F,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X01,0X01,0X03,0X07,0X06,0X06,0X07,0X0D,0X0C, 0X0D,0X0D,0X0B,0X0A,0X1F,0X0E,0X0E,0X0E,0X0E,0X0E,0X0E,0X0E,0X0E,0X0F,0X0F,0X04, 0X07,0X06,0X07,0X03,0X01,0X01,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X80,0X40,0X60,0X20,0XB0,0XB0,0X18,0X88,0XE8,//9 0X68,0X30,0X34,0X18,0X18,0X18,0X18,0X18,0X18,0X18,0X18,0X78,0XF8,0XF8,0XF8,0XF0, 0X30,0X30,0XB0,0XD0,0XA0,0X20,0X40,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0XF0,0X3C,0X96,0X1B,0X1B,0X67,0X0E,0XFE,0XDD,0XDF,0XFD,0XFC,0X07,0X01, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XE3, 0XC6,0X66,0X24,0XA5,0XC7,0XA6,0X06,0X07,0X3E,0XFC,0XF0,0XD0,0X00,0X00,0X00,0X00, 0X00,0X00,0X0F,0X3C,0X61,0XCF,0XBB,0X7A,0X43,0X7F,0X7F,0X2C,0X00,0X33,0X3F,0X98, 0XE0,0XC0,0X40,0XC0,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0XC0,0XFF,0XFF, 0XF8,0X60,0X67,0X36,0X99,0X0F,0X40,0X70,0XF8,0XFF,0XFF,0X7F,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X03,0X02,0X03,0X07,0X07,0X06,0X07,0X07, 0X04,0X04,0X06,0X06,0X06,0X06,0X06,0X07,0X07,0X07,0X83,0X63,0X79,0X67,0X41,0X19, 0XBC,0XB8,0X9A,0XD2,0XCB,0XEE,0X60,0X30,0X0D,0X07,0X01,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X80,0X80,0XC0,0XC0,0XE0,0XB0,0XE8,0XCC,0XCE,0XDF,0XDC,0X62,0X77,0X2D,0X20,0X1E, 0X0F,0X07,0X07,0X03,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X0C,0X0C,0X0E,0X0E,0X0E,0X0E,0X07, 0X07,0X07,0X07,0X03,0X03,0X03,0X01,0X01,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00 };Забыл файл добавленных цифр.(файл DefaultFonts.c заменить на этот).
Красивое решение!
Интересно, а с ILI9341 по SPI можно такое сотворить?
Сотворить можно все, что угодно. Более того, в случае цветного дисплея это сделать намного проще.
///////////// ЧАСЫ НА 3 ДИСПЛЕЯХ #include <OLED_I2C.h> OLED myOLED(SDA, SCL); #define disp_1 12 // управляющие дисплееями выводы #define disp_2 11 #define disp_3 10 ///////////// #include <iarduino_RTC.h> iarduino_RTC time(RTC_DS3231); //SDA - A4 //SCL - A5 //ПОДКЛЮЧЕНИЕ ВЫВОДОВ МОДУЛЯ ВРЕМЕНИ String cmd1 = ""; //перменнные для хранения значений текущего времени int K;// ///////////////// int t = 222; // пауза между считыванием данных по времени с модуля extern uint8_t BigZif_0_9[];//внебиблиотечные цифры - самопальный шрифт, добавленный в библиотеку экранчика extern uint8_t SmallZif_0_9[];//внебиблиотечные цифры - самопальный шрифт, добавленный в библиотеку экранчика void setup() { delay(50); ////// подключение всех дисплеев pinMode(disp_1, OUTPUT); digitalWrite(disp_1, HIGH); myOLED.begin(); digitalWrite(disp_1, LOW); delay(50); ////// pinMode(disp_2, OUTPUT); digitalWrite(disp_2, HIGH); myOLED.begin(); digitalWrite(disp_2, LOW); delay(50); //////// pinMode(disp_3, OUTPUT); digitalWrite(disp_3, HIGH); myOLED.begin(); digitalWrite(disp_3, LOW); delay(50); //////// myOLED.setFont(BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт ///////////// time.begin(); ////////начальная установка часов//////// //time.settime(0,58,18,20,8,19,2); // 0 сек, 58 мин, 18 час, 20, АВГУСТА, 2019 года, ВТОРНИК (раскомментить, выставить желаемое, загрузить скетч, закомментить,загрузить скетч) ///////////// tschasi(); } void loop() { //////////////////// cmd1 = time.gettime("s"); int P = cmd1.substring(0, 2).toInt(); K = cmd1.substring(0, 1).toInt(); myOLED.setFont(SmallZif_0_9);//внебиблиотечные цифры - самопальный шрифт myOLED. printNumI(K, 0, 0); //десятки секунд K = cmd1.substring(1).toInt(); myOLED.printNumI( K, 48, 0); //единицы секунд myOLED.drawLine(0, 49, 96, 49);//разделительная линия myOLED.setFont(BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт dis_1(); //// if (P == 0) { tschasi(); } /////////////////// delay(t); } //////////////////////////// //////////////////////////// /////////////////////////// void dis_1() { //функции обновления изображений на экранах digitalWrite(disp_1, HIGH); myOLED.update(); digitalWrite(disp_1, LOW); myOLED.clrScr(); // очищаем дисплей } void dis_2() { digitalWrite(disp_2, HIGH); myOLED.update(); digitalWrite(disp_2, LOW); myOLED.clrScr(); // очищаем дисплей } void dis_3() { digitalWrite(disp_3, HIGH); myOLED.update(); digitalWrite(disp_3, LOW); myOLED.clrScr(); // очищаем дисплей } ///////////////////////// void tschasi() { cmd1 = time.gettime("H"); K = cmd1.substring(0, 1).toInt(); myOLED. printNumI(K, 0, 0); //десятки часов K = cmd1.substring(1).toInt(); myOLED.printNumI( K, 63, 0); //единицы часов myOLED.drawLine(127, 0, 127, 63);//разделительная линия dis_3(); //// cmd1 = time.gettime("i"); K = cmd1.substring(0, 1).toInt(); myOLED. printNumI(K, 0, 0); //десятки минут K = cmd1.substring(1).toInt(); myOLED.printNumI( K, 63, 0); //единицы минут myOLED.drawLine(0, 0, 0, 63); myOLED.drawLine(127, 0, 127, 63); //разделительные линии dis_2(); } ///////////////Вот вариант корпуса под готовую поделку - бомба.
Токи потребления не смотрел?
Смотрел, около 26-28 мА :-)
///////////// ЧАСЫ-ШКАЛЫ НА 3 ИНДИКАТОРАХ #include <OLED_I2C.h> OLED myOLED(SDA, SCL); #define disp_1 12 // управляющие дисплееями выводы #define disp_2 11 #define disp_3 10 ///////////// #include <iarduino_RTC.h> iarduino_RTC time(RTC_DS3231); //SDA - A4 //SCL - A5 //ПОДКЛЮЧЕНИЕ ВЫВОДОВ МОДУЛЯ ВРЕМЕНИ extern uint8_t RusFont[]; int t = 222; // пауза между считываниями данных bool PUSK = true;//флаг для начального включения-обновления данных всех экранов void setup() { ////// подключение всех дисплеев pinMode(disp_1, OUTPUT); digitalWrite(disp_1, HIGH); myOLED.begin(); digitalWrite(disp_1, LOW); delay(50); ////// pinMode(disp_2, OUTPUT); digitalWrite(disp_2, HIGH); myOLED.begin(); digitalWrite(disp_2, LOW); delay(50); //////// pinMode(disp_3, OUTPUT); digitalWrite(disp_3, HIGH); myOLED.begin(); digitalWrite(disp_3, LOW); delay(50); //////// myOLED.setFont(RusFont); myOLED.invert(0);//инверсия цвета time.begin(); ////////начальная установка часов//////// //time.settime(0,58,18,20,8,19,2); // 0 сек, 58 мин, 18 час, 20, АВГУСТА, 2019 года, ВТОРНИК (раскомментить, выставить желаемое, загрузить скетч, закомментить,загрузить скетч) ///////////// fun_();//выставляем показания на экраны PUSK = false; /////////// } void loop() { fun_();//выставляем показания на экраны delay(t); } //////////////////////////// //////////////////////////// /////////////////////////// void dis_1() { //функции обновления изображений на экранах digitalWrite(disp_1, HIGH); myOLED.update(); digitalWrite(disp_1, LOW); myOLED.clrScr(); // очищаем дисплей } void dis_2() { digitalWrite(disp_2, HIGH); myOLED.update(); digitalWrite(disp_2, LOW); myOLED.clrScr(); // очищаем дисплей } void dis_3() { digitalWrite(disp_3, HIGH); myOLED.update(); digitalWrite(disp_3, LOW); myOLED.clrScr(); // очищаем дисплей } ///////////////////////// ///////////////////////// ///////////////////////// функция рисования стрелки //////////////////////////////// void primitiv_1(int x, int y, int r1, int r2, int n, float rotor) { //x,y координаты центра фигуры; r1,r2 радиусы зубцов и впадин фигуры; n число зубцов;rotor угол поворота фигуры for (float i = 0 + rotor; i < 1 * PI + rotor; i = i + 2 * PI / n) { myOLED.drawLine(x + r1 * cos(i) , y + r1 * sin(i), x + r2 * cos(i + PI / n) , y + r2 * sin(i + PI / n) ); myOLED.drawLine(x + r2 * cos(i + PI / n) , y + r2 * sin(i + PI / n), x + r1 * cos(i + 2 * PI / n) , y + r1 * sin(i + 2 * PI / n)); } } ///////////////////////// функция рисования прибора-шкалы ////////////////////////// void pribor_ (String str, int x1, int y1, int n1, float rotor1, float pologenie) { //str название шкалы; x1,y1 координаты положения центра; n1 число делений; rotor1 начальный угол положения стрелки; pologenie угол указанного положения стрелки for (int i = 22; i < 29; i++) { primitiv_1(x1, y1, 7, i, 2, (2 * PI / n1)*pologenie + rotor1); //стрелка } for (int i = 6; i < 9; i++) { myOLED.drawCircle(x1, y1, i); } myOLED.drawCircle(x1 - 1, y1 - 1, 30); //шкала for (float i = 0; i < 2 * PI; i = i + 2 * PI / n1) { if (i >= PI / 2 && i < PI / 2 + 2 * PI / n1) { myOLED.drawLine(x1 - 15 * cos(i), y1 - 15 * sin(i), x1 - 30 * cos(i), y1 - 30 * sin(i)); } else { myOLED.drawLine(x1 - 25 * cos(i), y1 - 25 * sin(i), x1 - 30 * cos(i), y1 - 30 * sin(i)); } } myOLED.print(str, x1 - 10, y1 + 15); // название шкалы } ////////////////////// функция выставления значений времени по шкалам void fun_() { time.gettime();// pribor_("CTR", 31, 32, 12, -PI, time.seconds / 5.0); // шкала секунд pribor_("LTY", 97, 32, 7, -PI + 0.2, time.weekday); //шкала дня недели dis_2(); //обработка и обновление данных на 2 индикаторе if (time.seconds == 0 || PUSK) { pribor_("XFC", 31, 32, 12, -PI, time.hours + time.minutes / 60.0); //шкала часов pribor_("VBY", 97, 32, 12, -PI, time.minutes / 5.0 + time.seconds / 300.0); // шкала минут dis_3(); //обработка и обновление данных на 3 индикаторе } if ((time.Hours == 0 && time.minutes == 0 && time.seconds == 0) || PUSK) { pribor_("XBC", 31, 32, 31, -PI, time.day); //шкала числа месяца pribor_("VTC", 97, 32, 12, -PI, time.month); // шкала месяца года dis_1(); //обработка и обновление данных на 1 индикаторе } }Часы могут иметь несколько тем для отображения данных. Потом "темные скетчи" можно сложить в один.
По модулю (по ходу) ds3231 возник вопрос - различает ли он самостоятельно дни в месяце, где 28,29,30,31 или в каждом шпарит по 31?
В некоторых Dallas-ах ещё был автопереход на летнее/зимнее время.
Просто смутило, что в начальных настройках весь набор вводится. А если ввести с ошибкой данные они не пройдут, пройдут, но результаты будут с ошибкой?
А проверить? Насколько помню, введётся с ошибкой, но по ходу исправится на корректное значение.
Я именно о DS, а не о библиотеке.
Понял. Но библиотека любая, по идее, просто выводит в переменных что ей дают, без программной обработки?
Добавил третью тему отображения данных из часов реального времени. А вот интересно функцию ниже можно использовать в loop?
time.settime(0,58,18,20,8,19,2);// 0 сек, 58 мин, 18 час, 20, АВГУСТА, 2019 года, ВТОРНИК///////////// ЧАСЫ-ОВАЛ НА 3 ИНДИКАТОРАХ #include <OLED_I2C.h> OLED myOLED(SDA, SCL); #define disp_1 12 // управляющие дисплееями выводы #define disp_2 11 #define disp_3 10 ///////////// #include <iarduino_RTC.h> iarduino_RTC time(RTC_DS3231); //SDA - A4 //SCL - A5 //ПОДКЛЮЧЕНИЕ ВЫВОДОВ МОДУЛЯ ВРЕМЕНИ extern uint8_t RusFont[]; int t = 222; // пауза между считываниями данных float minuti = 0.00; //пременные хранения углов float tcshasi = 0.00; // float sekundi = 0.00; // int dlina_1 = 60;//задаём геометрию-форму часов int dlina_2 = 28; bool PUSK = true;//флаг для начального включения-обновления данных всех экранов int N=31;//переменная числа дней в месяце void setup() { ////// подключение всех дисплеев pinMode(disp_1, OUTPUT); digitalWrite(disp_1, HIGH); myOLED.begin(); digitalWrite(disp_1, LOW); delay(50); ////// pinMode(disp_2, OUTPUT); digitalWrite(disp_2, HIGH); myOLED.begin(); digitalWrite(disp_2, LOW); delay(50); //////// pinMode(disp_3, OUTPUT); digitalWrite(disp_3, HIGH); myOLED.begin(); digitalWrite(disp_3, LOW); delay(50); //////// myOLED.setFont(RusFont); time.begin(); ////////начальная установка часов//////// //time.settime(0,58,18,20,8,19,2); // 0 сек, 58 мин, 18 час, 20, АВГУСТА, 2019 года, ВТОРНИК (раскомментить, выставить желаемое, загрузить скетч, закомментить,загрузить скетч) ///////////// fun_B();//выставляем показания на экраны PUSK = false; /////////// } void loop() { fun_B();//выставляем показания на экраны delay(t); } //////////////////////////// //////////////////////////// /////////////////////////// void dis_1() { //функции обновления изображений на экранах digitalWrite(disp_1, HIGH); myOLED.update(); digitalWrite(disp_1, LOW); myOLED.clrScr(); // очищаем дисплей } void dis_2() { digitalWrite(disp_2, HIGH); myOLED.update(); digitalWrite(disp_2, LOW); myOLED.clrScr(); // очищаем дисплей } void dis_3() { digitalWrite(disp_3, HIGH); myOLED.update(); digitalWrite(disp_3, LOW); myOLED.clrScr(); // очищаем дисплей } ///////////////////////// void fun_B() { //////////// time.gettime();// sekundi=time.seconds*2*PI/60.0;// minuti=time.minutes*2*PI/60.0;// tcshasi=time.hours*2*PI/12.0+minuti/12.0 ;// for (float i = 0; i < 2 * PI - 0.01; i = i + PI / 6) { // рисуем окружности-риски по эллипсу myOLED.drawCircle( 63 + cos(i)*dlina_1, 32 + sin(i)*dlina_2, 3); // } myOLED.drawLine(63,32,63 + cos(sekundi - PI / 2) * (dlina_1), 32 + sin(sekundi - PI / 2)* (dlina_2));//секундная стрелка рисуется myOLED.drawLine(63 + cos(minuti-0.5 - PI / 2) * (dlina_1*0.15), 32 + sin(minuti-0.5 - PI / 2) * (dlina_2*0.15) , 63 + cos(minuti - PI / 2) * (dlina_1*1.1), 32 + sin(minuti - PI / 2) * (dlina_2*1.1)); //минутная стрелка рисуется myOLED.drawLine(63 + cos(minuti+0.5 - PI / 2) * (dlina_1*0.15), 32 + sin(minuti+0.5 - PI / 2) * (dlina_2*0.15) , 63 + cos(minuti - PI / 2) * (dlina_1), 32 + sin(minuti - PI / 2) * (dlina_2)); //минутная стрелка рисуется myOLED.drawLine(63 + cos(tcshasi-0.5 - PI / 2) * (dlina_1*0.15), 32 + sin(tcshasi-0.5 - PI / 2) * (dlina_2*0.15) , 63 + cos(tcshasi - PI / 2) * (dlina_1*0.5), 32 + sin(tcshasi - PI / 2) * (dlina_2*0.5)); //часовая стрелка рисуется myOLED.drawLine(63 + cos(tcshasi+0.5 - PI / 2) * (dlina_1*0.15), 32 + sin(tcshasi+0.5 - PI / 2) * (dlina_2*0.15) , 63 + cos(tcshasi - PI / 2) * (dlina_1*0.5), 32 + sin(tcshasi - PI / 2) * (dlina_2*0.5)); //часовая стрелка рисуется myOLED.drawCircle( 63, 32, 4);//точка крепления стрелки dis_3(); /////////// if(sekundi==0 || PUSK){ if(time.month==1||time.month==3||time.month==5||time.month==7||time.month==8||time.month==10||time.month==12){N=31;}else {if(time.month==2){N=28;}else{N=30;}}//условия определения числа дней в месяцах int D=time.day;//число месяца int Dn=time.weekday;if(Dn==0){Dn=7;}//день недели определяем и переводим в интервал 1-7 for(int i=D-1;i>=1;i--){Dn=Dn-1;if(Dn==0){Dn=7;}}//определяем день недели для первого числа (от 1 до 7 результат пн.-вс.) int k=Dn-2; for(int i=0;i<6;i++){//вертикаль for(int j=0;j<7;j++){//горизонталь if(j-k+7*i<=N&&j-k+7*i>0){ myOLED. printNumI(j-k+7*i, j*18, i*11);} // if(j-k+7*i==D){ myOLED.drawCircle( j*18+6, i*11+4,8);} // } } dis_1(); //////////// Dn=time.weekday;if(Dn==0){Dn=7;}//день недели определяем и переводим в интервал 1-7 if(Dn==1){ myOLED.print("GJYTLTKMYBR", 30, 20);} // название дня недели if(Dn==2){ myOLED.print(" DNJHYBR", 30, 20);} if(Dn==3){ myOLED.print(" CHTLF", 30, 20);} if(Dn==4){ myOLED.print(" XTNDTHU", 30, 20);} if(Dn==5){ myOLED.print(" GZNYBWF", 30, 20);} if(Dn==6){ myOLED.print(" CE,,JNF", 30, 20);} if(Dn==7){ myOLED.print("DJCRHTCTYMT", 30, 20);} if(time.month==1){ myOLED.print("ZYDFHZ", 60, 40);}//название месяца if(time.month==2){ myOLED.print("ATDHFKZ", 60, 40);} if(time.month==3){ myOLED.print("VFHNF", 60, 40);} if(time.month==4){ myOLED.print("FGHTKZ", 60, 40);} if(time.month==5){ myOLED.print("VFZ", 60, 40);} if(time.month==6){ myOLED.print("B.YZ", 60, 40);} if(time.month==7){ myOLED.print("B.KZ", 60, 40);} if(time.month==8){ myOLED.print("FDUECNF", 60, 40);} if(time.month==9){ myOLED.print("CTYNZ,HZ", 60, 40);} if(time.month==10){ myOLED.print("JRNZ,HZ", 60, 40);} if(time.month==11){ myOLED.print("YJZ,HZ", 60, 40);} if(time.month==12){ myOLED.print("LTRF,HZ", 60, 40);} myOLED.drawRoundRect(5, 5, 122, 59);//рамка dis_2(); } }Почему ж нельзя? Она просто пишет в регистры новые значения. Ей без разницы - из лупа или из майна.
Циклы и массивы строк (DOW/Month) придадут коду стройности.
Ещё можно в пятницу 13-го выводить жуткий циферблат, а 1-го апреля время отображать по рандомайзу.
///////////// ЧАСЫ ТЕМАТИЧЕСКИЕ НА 3 ДИСПЛЕЯХ #include <OLED_I2C.h> OLED myOLED(SDA, SCL); #define disp_1 12 // управляющие дисплееями выводы #define disp_2 11 #define disp_3 10 ///////////// #include <iarduino_RTC.h> iarduino_RTC time(RTC_DS3231); //SDA - A4 //SCL - A5 //ПОДКЛЮЧЕНИЕ ВЫВОДОВ МОДУЛЯ ВРЕМЕНИ String cmd1 = ""; //перменнные для хранения значений текущего времени int K;// //////////////// ///////////////// byte TEMA=0;//ФЛАГ ВЫБОРА ТЕМЫ ОТОБРАЖЕНИЯ ///////////////// //////////////// float minuti = 0.00; //пременные хранения углов float tcshasi = 0.00; // float sekundi = 0.00; // int dlina_1 = 60;//задаём геометрию-форму часов int dlina_2 = 28; bool PUSK = true;//флаг для начального включения-обновления данных всех экранов int N=31;//переменная числа дней в месяце /////////// int t = 222; // пауза между считыванием данных по времени с модуля extern uint8_t BigZif_0_9[];//внебиблиотечные цифры - самопальный шрифт, добавленный в библиотеку экранчика extern uint8_t SmallZif_0_9[];//внебиблиотечные цифры - самопальный шрифт, добавленный в библиотеку экранчика extern uint8_t RusFont[]; extern uint8_t MegaNumbers[]; void setup() { delay(50); pinMode(7, INPUT);//кнопку подключить digitalWrite(7, HIGH);// включить подтягивающий резистор к ней ////// подключение всех дисплеев pinMode(disp_1, OUTPUT); digitalWrite(disp_1, HIGH); myOLED.begin(); digitalWrite(disp_1, LOW); delay(50); ////// pinMode(disp_2, OUTPUT); digitalWrite(disp_2, HIGH); myOLED.begin(); digitalWrite(disp_2, LOW); delay(50); //////// pinMode(disp_3, OUTPUT); digitalWrite(disp_3, HIGH); myOLED.begin(); digitalWrite(disp_3, LOW); delay(50); ///////////// time.begin(); ////////начальная установка часов//////// //time.settime(0,58,18,20,8,19,2); // 0 сек, 58 мин, 18 час, 20, АВГУСТА, 2019 года, ВТОРНИК (раскомментить, выставить желаемое, загрузить скетч, закомментить,загрузить скетч) ///////////// myOLED.setFont(BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт tschasi(); } void loop() { ////////////////////////////////////////////////////////////////////////////////////// if(digitalRead (7)==LOW){//если нажата кнопка 7 вывода TEMA++;if(TEMA==4){TEMA=0;} if(TEMA==0){ myOLED.setFont(BigZif_0_9); tschasi();} if(TEMA==1){PUSK = true;myOLED.setFont(RusFont);fun_();PUSK = false;} if(TEMA==2){PUSK = true;myOLED.setFont(RusFont);fun_B();PUSK = false;} if(TEMA==3){PUSK = true;myOLED.setFont(MegaNumbers);fun_C();PUSK = false;} delay(50); } ////////////////////////////////////////////////////////////////////////////////////// if(TEMA==0){ //////////////////// cmd1 = time.gettime("s"); int P = cmd1.substring(0, 2).toInt(); K = cmd1.substring(0, 1).toInt(); myOLED.setFont(SmallZif_0_9);//внебиблиотечные цифры - самопальный шрифт myOLED. printNumI(K, 0, 0); //десятки секунд K = cmd1.substring(1).toInt(); myOLED.printNumI( K, 48, 0); //единицы секунд myOLED.drawLine(0, 49, 96, 49);//разделительная линия myOLED.setFont(BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт dis_1(); //// if (P == 0) { tschasi(); } } ///////////////////////////////////////////////////////////////////////////////////////// if(TEMA==1){myOLED.setFont(RusFont);fun_();}//выставляем показания на экраны ///////////////////////////////////////////////////////////////////////////////////////// if(TEMA==2){myOLED.setFont(RusFont);fun_B();}//выставляем показания на экраны ///////////////////////////////////////////////////////////////////////////////////////// if(TEMA==3){myOLED.setFont(MegaNumbers);fun_C();}//выставляем показания на экраны /////////////////////////////////////////////////////////////////////////////////////// delay(t); } //////////////////////////// //////////////////////////// /////////////////////////// void dis_1() { //функции обновления изображений на экранах digitalWrite(disp_1, HIGH); myOLED.update(); digitalWrite(disp_1, LOW); myOLED.clrScr(); // очищаем дисплей } void dis_2() { digitalWrite(disp_2, HIGH); myOLED.update(); digitalWrite(disp_2, LOW); myOLED.clrScr(); // очищаем дисплей } void dis_3() { digitalWrite(disp_3, HIGH); myOLED.update(); digitalWrite(disp_3, LOW); myOLED.clrScr(); // очищаем дисплей } ///////////////////////// ТЕМА 1 "ОСНОВНАЯ" ///////////////////////// функция прорисовки часов void tschasi() { cmd1 = time.gettime("H"); K = cmd1.substring(0, 1).toInt(); myOLED. printNumI(K, 0, 0); //десятки часов K = cmd1.substring(1).toInt(); myOLED.printNumI( K, 63, 0); //единицы часов myOLED.drawLine(127, 0, 127, 63);//разделительная линия dis_3(); //// cmd1 = time.gettime("i"); K = cmd1.substring(0, 1).toInt(); myOLED. printNumI(K, 0, 0); //десятки минут K = cmd1.substring(1).toInt(); myOLED.printNumI( K, 63, 0); //единицы минут myOLED.drawLine(0, 0, 0, 63); myOLED.drawLine(127, 0, 127, 63); //разделительные линии dis_2(); } /////////////// ///////////////////////// функция рисования стрелки //////////////////////////////// void primitiv_1(int x, int y, int r1, int r2, int n, float rotor) { //x,y координаты центра фигуры; r1,r2 радиусы зубцов и впадин фигуры; n число зубцов;rotor угол поворота фигуры for (float i = 0 + rotor; i < 1 * PI + rotor; i = i + 2 * PI / n) { myOLED.drawLine(x + r1 * cos(i) , y + r1 * sin(i), x + r2 * cos(i + PI / n) , y + r2 * sin(i + PI / n) ); myOLED.drawLine(x + r2 * cos(i + PI / n) , y + r2 * sin(i + PI / n), x + r1 * cos(i + 2 * PI / n) , y + r1 * sin(i + 2 * PI / n)); } } ////////////////////////// ТЕМА 2 "СТИЛЬНАЯ" ///////////////////////// функция рисования прибора-шкалы ////////////////////////// void pribor_ (String str, int x1, int y1, int n1, float rotor1, float pologenie) { //str название шкалы; x1,y1 координаты положения центра; n1 число делений; rotor1 начальный угол положения стрелки; pologenie угол указанного положения стрелки for (int i = 22; i < 29; i++) { primitiv_1(x1, y1, 7, i, 2, (2 * PI / n1)*pologenie + rotor1); //стрелка } for (int i = 6; i < 9; i++) { myOLED.drawCircle(x1, y1, i); } myOLED.drawCircle(x1 - 1, y1 - 1, 30); //шкала for (float i = 0; i < 2 * PI; i = i + 2 * PI / n1) { if (i >= PI / 2 && i < PI / 2 + 2 * PI / n1) { myOLED.drawLine(x1 - 15 * cos(i), y1 - 15 * sin(i), x1 - 30 * cos(i), y1 - 30 * sin(i)); } else { myOLED.drawLine(x1 - 25 * cos(i), y1 - 25 * sin(i), x1 - 30 * cos(i), y1 - 30 * sin(i)); } } myOLED.print(str, x1 - 10, y1 + 15); // название шкалы } ////////////////////// функция выставления значений времени по шкалам void fun_() { time.gettime();// pribor_("CTR", 31, 32, 12, -PI, time.seconds / 5.0); // шкала секунд pribor_("LTY", 97, 32, 7, -PI + 0.2, time.weekday); //шкала дня недели dis_2(); //обработка и обновление данных на 2 индикаторе if (time.seconds == 0 || PUSK) { pribor_("XFC", 31, 32, 12, -PI, time.hours + time.minutes / 60.0); //шкала часов pribor_("VBY", 97, 32, 12, -PI, time.minutes / 5.0 + time.seconds / 300.0); // шкала минут dis_3(); //обработка и обновление данных на 3 индикаторе } if ((time.Hours == 0 && time.minutes == 0 && time.seconds == 0) || PUSK) { pribor_("XBC", 31, 32, 31, -PI, time.day); //шкала числа месяца pribor_("VTC", 97, 32, 12, -PI, time.month); // шкала месяца года dis_1(); //обработка и обновление данных на 1 индикаторе } } ///////////////////////////// ТЕМА 3 "УНИВЕРСАЛЬНАЯ" ///////////////////////// void fun_B() { //////////// time.gettime();// sekundi=time.seconds*2*PI/60.0;// minuti=time.minutes*2*PI/60.0;// tcshasi=time.hours*2*PI/12.0+minuti/12.0 ;// for (float i = 0; i < 2 * PI - 0.01; i = i + PI / 6) { // рисуем окружности-риски по эллипсу myOLED.drawCircle( 63 + cos(i)*dlina_1, 32 + sin(i)*dlina_2, 3); // } myOLED.drawLine(63,32,63 + cos(sekundi - PI / 2) * (dlina_1), 32 + sin(sekundi - PI / 2)* (dlina_2));//секундная стрелка рисуется myOLED.drawLine(63 + cos(minuti-0.5 - PI / 2) * (dlina_1*0.15), 32 + sin(minuti-0.5 - PI / 2) * (dlina_2*0.15) , 63 + cos(minuti - PI / 2) * (dlina_1*1.1), 32 + sin(minuti - PI / 2) * (dlina_2*1.1)); //минутная стрелка рисуется myOLED.drawLine(63 + cos(minuti+0.5 - PI / 2) * (dlina_1*0.15), 32 + sin(minuti+0.5 - PI / 2) * (dlina_2*0.15) , 63 + cos(minuti - PI / 2) * (dlina_1), 32 + sin(minuti - PI / 2) * (dlina_2)); //минутная стрелка рисуется myOLED.drawLine(63 + cos(tcshasi-0.5 - PI / 2) * (dlina_1*0.15), 32 + sin(tcshasi-0.5 - PI / 2) * (dlina_2*0.15) , 63 + cos(tcshasi - PI / 2) * (dlina_1*0.5), 32 + sin(tcshasi - PI / 2) * (dlina_2*0.5)); //часовая стрелка рисуется myOLED.drawLine(63 + cos(tcshasi+0.5 - PI / 2) * (dlina_1*0.15), 32 + sin(tcshasi+0.5 - PI / 2) * (dlina_2*0.15) , 63 + cos(tcshasi - PI / 2) * (dlina_1*0.5), 32 + sin(tcshasi - PI / 2) * (dlina_2*0.5)); //часовая стрелка рисуется myOLED.drawCircle( 63, 32, 4);//точка крепления стрелки dis_3(); /////////// if(sekundi==0 || PUSK){ if(time.month==1||time.month==3||time.month==5||time.month==7||time.month==8||time.month==10||time.month==12){N=31;}else {if(time.month==2){N=28;}else{N=30;}}//условия определения числа дней в месяцах int D=time.day;//число месяца int Dn=time.weekday;if(Dn==0){Dn=7;}//день недели определяем и переводим в интервал 1-7 for(int i=D-1;i>=1;i--){Dn=Dn-1;if(Dn==0){Dn=7;}}//определяем день недели для первого числа (от 1 до 7 результат пн.-вс.) int k=Dn-2; for(int i=0;i<6;i++){//вертикаль for(int j=0;j<7;j++){//горизонталь if(j-k+7*i<=N&&j-k+7*i>0){ myOLED. printNumI(j-k+7*i, j*18, i*11);} // if(j-k+7*i==D){ myOLED.drawCircle( j*18+6, i*11+4,8);} // } } dis_1(); //////////// Dn=time.weekday;if(Dn==0){Dn=7;}//день недели определяем и переводим в интервал 1-7 if(Dn==1){ myOLED.print("GJYTLTKMYBR", 30, 20);} // название дня недели if(Dn==2){ myOLED.print(" DNJHYBR", 30, 20);} if(Dn==3){ myOLED.print(" CHTLF", 30, 20);} if(Dn==4){ myOLED.print(" XTNDTHU", 30, 20);} if(Dn==5){ myOLED.print(" GZNYBWF", 30, 20);} if(Dn==6){ myOLED.print(" CE,,JNF", 30, 20);} if(Dn==7){ myOLED.print("DJCRHTCTYMT", 30, 20);} if(time.month==1){ myOLED.print("ZYDFHZ", 60, 40);}//название месяца if(time.month==2){ myOLED.print("ATDHFKZ", 60, 40);} if(time.month==3){ myOLED.print("VFHNF", 60, 40);} if(time.month==4){ myOLED.print("FGHTKZ", 60, 40);} if(time.month==5){ myOLED.print("VFZ", 60, 40);} if(time.month==6){ myOLED.print("B.YZ", 60, 40);} if(time.month==7){ myOLED.print("B.KZ", 60, 40);} if(time.month==8){ myOLED.print("FDUECNF", 60, 40);} if(time.month==9){ myOLED.print("CTYNZ,HZ", 60, 40);} if(time.month==10){ myOLED.print("JRNZ,HZ", 60, 40);} if(time.month==11){ myOLED.print("YJZ,HZ", 60, 40);} if(time.month==12){ myOLED.print("LTRF,HZ", 60, 40);} myOLED.drawRoundRect(5, 5, 122, 59);//рамка dis_2(); } } ///////////////// ТЕМА 4 "ЛАКОНИЧНАЯ" ////////////////////////////////////////////// void fun_C() { //////////// time.gettime();// if(time.seconds==0 || PUSK){ if(time.Hours<10) {myOLED. printNumI(0,10,10);myOLED. printNumI(time.Hours,35,10);}else{myOLED. printNumI(time.Hours,10,10);}// myOLED.drawCircle( 66, 20, 3); myOLED.drawCircle( 66, 40, 3);//точки if(time.minutes<10) {myOLED. printNumI(0,75,10);myOLED. printNumI(time.minutes,100,10);}else{myOLED. printNumI(time.minutes,75,10);}// dis_2(); dis_1(); dis_3(); } } //////////////////////////////////////////////Добавил 4 тему и кнопку перебора тем, объединил в один скетч, почти 90 процентов памяти занял. Влезет ещё 1-2 темы :-)
Да, верно, наверное надо подумать об особой - праздничной теме, 1 апреля, день рождения владельцев или влюблённых день, или пятница 13.
В зависимости от выбранной темы потребляет конструкция 20-30мА. Можно и подумать о вариантах снижения потребления :-(
Периодическая сборка-разборка макета часов показала неожиданную досаду! Модуль часов реального времени, со вставленной литиевой батарейкой отстал от часов на ПК на 20 секунд за 40 суток! Как так?
То есть теперь надо как то изгаляться, писать 5 тему для возможности редактирования отображаемого времени - одной кнопкой. Больше кнопок добавлять не хочется и типов нажатий тоже. Как логику темы построить?
Может записать __TIME__? И сменить батарейку.
#include <iarduino_RTC.h> // Подключаем библиотеку iarduino_RTC watch(RTC_DS1307); // Объявляем объект watch для модуля на базе чипа DS1307 // // Определяем системное время: // Время загрузки скетча. const char* strM="JanFebMarAprMayJunJulAugSepOctNovDec"; // Определяем массив всех вариантов текстового представления текущего месяца. const char* sysT=__TIME__; // Получаем время компиляции скетча в формате "SS:MM:HH". const char* sysD=__DATE__; // Получаем дату компиляции скетча в формате "MMM:DD:YYYY", где МММ - текстовое представление текущего месяца, например: Jul. // Парсим полученные значения sysT и sysD в массив i: // Определяем массив «i» из 6 элементов типа int, содержащий следующие значения: секунды, минуты, часы, день, месяц и год компиляции скетча. const int i[6] {(sysT[6]-48)*10+(sysT[7]-48), (sysT[3]-48)*10+(sysT[4]-48), (sysT[0]-48)*10+(sysT[1]-48), (sysD[4]-48)*10+(sysD[5]-48), ((int)memmem(strM,36,sysD,3)+3-(int)&strM[0])/3, (sysD[9]-48)*10+(sysD[10]-48)}; // void setup() { Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта watch.begin(); // Инициируем RTC модуль watch.settime(i[0],i[1],i[2],i[3],i[4],i[5]); // Устанавливаем время в модуль: i[0] сек, i[1] мин, i[2] час, i[3] день, i[4] месяц, i[5] год, без указания дня недели. // watch.settime(i[0],i[1],i[2],i[3],i[4],i[5], 2); // Можно установить время с указанием дня недели, где последний параметр, это день недели (указывается вручную) в формате: 0-воскресенье, 1-понедельник, ... , 6-суббота. } void loop(){ if(millis()%1000==0){ // Если прошла 1 секунда Serial.println(watch.gettime("d-m-Y, H:i:s, D")); // Выводим время в монитор, одной строкой delay(2); // Приостанавливаем скетч на 2 мс. } }Я не нашёл подробное описание функции, только такой пример. Не совсем ясно, можно этот "тайм" вызывать при подключении к пк - по кнопке и переустанавливать время?
Делаю так.
uint8_t bcd_clock[CLOCK_SIZE]; //packed BCD static uint8_t conv2bcd(const char* p) { uint8_t v = 0; if (*p >= '0' && *p <= '9') v = *p - '0'; return (v << 4) | (*++p - '0'); } // Set the compiler's time: setClock(__DATE__, __TIME__); void setClock(const char* date, const char* time) { // sample input: date = "Dec 26 2009", time = "12:34:56" // clock[YEAR] = conv2bcd(date + 9); // Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec uint8_t m = 0x12; //wo case 'D' switch (date[0]) { case 'J': m = (date[1] == 'a') ? 1 : ((date[2] == 'n') ? 6 : 7); break; case 'F': m = 2; break; case 'A': m = date[2] == 'r' ? 4 : 8; break; case 'M': m = date[2] == 'r' ? 3 : 5; break; case 'S': m = 9; break; case 'O': m = 0x10; break; case 'N': m = 0x11; break; // case 'D': m = 0x12; break; } bcd_clock[YEAR] = conv2bcd(date + 9); bcd_clock[MONTH] = m; bcd_clock[DAY] = conv2bcd(date + 4); bcd_clock[HOUR] = conv2bcd(time); bcd_clock[MINUTE] = conv2bcd(time + 3); bcd_clock[SECOND] = conv2bcd(time + 6); bcd_clock[DAY_OF_WEAK] = CUR_DAY_OF_WEAK; ds1307Buf2Clock(bcd_clock); }какой функции не нашел, _TIME_ ? :)
Это не функция, это макрос, эта строчка при компиляции заменяется текущим временем компиляции.
Из этого следует (для любого программиста очевидно :). что никак этот _TIME_ вызывать нельзя :) Точнее, вставить-то в функцию его можно, только время в нем будет всегда одно и тоже - время компиляции
Человеку как раз и надо ОДНАЖДЫ установить время.)
Человеку как раз и надо ОДНАЖДЫ установить время.)
судя по его вопросу - совсем нет, он хочет вызывать по кнопке - а значит многократно
можно этот "тайм" вызывать при подключении к пк - по кнопке и переустанавливать время?
Иногда делал установку из терминала, типа: 2109261127.)
Как бы, можно написать программулину на ПК, которая бы слала системное время в ком-порт. Но её ведь ещё и запускать надо.
Понял ваши объяснения. Просто думал, функция библиотеки это - послал запрос: получил ответ:-)
Тогда, как вариант, но делать не буду :-) послал время со смартфона через блютуз. Так я уже делал, надо поискать и вспомнить, а вот с кнопкой одной ещё не пробовал.
Тогда, как вариант, но делать не буду :-) послал время со смартфона через блютуз.
тогда уж просто коррекцию времени по сети через есп8266 - не дороже БТ, но много функциональнее
Нее, из схемы выходить не хочу, одна кнопка и всё :-)
Была мысль по совету Григория из 14 поста - прикрутить пьезоизлучатель, чтоб в нужный день играть "хеппи бёздей туюю", но... нет.
Нее, из схемы выходить не хочу, одна кнопка и всё :-)
Так и одной кнопкой можно делать установку. Не очень удобно, но можно. Не так это часто требуется.
Вот я и спрашиваю как логику работы сделать?, имея возможность только нажатий (без коротких и длинных). С ходу в голове не придумывается сценарий.
Как это без "коротких и длинных"?
if(digitalRead (7)==LOW){//если нажата кнопка 7 вывода TEMA++;if(TEMA==4){TEMA=0;} if(TEMA==0){ myOLED.setFont(BigZif_0_9); tschasi();} if(TEMA==1){PUSK = true;myOLED.setFont(RusFont);fun_();PUSK = false;} if(TEMA==2){PUSK = true;myOLED.setFont(RusFont);fun_B();PUSK = false;} if(TEMA==3){PUSK = true;myOLED.setFont(MegaNumbers);fun_C();PUSK = false;} delay(50); }Вот так примерно.
А словами никак? ТЕМА, tschasi, PUSK... Ужос!
Длинное нажатие - следующая цифра, короткое - крутим по кругу. 2х2.
:-)
В этой кнопке всё просто: короткое нажатие - переход на следующую тему, долгое нажатие - переходы на следующие темы, нажатие просто - закольцованный переход между темами. Теперь в эту гармонию надо добавить 5-ю тему, а в неё надо вставить ещё одну гармонию, только перебирающую-выставляющую новое значение времени. Делов то :-), только как оптимально сделать?
Ну, между темами вы же как то переходите. А теперь нужно вставить в 5-й теме вход в настройки. Ну, а дальше я уже расписал.
С одной кнопкой, обычно определяются короткие, длинные и очень длинные нажатия. Как вариант. В некоторых случаях двойные нажатия, на любителя.
Доп значки на дисплей в каком режиме находишься.
Ну это уже user friendly интерфейс.)
Доп значки на дисплей в каком режиме находишься.
Да, весь трёхглазый дисплей думаю задействовать для отображения процесса в теме " №5 установка времени".
Пока выдумывается такой сценарий: при очередном нажатии кнопки переходим в тему 5 - экран соответственно рисуется, далее ожидание-таймер на 5-10 сек. Если нажимаем кнопку до срабатывания, то переходим вновь к теме №1, иначе запускается процедура установки нового значения времени... Дальше пока не придумал.
Вы это людЯм объясните. То бишь, вы должны думать со стороны конечного пользователя, что бы ИМ было удобно, в первую очередь.
Вы это людЯм объясните. То бишь, вы должны думать со стороны конечного пользователя, что бы ИМ было удобно, в первую очередь.
Это да, так как библиотека iarduino_RTC от царя-гороха чуток поправил, чтобы можно было добавлять через менеджер библиотек ZIP файлом. Здесь же и библиотеку OLED_I2C форкнул и чуток поправил, заменил файл шрифтов и в коде явные логические ошибки.
Теперь обе можно поставить через менеджер библиотек подключив скачанные ZIP файлы.
Но осталось еще очень много предупреждений, помогайте, что еще там надо поправить?
Компиляция скетча... "C:\\Users\\User\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\User\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\cores\\arduino" "-IC:\\Users\\User\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\variants\\eightanaloginputs" "-IC:\\Users\\User\\Documents\\Arduino\\libraries\\OLED_I2C-master" "-IC:\\Users\\User\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\libraries\\SPI\\src" "-IC:\\Users\\User\\Documents\\Arduino\\libraries\\iarduino_RTC-master\\src" "C:\\temp\\arduino_build_952248\\sketch\\CHASY_SSD1303-Multi.ino.cpp" -o "C:\\temp\\arduino_build_952248\\sketch\\CHASY_SSD1303-Multi.ino.cpp.o" C:\Users\User\Documents\Arduino\2021\ALL\CHASY_SSD1303-Multi\CHASY_SSD1303-Multi.ino: In function 'void loop()': C:\Users\User\Documents\Arduino\2021\ALL\CHASY_SSD1303-Multi\CHASY_SSD1303-Multi.ino:52:33: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] String cmd1 = time.gettime("H"); int K = cmd1.substring(0, 1).toInt(); myOLED. printNumI(K, 0, 0); //десятки часов ^ C:\Users\User\Documents\Arduino\2021\ALL\CHASY_SSD1303-Multi\CHASY_SSD1303-Multi.ino:57:26: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] cmd1 = time.gettime("i"); K = cmd1.substring(0, 1).toInt(); myOLED. printNumI(K, 0, 0); //десятки минут ^ C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp: In member function 'char* iarduino_RTC::gettime(char*)': C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp:44:47: warning: array subscript has type 'char' [-Wchar-subscripts] default: RTC_char_RETURN[RTC_uint_RETURN]=RTC_enter_string[RTC_var_I]; RTC_uint_RETURN++; ^ C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp:46:38: warning: array subscript has type 'char' [-Wchar-subscripts] } RTC_char_RETURN[RTC_uint_RETURN]='\0'; ^ C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp: In member function 'void iarduino_RTC::gettime()': C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp:58:41: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] void iarduino_RTC::gettime(){gettime("");} ^ C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp: In member function 'void iarduino_RTC::RTC_func_FILL_RESULTS(uint8_t, uint8_t)': C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp:167:62: warning: array subscript has type 'char' [-Wchar-subscripts] /* 4 знака */ case 0: RTC_char_RETURN[RTC_uint_RETURN]=(RTC_uint_CENTURY-1)/10+48; RTC_uint_RETURN++; RTC_char_RETURN[RTC_uint_RETURN]=(RTC_uint_CENTURY-1)%10+48; RTC_uint_RETURN++; RTC_char_RETURN[RTC_uint_RETURN]=RTC_data/10+48; RTC_uint_RETURN++; RTC_char_RETURN[RTC_uint_RETURN]=RTC_data%10+48; RTC_uint_RETURN++; break; ^ C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp:167:142: warning: array subscript has type 'char' [-Wchar-subscripts] /* 4 знака */ case 0: RTC_char_RETURN[RTC_uint_RETURN]=(RTC_uint_CENTURY-1)/10+48; RTC_uint_RETURN++; RTC_char_RETURN[RTC_uint_RETURN]=(RTC_uint_CENTURY-1)%10+48; RTC_uint_RETURN++; RTC_char_RETURN[RTC_uint_RETURN]=RTC_data/10+48; RTC_uint_RETURN++; RTC_char_RETURN[RTC_uint_RETURN]=RTC_data%10+48; RTC_uint_RETURN++; break; ^ C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp:167:222: warning: array subscript has type 'char' [-Wchar-subscripts] /* 4 знака */ case 0: RTC_char_RETURN[RTC_uint_RETURN]=(RTC_uint_CENTURY-1)/10+48; RTC_uint_RETURN++; RTC_char_RETURN[RTC_uint_RETURN]=(RTC_uint_CENTURY-1)%10+48; RTC_uint_RETURN++; RTC_char_RETURN[RTC_uint_RETURN]=RTC_data/10+48; RTC_uint_RETURN++; RTC_char_RETURN[RTC_uint_RETURN]=RTC_data%10+48; RTC_uint_RETURN++; break; ^ C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp:167:290: warning: array subscript has type 'char' [-Wchar-subscripts] /* 4 знака */ case 0: RTC_char_RETURN[RTC_uint_RETURN]=(RTC_uint_CENTURY-1)/10+48; RTC_uint_RETURN++; RTC_char_RETURN[RTC_uint_RETURN]=(RTC_uint_CENTURY-1)%10+48; RTC_uint_RETURN++; RTC_char_RETURN[RTC_uint_RETURN]=RTC_data/10+48; RTC_uint_RETURN++; RTC_char_RETURN[RTC_uint_RETURN]=RTC_data%10+48; RTC_uint_RETURN++; break; ^ C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp:168:60: warning: array subscript has type 'char' [-Wchar-subscripts] /* 1 знак */ case 1: RTC_char_RETURN[RTC_uint_RETURN]=RTC_data+48; RTC_uint_RETURN++; break; ^ C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp:169:62: warning: array subscript has type 'char' [-Wchar-subscripts] /* 2 знака */ case 2: RTC_char_RETURN[RTC_uint_RETURN]=RTC_data/10+48; RTC_uint_RETURN++; RTC_char_RETURN[RTC_uint_RETURN]=RTC_data%10+48; RTC_uint_RETURN++; break; ^ C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp:169:130: warning: array subscript has type 'char' [-Wchar-subscripts] /* 2 знака */ case 2: RTC_char_RETURN[RTC_uint_RETURN]=RTC_data/10+48; RTC_uint_RETURN++; RTC_char_RETURN[RTC_uint_RETURN]=RTC_data%10+48; RTC_uint_RETURN++; break; ^ C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp:170:96: warning: array subscript has type 'char' [-Wchar-subscripts] /* AM / PM */ case 3: if(RTC_data< 4){for(int i=0; i<2; i++){RTC_char_RETURN[RTC_uint_RETURN]=RTC_char_MIDDAY[RTC_data][i]; RTC_uint_RETURN++;}} break; ^ C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp:171:102: warning: array subscript has type 'char' [-Wchar-subscripts] /* дн / мес */ case 4: if(RTC_data<19){for(int i=0; i<3; i++){RTC_char_RETURN[RTC_uint_RETURN]=RTC_char_DayMon[RTC_data][i]; RTC_uint_RETURN++;}} break; ^ C:\Users\User\Documents\Arduino\libraries\iarduino_RTC-master\src\iarduino_RTC.cpp:172:94: warning: array subscript has type 'char' [-Wchar-subscripts] /* пробелы */ case 5: for(int i=0; i<RTC_data; i++){RTC_char_RETURN[RTC_uint_RETURN]=32; RTC_uint_RETURN++;} break; ^Теперь обе можно поставить через менеджер библиотек подключив скачанные ZIP файлы.
если библиотеки уже скачаны как ZIP - нафига еще менеджер? Кладешь в папку libraries и все
зачем нам это? Автор кода где? - пусть сам исправляет
lilik
Не думали заменить атмегу на esp8266? Тогда возможны 2 варианта по корректировке времени: либо периодический запрос NTP, либо простенькая веб-морда для настроек всего
Теперь обе можно поставить через менеджер библиотек подключив скачанные ZIP файлы.
если библиотеки уже скачаны как ZIP - нафига еще менеджер? Кладешь в папку libraries и все
зачем нам это? Автор кода где? - пусть сам исправляет
Троллишь?
Троллишь?
нет. Ни одну библиотеку в жизни не устанавливал через менеджер. Скачать Zip архивом проще
"Ты меня не тролль, ты меня не тролль..." Нештатные библиотеки размещаю в папке со скетчем. Особенно актуально для глупых юзеров.)
Троллишь?
нет. Ни одну библиотеку в жизни не устанавливал через менеджер. Скачать Zip архивом проще
только при установке через менеджер он сразу сообщит, что библиотека кривая, не соответствует стандарту и не установит, а так да, "можно сделать защиту от дурака но не от изобретательного"
менеджер сразу сообщит, что библиотека кривая, не соответствует стандарту и не установит
фигасе...
а нахера мне это надо, чтобы менеджер за меня решал, какие либы устанавливать, а какие нет?
и что такое "кривая либа" или "не соответвует стандарту"? - ни разу такого не видел
менеджер сразу сообщит, что библиотека кривая, не соответствует стандарту и не установит
фигасе...
а нахера мне это надо, чтобы менеджер за меня решал, какие либы устанавливать, а какие нет?
и что такое "кривая либа" или "не соответвует стандарту"? - ни разу такого не видел
видимо ПАТАМУШТА не писал библиотек, а вот DetSimen пришлось, я ему мозг немного повыносил и даже не налил, каюсь )))
видимо ПАТАМУШТА не писал библиотек, а вот DetSimen пришлось
Чесноговоря, мне абсолютно пох на то, встанет биб-ка в эту убогую IDE или нет, я ей не пользуюсь. Ты сам потом всякие keywords вставлял и прочую шнягу для "менеджера"
Чесноговоря, мне абсолютно пох на то, встанет биб-ка в эту убогую IDE или нет, я ей не пользуюсь. Ты сам потом всякие keywords вставлял и прочую шнягу для "менеджера"
думаю юзеры перебьются и без keywords... пусть сначала сами научаться писать либы. а потом претензии предъявляют :)
видимо ПАТАМУШТА не писал библиотек, а вот DetSimen пришлось
Чесноговоря, мне абсолютно пох на то, встанет биб-ка в эту убогую IDE или нет, я ей не пользуюсь. Ты сам потом всякие keywords вставлял и прочую шнягу для "менеджера"
было дело )))
PS а вот как собрать своё ядро на ГИТхабе по фэншую - не дошло, не в те папки IDE размещает