Часы на ssd1306 (много)

lilik
Offline
Зарегистрирован: 19.10.2017

По запросу из темы

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(); // очищаем дисплей
}
/////////////////////////

 

 

Картина маслом.

 

 

lilik
Offline
Зарегистрирован: 19.10.2017

Запрос из 329 поста (забыл указать).

lilik
Offline
Зарегистрирован: 19.10.2017
#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 заменить на этот).

 

man_200
Offline
Зарегистрирован: 29.04.2016

Красивое решение!

Интересно, а с ILI9341 по SPI можно такое сотворить?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Сотворить можно все, что угодно. Более того, в случае цветного дисплея это сделать намного проще.

lilik
Offline
Зарегистрирован: 19.10.2017

///////////// ЧАСЫ НА 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();

}
///////////////

Вот вариант корпуса под готовую поделку - бомба.

man_200
Offline
Зарегистрирован: 29.04.2016

Токи потребления не смотрел?

lilik
Offline
Зарегистрирован: 19.10.2017

Смотрел, около 26-28 мА :-)

lilik
Offline
Зарегистрирован: 19.10.2017

///////////// ЧАСЫ-ШКАЛЫ НА 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?

 

Green
Offline
Зарегистрирован: 01.10.2015
Real-Time Clock Counts Seconds, Minutes, Hours,
Date of the Month, Month, Day of the Week, and
Year, with Leap-Year Compensation Valid Up to 2100
В некоторых Dallas-ах ещё был автопереход на летнее/зимнее время.
lilik
Offline
Зарегистрирован: 19.10.2017
time.settime(0,58,18,20,8,19,2);  // 0  сек, 58 мин, 18 час, 20, АВГУСТА, 2019 года, ВТОРНИК

Просто смутило, что в начальных настройках весь набор вводится. А если ввести с ошибкой данные они не пройдут, пройдут, но результаты будут с ошибкой?

 

Green
Offline
Зарегистрирован: 01.10.2015

А проверить? Насколько помню, введётся с ошибкой, но по ходу исправится на корректное значение.
Я именно о DS, а не о библиотеке.

lilik
Offline
Зарегистрирован: 19.10.2017

Понял. Но библиотека любая, по идее, просто выводит в переменных что ей дают, без программной обработки? 

lilik
Offline
Зарегистрирован: 19.10.2017

Добавил третью тему отображения данных из часов реального времени. А вот интересно функцию ниже можно использовать в 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();
 }
}

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Почему ж нельзя? Она просто пишет в регистры новые значения. Ей без разницы - из лупа или из майна.

Циклы и массивы строк (DOW/Month) придадут коду стройности.
Ещё можно в пятницу 13-го выводить жуткий циферблат, а 1-го апреля время отображать по рандомайзу.

lilik
Offline
Зарегистрирован: 19.10.2017



///////////// ЧАСЫ ТЕМАТИЧЕСКИЕ НА 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мА. Можно и подумать о вариантах снижения потребления :-(

 

lilik
Offline
Зарегистрирован: 19.10.2017

Периодическая сборка-разборка макета часов показала неожиданную досаду! Модуль часов реального времени, со вставленной литиевой батарейкой отстал от часов на ПК на 20 секунд за 40 суток! Как так?

То есть теперь надо как то изгаляться, писать 5 тему для возможности редактирования отображаемого времени - одной кнопкой. Больше кнопок добавлять не хочется и типов нажатий тоже. Как логику темы построить?  

Green
Offline
Зарегистрирован: 01.10.2015

Может записать __TIME__? И сменить батарейку.

lilik
Offline
Зарегистрирован: 19.10.2017
#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 мс.
    }
}

Я не нашёл подробное описание функции, только такой пример. Не совсем ясно, можно этот "тайм" вызывать при подключении к пк - по кнопке и переустанавливать время?

Green
Offline
Зарегистрирован: 01.10.2015

Делаю так.

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);
}


 

b707
Offline
Зарегистрирован: 26.05.2017

lilik пишет:
Я не нашёл подробное описание функции, только такой пример. Не совсем ясно, можно этот "тайм" вызывать при подключении к пк - по кнопке и переустанавливать время?

какой функции не нашел, _TIME_ ? :)

Это не функция, это макрос, эта строчка при компиляции заменяется текущим временем компиляции.

Из этого следует (для любого программиста очевидно :). что никак этот _TIME_ вызывать нельзя :) Точнее, вставить-то в функцию его можно, только время в нем будет всегда одно и тоже - время компиляции

Green
Offline
Зарегистрирован: 01.10.2015

Человеку как раз и надо ОДНАЖДЫ установить время.)

b707
Offline
Зарегистрирован: 26.05.2017

Green пишет:

Человеку как раз и надо ОДНАЖДЫ установить время.)

судя по его вопросу - совсем нет, он хочет вызывать по кнопке - а значит многократно

lilik пишет:

можно этот "тайм" вызывать при подключении к пк - по кнопке и переустанавливать время?

Green
Offline
Зарегистрирован: 01.10.2015

Иногда делал установку из терминала, типа: 2109261127.)

Green
Offline
Зарегистрирован: 01.10.2015

Как бы, можно написать программулину на ПК, которая бы слала системное время в ком-порт. Но её ведь ещё и запускать надо.

lilik
Offline
Зарегистрирован: 19.10.2017

Понял ваши объяснения. Просто думал, функция библиотеки это - послал запрос: получил ответ:-)

Тогда, как вариант, но делать не буду :-) послал время со смартфона через блютуз. Так я уже делал, надо поискать и вспомнить, а вот с кнопкой одной ещё не пробовал.

b707
Offline
Зарегистрирован: 26.05.2017

lilik пишет:

Тогда, как вариант, но делать не буду :-) послал время со смартфона через блютуз.

тогда уж просто коррекцию времени по сети через есп8266 - не дороже БТ, но много функциональнее

lilik
Offline
Зарегистрирован: 19.10.2017

Нее, из схемы выходить не хочу, одна кнопка и всё :-)

Была мысль по совету Григория из 14 поста - прикрутить пьезоизлучатель, чтоб в нужный день играть "хеппи бёздей туюю", но... нет.

Green
Offline
Зарегистрирован: 01.10.2015

lilik пишет:

Нее, из схемы выходить не хочу, одна кнопка и всё :-)


Так и одной кнопкой можно делать установку. Не очень удобно, но можно. Не так это часто требуется.

lilik
Offline
Зарегистрирован: 19.10.2017

Вот я и спрашиваю как логику работы сделать?, имея возможность только нажатий (без коротких и длинных). С ходу в голове не придумывается сценарий. 

Green
Offline
Зарегистрирован: 01.10.2015

Как это без "коротких и длинных"?

lilik
Offline
Зарегистрирован: 19.10.2017
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);
    }

Вот так примерно.

Green
Offline
Зарегистрирован: 01.10.2015

А словами никак? ТЕМА, tschasi, PUSK... Ужос!
Длинное нажатие - следующая цифра, короткое - крутим по кругу. 2х2.

lilik
Offline
Зарегистрирован: 19.10.2017

:-)

В этой кнопке всё просто: короткое нажатие - переход на следующую тему, долгое нажатие - переходы на следующие темы, нажатие просто - закольцованный переход между темами. Теперь в эту гармонию надо добавить 5-ю тему, а в неё надо вставить ещё одну гармонию, только перебирающую-выставляющую новое значение времени. Делов то :-), только как оптимально сделать?

Green
Offline
Зарегистрирован: 01.10.2015

Ну, между темами вы же как то переходите. А теперь нужно вставить в 5-й теме вход в настройки. Ну, а дальше я уже расписал.
С одной кнопкой, обычно определяются короткие, длинные и очень длинные нажатия. Как вариант. В некоторых случаях двойные нажатия, на любителя.

SAB
Онлайн
Зарегистрирован: 27.12.2016

Доп значки на дисплей в каком режиме находишься.

Green
Offline
Зарегистрирован: 01.10.2015

Ну это уже user friendly интерфейс.)

lilik
Offline
Зарегистрирован: 19.10.2017

SAB пишет:

Доп значки на дисплей в каком режиме находишься.

Да, весь трёхглазый дисплей думаю задействовать для отображения процесса в теме " №5 установка времени".

Пока выдумывается такой сценарий: при очередном нажатии кнопки переходим в тему 5 - экран соответственно рисуется, далее ожидание-таймер на 5-10 сек. Если нажимаем кнопку до срабатывания, то переходим вновь к теме №1, иначе запускается процедура установки нового значения времени... Дальше пока не придумал.

Green
Offline
Зарегистрирован: 01.10.2015

Вы это людЯм объясните. То бишь, вы должны думать со стороны конечного пользователя, что бы ИМ было удобно, в первую очередь.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Green пишет:

Вы это людЯм объясните. То бишь, вы должны думать со стороны конечного пользователя, что бы ИМ было удобно, в первую очередь.

Это да, так как библиотека 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;

                                                                                              ^

 

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

Теперь обе можно поставить через менеджер библиотек подключив  скачанные ZIP файлы.

если библиотеки уже скачаны как ZIP - нафига еще менеджер? Кладешь в папку libraries и все

Цитата:
Но осталось еще очень много предупреждений, помогайте, что еще там надо поправить?

зачем нам это? Автор кода где? - пусть сам исправляет

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

lilik

Не думали заменить атмегу на esp8266? Тогда возможны 2 варианта по корректировке времени: либо периодический запрос NTP, либо простенькая веб-морда для настроек всего

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

ua6em пишет:

Теперь обе можно поставить через менеджер библиотек подключив  скачанные ZIP файлы.

если библиотеки уже скачаны как ZIP - нафига еще менеджер? Кладешь в папку libraries и все

Цитата:
Но осталось еще очень много предупреждений, помогайте, что еще там надо поправить?

зачем нам это? Автор кода где? - пусть сам исправляет

Троллишь?

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

Троллишь?

нет. Ни одну библиотеку в жизни не устанавливал через менеджер. Скачать Zip архивом проще

Green
Offline
Зарегистрирован: 01.10.2015

"Ты меня не тролль, ты меня не тролль..." Нештатные библиотеки размещаю в папке со скетчем. Особенно актуально для глупых юзеров.)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

ua6em пишет:

Троллишь?

нет. Ни одну библиотеку в жизни не устанавливал через менеджер. Скачать Zip архивом проще

только при установке через менеджер он сразу сообщит, что библиотека кривая, не соответствует стандарту и не установит, а так да, "можно сделать защиту от дурака но не от изобретательного"

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

менеджер сразу сообщит, что библиотека кривая, не соответствует стандарту и не установит

фигасе...

а нахера мне это надо, чтобы менеджер за меня решал, какие либы устанавливать, а какие нет?

и что такое "кривая либа" или "не соответвует стандарту"? - ни разу такого не видел

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

ua6em пишет:

менеджер сразу сообщит, что библиотека кривая, не соответствует стандарту и не установит

фигасе...

а нахера мне это надо, чтобы менеджер за меня решал, какие либы устанавливать, а какие нет?

и что такое "кривая либа" или "не соответвует стандарту"? - ни разу такого не видел

видимо ПАТАМУШТА не писал библиотек, а вот DetSimen пришлось, я ему мозг немного повыносил и даже не налил, каюсь )))

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

ua6em пишет:

видимо ПАТАМУШТА не писал библиотек, а вот DetSimen пришлось

Чесноговоря, мне абсолютно пох на то, встанет биб-ка в эту убогую IDE или нет, я ей не пользуюсь.  Ты сам потом всякие keywords вставлял и прочую шнягу для "менеджера"

b707
Offline
Зарегистрирован: 26.05.2017

DetSimen пишет:

Чесноговоря, мне абсолютно пох на то, встанет биб-ка в эту убогую IDE или нет, я ей не пользуюсь.  Ты сам потом всякие keywords вставлял и прочую шнягу для "менеджера"

думаю юзеры перебьются и без keywords... пусть сначала сами научаться писать либы. а потом претензии предъявляют :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

ua6em пишет:

видимо ПАТАМУШТА не писал библиотек, а вот DetSimen пришлось

Чесноговоря, мне абсолютно пох на то, встанет биб-ка в эту убогую IDE или нет, я ей не пользуюсь.  Ты сам потом всякие keywords вставлял и прочую шнягу для "менеджера"

было дело )))
PS а вот как собрать своё ядро на ГИТхабе по фэншую - не дошло, не в те папки IDE размещает