この記事は、@kjunichiの2018年パーソナルアドベントカレンダーの23日目の記事です。
日本にいるから?
の記事のBASICのコードをArduinoで実装しようとして、バックスラッシュのつもりで表示した \が¥マーク表示、ひょっとして、日本向けのArduinoなのか?と一瞬思ったが、いやいや、 英語マニュアルしかない製品だし、そんな訳ないかとなった。
独自ビットマップ文字を定義しないとダメみたい
どうやらバックスラッシュは英語圏だろうが、なんだろうがLCDに内蔵の文字パターンは¥マークが 割り当てられている模様。ちなみに、なぜか、カタカナもどこかのコードに割り当てられていた。
いくつか独自のキャラクタ定義が可能
lcd#createCharで、8個の独自の文字を定義できるので、これを利用することでバックスラッシュを 表示できるようにする。
uint8_t SpecialChar [8]= { 0x00, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00 }; void setup() { lcd.begin(16,2); // initialize the lcd for 16 chars 2 lines, turn on backlight lcd.backlight(); // finish with backlight on lcd.createChar(0, SpecialChar); }
と、定義して、
void loop() { lcd.write(0); }
といった感じで、文字列に埋め込んではうまく表示できなかった。 char型の配列を作って原始的に以下のように自作のコードでは実装してみた。
for(i=0;i<16;i++) { lcd.write(buf[i]); }
関連資料
Arduino - LiquidCrystalCreateChar