(UNO)赤外線距離センサーGP2Y0A21YKで遊ぶ(漢字16)(配列化)






x 過去ログを見よ
x 軽量高速化、みやすさ重視

目的
adcのテスト用
赤外線距離センターを使い距離を測る。
浮動小数点を使わなくしたので処理が軽くなった。
20cm以降は、精度が出ないので思い切って精度を下げた。
6cmから20cmまでは、mm精度。
20cmから80cmまでは、cm精度。
電圧は、mV。
距離は、mm。

どうしてこうなったかは、6-10,10-20,20-80を参考

結果


![o_coq314.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/39b0b7e5-8437-c4c6-ce44-69c70646cfdc.jpeg)



プログラム


```c++


//秋月のOLEDとアイテンドウのOLEDのアドレスは3C
//SSD1306_cpp16x16_no_vram_ir_length_UNO_1
//ver 1 115ms
//ver 2  95ms if文を付けて速くした
//ver 3  89ms 漢字の読み込みを工夫した
//ver 4  63ms 選択を工夫した

//インクルド
#include <Arduino.h>
#include <Wire.h>
#include "kanji1.h"
#include <avr/pgmspace.h> //UNO


//定義(ir_length)
//80-20
unsigned char qq[] = {
  80, 78, 77, 76, 75, 75, 74, 73, 72, 71,
  70, 69, 68, 68, 67, 66, 65, 65, 64, 63,
  63, 62, 61, 61, 60, 60, 59, 58, 58, 57,
  57, 56, 56, 55, 55, 54, 54, 53, 53, 52,
  52, 51, 51, 50, 50, 50, 49, 49, 48, 48,
  47, 47, 47, 46, 46, 46, 45, 45, 45, 44,
  44, 44, 43, 43, 43, 42, 42, 42, 41, 41,
  41, 41, 40, 40, 40, 40, 39, 39, 39, 38,
  38, 38, 38, 37, 37, 37, 37, 37, 36, 36,
  36, 36, 35, 35, 35, 35, 35, 34, 34, 34,
  34, 34, 33, 33, 33, 33, 33, 32, 32, 32,
  32, 32, 32, 31, 31, 31, 31, 31, 31, 30,
  30, 30, 30, 30, 30, 30, 29, 29, 29, 29,
  29, 29, 28, 28, 28, 28, 28, 28, 28, 28,
  27, 27, 27, 27, 27, 27, 27, 27, 26, 26,
  26, 26, 26, 26, 26, 26, 25, 25, 25, 25,
  25, 25, 25, 25, 25, 25, 24, 24, 24, 24,
  24, 24, 24, 24, 24, 24, 23, 23, 23, 23,
  23, 23, 23, 23, 23, 23, 22, 22, 22, 22,
  22, 22, 22, 22, 22, 22, 22, 22, 21, 21,
  21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
  21, 20, 20, 20, 20, 20, 20, 20, 20, 20,
  20, 20, 20, 20, 20, 20
};

//20-10
unsigned char pp[] = {
  200, 199, 198, 197, 196, 196, 195, 194, 193, 193,
  192, 191, 190, 190, 189, 188, 187, 187, 186, 185,
  185, 184, 183, 183, 182, 181, 181, 180, 179, 179,
  178, 177, 177, 176, 176, 175, 174, 174, 173, 173,
  172, 171, 171, 170, 170, 169, 168, 168, 167, 167,
  166, 166, 165, 165, 164, 163, 163, 162, 162, 161,
  161, 160, 160, 159, 159, 158, 158, 157, 157, 156,
  156, 155, 155, 154, 154, 153, 153, 152, 152, 151,
  151, 151, 150, 150, 149, 149, 148, 148, 147, 147,
  147, 146, 146, 145, 145, 144, 144, 144, 143, 143,
  142, 142, 142, 141, 141, 140, 140, 140, 139, 139,
  138, 138, 138, 137, 137, 136, 136, 136, 135, 135,
  135, 134, 134, 134, 133, 133, 132, 132, 132, 131,
  131, 131, 130, 130, 130, 129, 129, 129, 128, 128,
  128, 127, 127, 127, 126, 126, 126, 125, 125, 125,
  125, 124, 124, 124, 123, 123, 123, 122, 122, 122,
  121, 121, 121, 121, 120, 120, 120, 119, 119, 119,
  119, 118, 118, 118, 117, 117, 117, 117, 116, 116,
  116, 116, 115, 115, 115, 114, 114, 114, 114, 113,
  113, 113, 113, 112, 112, 112, 112, 111, 111, 111,
  111, 110, 110, 110, 110, 109, 109, 109, 109, 108,
  108, 108, 108, 107, 107, 107, 107, 107, 106, 106,
  106, 106, 105, 105, 105, 105, 105, 104, 104, 104,
  104, 103, 103, 103, 103, 103, 102, 102, 102, 102,
  102, 101, 101, 101, 101, 101, 100, 100, 100, 100,
  100
};

//10-6
unsigned char oo[] = {
  100, 99, 98, 98, 97, 97, 96, 96, 95, 95,
  94, 94, 93, 93, 92, 92, 91, 91, 90, 90,
  90, 89, 89, 88, 88, 87, 87, 86, 86, 86,
  85, 85, 84, 84, 84, 83, 83, 82, 82, 82,
  81, 81, 81, 80, 80, 80, 79, 79, 78, 78,
  77, 77, 76, 76, 75, 75, 74, 74, 74, 73,
  73, 72, 72, 71, 71, 71, 70, 70, 69, 69,
  68, 67, 66, 66, 65, 64, 63, 63, 62, 61,
  61, 60, 60
};

//赤外線距離センサー(GP2Y0A21YK)の電圧から距離を求める。
//Voltage //電圧
int ir_len_i(int Voltage)
{

  int ir_length;   //長さ

  if ( Voltage < 400 ) {
    
    //400まで
    return (800);
    
  } else if  ( Voltage < 1300 ) { //80-20
    
    //400から1300
    ir_length = (int)qq[(Voltage - 400) >> 2];
    ir_length = ir_length * 10;
    return (ir_length);//戻り値
    
  } else if ( Voltage < 2300 ) { //20-10
    
    //1300から2300
    ir_length = (int)pp[(Voltage - 1300) >> 2];
    return (ir_length);//戻り値
    
  } else if ( Voltage < 3120  ) { //10-6
    
    // 2300から3120
    //ir_length = (int)oo[(Voltage - 2300) / 10];
    ir_length = (int)oo[((long)(Voltage - 2300) * 205L) >> 11]; //10の割り算
    return (ir_length);//戻り値
    
  } else {
    
    //3120以降
    return (60);
    
  }//end if

} //ir_le_i

//定義(SSD1306)
#define MAX_PAGE                   (7)
#define MAX_COL                    (127)

#define COMMAND_MODE               0x80 // continuation bit is set!
#define DATA_MODE                  0x40

#define SET_COLUMN_ADDRESS         0x21 // takes two bytes, start address and end address of display data RAM
#define SET_PAGE_ADDRESS           0x22 // takes two bytes, start address and end address of display data RAM

#define SET_MEMORY_ADDRESSING_MODE 0x20 // takes one byte as given above
#define HORIZONTAL_ADDRESSING_MODE 0x00


//I2Cに配列を転送する
void write_s(uint8_t *str1, uint8_t len1) {

  Wire.beginTransmission(  0x3c  );

  for (int ii = 0; ii < len1; ii++) {

    //一文字出力
    Wire.write(*str1 ++);

  }//for

  Wire.endTransmission();

}//write_s


//セットページアドレス
void setPageAddress(uint8_t start, uint8_t end)
{
  uint8_t databytes[6] = {COMMAND_MODE, SET_PAGE_ADDRESS, COMMAND_MODE, start, COMMAND_MODE, end};
  write_s(databytes, 6);
}//setPageAddress


//セットカラムアクセス
void setColumnAddress(uint8_t start, uint8_t end)
{
  uint8_t databytes[6] = {COMMAND_MODE, SET_COLUMN_ADDRESS, COMMAND_MODE, start, COMMAND_MODE, end};
  write_s(databytes, 6);
}//setColumnAddress


//セットメモリーアドレシングモード
void setMemoryAddressingMode()
{
  uint8_t databytes[4] = {COMMAND_MODE, SET_MEMORY_ADDRESSING_MODE, COMMAND_MODE, HORIZONTAL_ADDRESSING_MODE};
  write_s(databytes, 4);
}//setMemoryAddressingMode


//8バイト分まとめて出力
void put8byte(uint8_t qq) {

  //データの配列の定義
  static uint8_t databytes[9] = {DATA_MODE, 0, 0, 0, 0, 0, 0, 0, 0};

  static char byte_count = 1;

  databytes[byte_count++] = qq;

  if ( byte_count > 8 ) { //8バイト分、貯まったら
    write_s(databytes, 9);
    byte_count = 1;
  } // endif

} //put8byte


//ドットを打つ
void Dot(int x, int y, uint8_t c) {

  static uint8_t qq = 0; //一時

  qq = qq | ( c << (y & 0x07));

  if ( (y & 0x07) == 7 ) { //1バイト分、貯まったら
    put8byte(qq); qq = 0; //SSD1306に出力
  }//end if

}//DOt


//キャラクターRAMの内容
unsigned char st_p[4][8] = {
  //1    2    3    4    5    6    7    8
  {'N', 'o', '_', 'V', 'R', 'A', 'M', '.'  }, //1
  {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'  }, //2
  {'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'  }, //3
  {'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b'  }  //4
};

//再表示
void display(void) {

  char y; char x; char y1; char y2;
  int ch; unsigned int a; unsigned int p;

  //範囲の設定 (OLED内部のx,yカウンターを初期化してホームポジション0,0に)
  setPageAddress(0, MAX_PAGE);  // all pages
  setColumnAddress(0, MAX_COL); // all columns

  for (int ii = 0; ii < 8192; ii++) {

    //SSD1306のバッファーの配置順のxとyを求める
    //y =  ((ii & 0b0001110000000000 ) >> 7) + (ii & 0b0111);
    y2   =  (char)(ii       &     0b0111);
    if ( y2 == 0 ) {
      y1 =  (char)(ii >> 7) & 0b00111000;
      //x =   (ii & 0b0000001111111000)  >> 3;
      x = (char)(ii >> 3) & 0b1111111;
    }//endif y2
    y = y1 | y2;

    //↓開始　16ビット漢字のメイン処理
    if ((ii & 0x7f) == 0) {
      ch = (st_p[y >> 4][x >> 4] - ' ') << 4; //キャラクターRAMから漢字を求める
    }//endif ii
    if ((y & 0x07) == 0) {//シフトパターンを求める
      p = 0x8000 >> (x & 0x0f);
    }//endif y
    //座標と漢字からキャラクターパターンを求める
    a = p & pgm_read_word_near(ch_data7 + ch + (y & 0x0f));
    //↑終了

    if (a != 0) {
      Dot(x, y, 1); //白のドットを打つ
    } else {
      Dot(x, y, 0); //黒のドットを打つ
    }//end if

  }//for ii

}//display


//SSD1306の初期化
void display_begin(void) {

  //I2Cの初期化
  Wire.begin(); //M5Stamp S3
  delay(200);
  //Wire.setClock(2000000); //速度の変更 (I2C高速化 2Mhz) 493ms
  //Wire.setClock(1000000); //速度の変更 (I2C高速化 1Mhz) 125ms
  Wire.setClock(800000);  //速度の変更 (I2C高速化 800khz) 125ms
  //Wire.setClock(400000);  //速度の変更 (I2C高速化 400khz) 137ms
  //Wire.setClock(200000);  //速度の変更 (I2C高速化 200khz) 166ms
  //Wire.setClock(100000);  //速度の変更 (I2C高速化 100khz) 226ms
  delay(200);

  //SSD1306の初期化スペル(魔法)
  //0x80,0x8D,0x80,0x14,0x80,0xAF
  write_s( (uint8_t*) "\200\215\200\024\200\257", 6);
  delay(100);

  //セットメモリーアドレシングモード (画面の終端に来たら画面の先頭に)
  setMemoryAddressingMode();

}//display_begin


unsigned char *lop = st_p[0];

int kanji16_printf(char* fmt, ...) {
  char buff[256];
  va_list args;
  va_start(args, fmt);
  int return_status = vsnprintf(buff, sizeof(buff), fmt, args);
  va_end(args);
  char *s = buff;

  while ( (*s) != 0 ) {
    (*lop++) = (*s++);
  }//while

  return return_status;
}//ns_printf


void kanji16_locate(int x, int y) {

  lop = &(st_p[y][x]);

}//kanji16_locate


void kinji16_cls(void) {
  //0
  st_p[0][0] = ' '; st_p[0][1] = ' '; st_p[0][2] = ' '; st_p[0][3] = ' ';
  st_p[0][4] = ' '; st_p[0][5] = ' '; st_p[0][6] = ' '; st_p[0][7] = ' ';
  //1
  st_p[1][0] = ' '; st_p[1][1] = ' '; st_p[1][2] = ' '; st_p[1][3] = ' ';
  st_p[1][4] = ' '; st_p[1][5] = ' '; st_p[1][6] = ' '; st_p[1][7] = ' ';
  //2
  st_p[2][0] = ' '; st_p[2][1] = ' '; st_p[2][2] = ' '; st_p[2][3] = ' ';
  st_p[2][4] = ' '; st_p[2][5] = ' '; st_p[2][6] = ' '; st_p[2][7] = ' ';
  //3
  st_p[3][0] = ' '; st_p[3][1] = ' '; st_p[3][2] = ' '; st_p[3][3] = ' ';
  st_p[3][4] = ' '; st_p[3][5] = ' '; st_p[3][6] = ' '; st_p[3][7] = ' ';
}//kinji16_cls


//初期化
void setup() {

  //SSD1306の初期化
  display_begin();
  
}//setup


//メインループ
void loop() {

  int          sensorValue; //センサーの読み取り値
  unsigned int Voltage;     //電圧
  int          ir_length;   //長さ

  //赤外線距離センサーから値を読み込む
  sensorValue = analogRead(A0); //UNO

  //センサーの値から電圧に変換(x39.0625/8)
  //sensorValue = 1000; //debug 約5V    60mm
  //sensorValue =  750; //debug 約3.75V 60mm
  //sensorValue =  500; //debug 約2.5V  92mm
  //sensorValue =  250; //debug 約1.25V 210mm
  //sensorValue =    0; //debug 0V      800mm
  Voltage = sensorValue;
  Voltage = ((Voltage * 39U) + (Voltage >> 4)) >> 3;

  //赤外線距離センサー(GP2Y0A21YK)の電圧から距離を求める。
  ir_length = ir_len_i(Voltage);

  //距離の表示
  kinji16_cls();
  kanji16_locate(0, 0);kanji16_printf("ir-");
  kanji16_locate(0, 1);kanji16_printf("  length");
  kanji16_locate(0, 3);kanji16_printf("[%4dmm]",ir_length);
  
  display(); //再表示
  delay(1000); //1秒待つ

}//loop



```

kanji1.h


```



//漢字ROM
const int ch_data7[] PROGMEM = {

0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //' '
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
0x0000, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, //!
0x0100, 0x0100, 0x0000, 0x0000, 0x0100, 0x0100, 0x0100, 0x0000, 

0x0000, 0x0120, 0x0240, 0x0480, 0x0900, 0x0000, 0x0000, 0x0000, // "
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
0x0000, 0x0000, 0x0440, 0x0440, 0x0440, 0x1ff0, 0x0440, 0x0440, // #
0x0440, 0x0440, 0x1ff0, 0x0440, 0x0440, 0x0440, 0x0440, 0x0000, 
0x0000, 0x0100, 0x0380, 0x0540, 0x0920, 0x0900, 0x0500, 0x0380, // $
0x0140, 0x0120, 0x0120, 0x0920, 0x0540, 0x0380, 0x0100, 0x0000, 

0x0000, 0x0000, 0x0000, 0x1810, 0x1820, 0x0040, 0x0080, 0x0100, // %
0x0200, 0x0400, 0x0830, 0x1030, 0x0000, 0x0000, 0x0000, 0x0000, 

0x0000, 0x0700, 0x0880, 0x0840, 0x0840, 0x0880, 0x0500, 0x0600, // &
0x0a00, 0x1108, 0x1090, 0x10a0, 0x1040, 0x08a0, 0x0710, 0x0000, 
0x0000, 0x0300, 0x0300, 0x0100, 0x0200, 0x0000, 0x0000, 0x0000, // '
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 

0x0000, 0x0080, 0x0100, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, //(
0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0100, 0x0080, 0x0000, 
0x0000, 0x0200, 0x0100, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, //)
0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0100, 0x0200, 0x0000, 
0x0000, 0x0000, 0x0000, 0x1010, 0x0820, 0x0440, 0x0280, 0x0100, //*
0x0280, 0x0440, 0x0820, 0x1010, 0x0000, 0x0000, 0x0000, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0100, 0x0100, 0x0100, 0x0100, 0x1ff0, //+
0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180, 0x0200, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1ff0, //-
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //.
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0300, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, // /
0x0200, 0x0400, 0x0800, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 

0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x3008, 0x2808, 0x2608, //0
0x2108, 0x20c8, 0x2028, 0x2018, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x0100, 0x0300, 0x0500, 0x0900, 0x0100, 0x0100, 0x0100, //1
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 
0x0000, 0x0fe0, 0x1010, 0x2010, 0x2008, 0x0008, 0x0010, 0x0010, //2
0x00e0, 0x0300, 0x0400, 0x0800, 0x1000, 0x2000, 0x3ff8, 0x0000, 
0x0000, 0x0fe0, 0x1010, 0x2010, 0x2008, 0x0008, 0x0010, 0x03e0, //3
0x0010, 0x0008, 0x0008, 0x2008, 0x2010, 0x1010, 0x0fe0, 0x0000, 
0x0000, 0x0030, 0x0050, 0x0090, 0x0110, 0x0210, 0x0410, 0x0810, //4
0x1010, 0x2010, 0x3ffc, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 
0x0000, 0x3ff8, 0x2000, 0x2000, 0x2000, 0x2000, 0x3fc0, 0x0020, //5
0x0010, 0x0008, 0x0008, 0x0008, 0x2010, 0x1020, 0x0fc0, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2000, 0x2000, 0x27c0, 0x2820, //6
0x3010, 0x2008, 0x2008, 0x2008, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x1ff8, 0x0008, 0x0008, 0x0010, 0x0010, 0x0020, 0x0020, //7
0x0040, 0x0040, 0x0040, 0x0080, 0x0080, 0x0100, 0x0100, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x2008, 0x1010, 0x0fe0, //8
0x1010, 0x2008, 0x2008, 0x2008, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x2008, 0x2008, 0x1018, //9
0x0828, 0x07c8, 0x0008, 0x0008, 0x1010, 0x0820, 0x07c0, 0x0000,
0x0000, 0x0000, 0x0100, 0x0100, 0x0100, 0x0000, 0x0000, 0x0000, //:
0x0000, 0x0000, 0x0100, 0x0100, 0x0100, 0x0000, 0x0000, 0x0000, 

0x0000, 0x0000, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 0x0000, // ;
0x0000, 0x0100, 0x0100, 0x0100, 0x0100, 0x0200, 0x0400, 0x0000, 

0x0000, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, //<
0x0400, 0x0200, 0x0100, 0x0080, 0x0040, 0x0020, 0x0000, 0x0000, 

0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1ff0, 0x0000, // =
0x0000, 0x1ff0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 

0x0000, 0x0800, 0x0400, 0x0200, 0x0100, 0x0080, 0x0040, 0x0020, //>
0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x0000, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x1010, 0x1010, 0x0010, 0x0020, //?
0x01c0, 0x0100, 0x0100, 0x0100, 0x0000, 0x0100, 0x0100, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2788, 0x2448, 0x2428, 0x2428, //@
0x2428, 0x2428, 0x2428, 0x2428, 0x13f8, 0x0800, 0x07e0, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x2008, 0x2008, 0x2008, //A
0x3ff8, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x0000, 
0x0000, 0x3fc0, 0x2020, 0x2010, 0x2008, 0x2010, 0x2020, 0x3fc0, //B
0x2020, 0x2010, 0x2008, 0x2008, 0x2010, 0x2020, 0x3fc0, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x2008, 0x2000, 0x2000, //C
0x2000, 0x2000, 0x2008, 0x2008, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x3fc0, 0x2020, 0x2010, 0x2008, 0x2008, 0x2008, 0x2008, //D
0x2008, 0x2008, 0x2008, 0x2008, 0x2010, 0x2020, 0x3fc0, 0x0000, 
0x0000, 0x3ff8, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x3fe0, //E
0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x3ff8, 0x0000, 
0x0000, 0x3ff8, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x3fe0, //F
0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x2008, 0x2000, 0x2000, //G
0x20f8, 0x2008, 0x2008, 0x2008, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x3ff8, //H
0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x0000, 
0x0000, 0x1ff0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, //I
0x0100, 0x0100, 0x0100, 0x0100, 0x1ff0, 0x0000, 0x0000, 0x0000, 
0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, //J
0x0008, 0x2008, 0x2008, 0x2008, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x2008, 0x2030, 0x2040, 0x2180, 0x2200, 0x2c00, 0x3000, //K
0x2800, 0x2600, 0x2100, 0x2080, 0x2060, 0x2010, 0x2008, 0x0000, 
0x0000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, //L
0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x3ff8, 0x0000, 
0x0000, 0x2008, 0x3018, 0x2828, 0x2448, 0x2288, 0x2108, 0x2008, //M
0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x0000, 
0x0000, 0x2008, 0x3008, 0x2808, 0x2808, 0x2408, 0x2208, 0x2108, //N
0x2108, 0x2088, 0x2048, 0x2028, 0x2028, 0x2018, 0x2008, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x2008, 0x2008, 0x2008, //O
0x2008, 0x2008, 0x2008, 0x2008, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x3fc0, 0x2020, 0x2010, 0x2008, 0x2008, 0x2010, 0x2020, //P
0x3fc0, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x2008, 0x2008, 0x2008, //Q
0x2008, 0x2008, 0x2088, 0x2048, 0x1028, 0x0810, 0x07e8, 0x0000, 
0x0000, 0x3fc0, 0x2020, 0x2010, 0x2008, 0x2008, 0x2010, 0x2020, //R
0x3fc0, 0x2080, 0x2040, 0x2040, 0x2020, 0x2020, 0x2010, 0x0000, 
0x0000, 0x0fe0, 0x1010, 0x2000, 0x2000, 0x2000, 0x1000, 0x0fe0, //S
0x0010, 0x0008, 0x0008, 0x0008, 0x1008, 0x0810, 0x07e0, 0x0000, 
0x0000, 0x3ff8, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, //T
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 
0x0000, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, //U
0x2008, 0x2008, 0x2008, 0x2008, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, //V
0x2008, 0x2008, 0x1010, 0x0820, 0x0440, 0x0280, 0x0100, 0x0000, 
0x0000, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, //W
0x2008, 0x2108, 0x2288, 0x2448, 0x2828, 0x3018, 0x2008, 0x0000, 
0x0000, 0x0000, 0x2008, 0x2008, 0x1010, 0x0820, 0x0440, 0x0280, //X
0x0100, 0x0280, 0x0440, 0x0820, 0x1010, 0x2008, 0x2008, 0x0000, 
0x0000, 0x2008, 0x1010, 0x0820, 0x0440, 0x0280, 0x0100, 0x0100, //Y
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 
0x0000, 0xfff8, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, //Z
0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0xfff8, 0x0000, 0x0000, 

0x0000, 0x0380, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, // [
0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0380, 0x0000, 
0x0000, 0x1010, 0x0820, 0x0440, 0x0280, 0x0100, 0x0100, 0x0fe0, // ￥
0x0100, 0x0100, 0x0fe0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 
0x0000, 0x0380, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, // ]
0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0380, 0x0000, 
0x0000, 0x0100, 0x0280, 0x0440, 0x0820, 0x0000, 0x0000, 0x0000, // ^
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 

0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //_
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1ff8, 0x0000, 

0x0000, 0x0400, 0x0200, 0x0100, 0x0080, 0x0040, 0x0000, 0x0000, // `
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 

0x0000, 0x0000, 0x0000, 0x0fc0, 0x0020, 0x0010, 0x0010, 0x07d0, //a
0x0830, 0x1010, 0x1010, 0x1010, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x0000, 0x1000, 0x1000, 0x1000, 0x1000, 0x17c0, 0x1820, //b
0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1020, 0x1fc0, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07c0, 0x0820, //c
0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x0000, 0x0010, 0x0010, 0x0010, 0x0010, 0x07d0, 0x0830, //d
0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0810, 0x07f0, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07c0, 0x0820, //e
0x1010, 0x1010, 0x1ff0, 0x1000, 0x1000, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x01c0, 0x0200, 0x0200, 0x0400, 0x0400, 0x1fc0, 0x0400, //f
0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0000, 
0x0000, 0x0000, 0x0000, 0x07c0, 0x0820, 0x1010, 0x1010, 0x1010, //g
0x1010, 0x1010, 0x0830, 0x07d0, 0x0010, 0x0020, 0x0fc0, 0x0000, 
0x0000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, //h
0x1fc0, 0x1020, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0000, 
0x0000, 0x0100, 0x0100, 0x0100, 0x0000, 0x0000, 0x0100, 0x0100, //i
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 
0x0000, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, //j
0x0010, 0x0010, 0x0010, 0x1010, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x1000, 0x1000, 0x1000, 0x1040, 0x1080, 0x1100, 0x1200, //k
0x1400, 0x1800, 0x1400, 0x1200, 0x1100, 0x1080, 0x1040, 0x0000, 
0x0000, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, //l
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3fe0, 0x2110, //m
0x2108, 0x2108, 0x2108, 0x2108, 0x2108, 0x2108, 0x2108, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1fc0, 0x1020, //n
0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07c0, 0x0820, //o
0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07c0, 0x0820, 0x1010, //p
0x1010, 0x1010, 0x1010, 0x1010, 0x1820, 0x17c0, 0x1000, 0x1000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07c0, 0x0820, 0x1010, //q
0x1010, 0x1010, 0x1010, 0x1010, 0x0830, 0x07d0, 0x0010, 0x0010, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x17c0, 0x1820, //r
0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x07e0, 0x0800, 0x1000, 0x1000, //s
0x0800, 0x07c0, 0x0020, 0x0010, 0x0010, 0x0020, 0x0fc0, 0x0000, 
0x0000, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x1fe0, 0x0200, //t
0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x01c0, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x1010, 0x1010, 0x1010, 0x1010, //u
0x1010, 0x1010, 0x1010, 0x1010, 0x0810, 0x0410, 0x03f0, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x1010, 0x1010, 0x1010, 0x1010, //v
0x1010, 0x1010, 0x1010, 0x0820, 0x0440, 0x0280, 0x0100, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x2008, 0x2008, 0x2008, 0x2008, //w
0x2008, 0x2108, 0x2288, 0x2448, 0x2828, 0x3018, 0x2008, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x2008, 0x1010, 0x0820, 0x0440, //x
0x0280, 0x0100, 0x0280, 0x0440, 0x0820, 0x1010, 0x2008, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x1010, 0x1010, 0x1010, 0x1010, //y
0x0820, 0x0440, 0x0280, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1ff0, 0x0020, //z
0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1ff0, 0x0000, 

0x0000, 0x0080, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0200, // {
0x0200, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0080, 0x0000, 
0x0000, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, // |
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 
0x0000, 0x0200, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0080, // }
0x0080, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0200, 0x0000, 
0x0000, 0x0220, 0x0540, 0x0880, 0x0000, 0x0000, 0x0000, 0x0000, // ~
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
0x0000, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, //■
0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc 


};


```