1/aug/2014 新規
1/aug/2014 更新
カナ LCD ライブラリの解説です。
基本的には LiquidCrystal ライブラリと互換になるようにしていますが、一部、違いがあります。
フォントサイズ | 対応する文字 | SJ1 の扱い | コメント |
5x8ドット | 185 文字(5x8ドット)+ユーザー定義の8文字 | SJ1 はオープン(open) | 5x10ドットのフォントは、下部が切れて表示されてしまいます。 |
5x10ドット | g,j,p,q,y の5文字+185 文字(5x8ドット)+ユーザー定義の4文字 | SJ1 はショート(short) | ※実際には液晶部は 5x11 ドット分あるが、一番下のラインはカーソル表示専用の模様(実機がないので未確認) |
SRAM 上の文字列 (書き換え可能) | プログラムメモリ上の文字列 (書き換え不可能) | |
通常の文字列 | char str[ ] = "カタカナ"; ※ SRAM を13バイト占有 | PROGMEM prog_char pstr[ ] = "カタカナ"; ※プログラムメモリを13バイト占有 |
ワイド文字列 | wchar_t wstr[ ] = L"カタカナ"; ※ SRAM を10バイト占有 | PROGMEM prog_wchar pwstr[ ] = L"カタカナ"; ※プログラムメモリを10バイト占有 |
SRAM 上の文字列 | プログラムメモリ上の文字列 | |
通常の文字列 | print (str) | print_P (pstr) |
ワイド文字列 | wprint (wstr) | wprint_P (pwstr) |
定義 | 値 | コメント |
KANALCD_MAX_CHARDEFS | 8 | ユーザー定義文字の最大値 |
KANALCD_MAX_ENCODING | 6 | サポートしている符号化方式の数 |
KANALCD_UTF16_BOM | L'\uFEFF' | Byte Order Mark |
定義 | 値 | コメント |
KANALCD_ENC_UTF8 | 0 | UTF-8 方式 : default |
KANALCD_ENC_UTF16 | 1 | UTF-16 方式 (BOM 自動判別) ※最初に KANALCD_UTF16_BOM を送信する必要あり |
KANALCD_ENC_UTF16BE | 2 | UTF-16 方式 (Big Endian 固定) |
KANALCD_ENC_UTF16LE | 3 | UTF-16 方式 (Little Endian 固定) |
KANALCD_ENC_SJIS | 4 | シフトJIS 方式 |
KANALCD_ENC_EUC_JP | 5 | EUC-JP 方式 |
定義 | 値 | コメント |
KANALCD_SM_80x1 | 0x00 | 80桁×1行, フォント5x8 ※本シールド裏面の SJ2 がショート、SJ1 がオープンの時は、強制的にこのモードになる |
KANALCD_SM_80x1L | 0x10 | 80桁×1行, フォント5x10 ※本シールド裏面の SJ2 がショート、SJ1 もショートの時は、強制的にこのモードになる |
KANALCD_SM_40x2 | 0x20 | 40桁×2行, フォント5x8 |
KANALCD_SM_8x4 | 0x30 | 8桁×4行, フォント5x8 |
KANALCD_SM_10x4 | 0x40 | 10桁×4行, フォント5x8 |
KANALCD_SM_16x4 | 0x50 | 16桁×4行, フォント5x8 |
KANALCD_SM_20x4 | 0x60 | 20桁×4行, フォント5x8 |
定義 | 値 | コメント |
KANALCD_ERR_NONE | 0 | 正常 |
KANALCD_ERR_TWI_BUFF_FULL | 1 | Wire ライブラリの送信バッファが一杯 |
KANALCD_ERR_TWI_ADDR_NACK | 2 | TWI アドレス送信で NACK が返ってきた |
KANALCD_ERR_TWI_DATA_NACK | 3 | TWI データ送信で NACK が返ってきた |
KANALCD_ERR_TWI_OTHER_ERR | 4 | Wire ライブラリのその他のエラー |
KANALCD_ERR_BUSY | 0xF0 | カナ LCD シールドが Busy なので、要求を処理できない |
KANALCD_ERR_TIME_OUT | 0xF1 | カナ LCD シールドとの通信がタイムアウトした |
KANALCD_ERR_INVALID_PARAM | 0xFB | 引数が不正 |
KANALCD_ERR_UNK_CMD | 0xFC | カナ LCD シールドでサポートしていないコマンド |
KANALCD_ERR_NOT_INIT | 0xFD | 初期化されていない |
KANALCD_ERR_UNKNOWN | 0xFF | 原因不明のエラーが発生した |
定義 | 型 | コメント |
errCode_t | uint8_t | エラーコード。KANALCD_ERR_xxx のいずれか。 ※ただの uint8_t と記述するよりも errCode_t と記述した方が、意味が明確になるから。 |
prog_char | char PROGMEM | プログラムメモリ上の文字 ※実際は avr/pgmspace.h で定義されています |
prog_wchar | wchar_t PROGMEM | プログラムメモリ上のワイド文字 ※avr/pgmspace.h で定義されている prog_char のワイド文字版 |
定義名 | 定義内容 | コメント |
PSTR(s) | (__extension__({static const char __c[ ] PROGMEM = (s); &__c[0];})) | プログラムメモリ上の文字列 ※実際は avr/pgmspace.h で定義されています。 C++ の標準仕様ではなく Arduino IDE の拡張機能 kanalcd.print(PSTR("文字列")); という風に使用します |
PWSTR(s) | (__extension__({static const wchar_t __c[ ] PROGMEM = (s); &__c[0];})) | プログラムメモリ上のワイド文字列 ※avr/pgmspace.h の PSTR 定義のワイド文字版 C++ の標準仕様ではなく Arduino IDE の拡張機能 kanalcd.wprint(PWSTR(L"文字列")); という風に使用します |
関数名 | 互換 | 戻り値 | パラメータ | コメント |
KanaLCD | 変更 | 無し | uint8_t twiAddr | コンストラクタ:カナ LCD シールドの TWI(i2c) アドレス値を指定する |
~KanaLCD | 無し | 無し | デストラクタ:現 Vesion では、特に何もしません | |
begin | 変更 | errCode_t | uint8_t cols, uint8_t rows, uint8_t enc = KANALCD_ENC_UTF8, uint8_t waitTime = 80 | カナ LCD シールドを初期化する。cols と rows は上記を参照。 正常に実行された場合は、画面クリア、カーソルと画面スクロールをホーム位置、進行方向:左から右、自動スクロールOFF、LCD 表示、カーソル非点滅、カーソル非表示、バックライト・ソフトOFF になる。 注意:カナ LCD シールドは電源ONした直後、80ms ほど待たないと TWI 通信が開始できない。waitTime はその待ち時間(ミリ秒)。デフォルト値は 80 だが、この関数を呼び出す前に、別の処理で例えば 20ms 待っていれば、その分を差っ引いた 60 にしても構わない。 |
end | errCode_t | 無し | 終了処理。通常呼び出す事は無いでしょう | |
clear | errCode_t | 無し | 画面をクリアし、カーソルと画面スクロールをホーム位置にする ※処理に約 1.72ms かかります | |
home | errCode_t | 無し | 画面はそのままで、カーソルと画面スクロールをホーム位置にする ※処理に約 1.72ms かかります | |
setCursor | errCode_t | uint8_t col, uint8_t row | カーソル位置を設定: col=0〜79, row=0〜3 の範囲で指定(実際は上記制約有り) | |
setEncoding | 追加 | errCode_t | uint8_t enc | カナ LCD シールドの符号化方式を変更する。何時でも変更できます。 KANALCD_ENC_xxx のいずれかを指定します。範囲外の値を指定した時は KANALCD_ERR_INVALID_PARAM エラーを返します。 |
noBlink | errCode_t | 無し | カーソル位置の文字を点滅させない | |
blink | errCode_t | 無し | カーソル位置の文字を点滅させる | |
noCursor | errCode_t | 無し | カーソルを表示させない | |
cursor | errCode_t | 無し | カーソルを表示させる | |
noDisplay | errCode_t | 無し | LCD を表示させない | |
display | errCode_t | 無し | LCD を表示させる | |
noBacklight | errCode_t | 無し | LCD バックライトを OFF させる ※シールド上の DIPSW3 で、バックライト強制 ON モードにしている場合は、当コマンドに関係無く、バックライト ON されます | |
backlight | errCode_t | 無し | LCD バックライトを ON させる ※シールド上の DIPSW3 で、バックライト強制 ON モードにしている場合は、当コマンドに関係無く、バックライト ON されます | |
scrollDisplayLeft | errCode_t | 無し | 表示内容は変更せずに、画面表示を1文字分だけ左スクロールさせる | |
scrollDisplayRight | errCode_t | 無し | 表示内容は変更せずに、画面表示を1文字分だけ右スクロールさせる | |
moveCursorLeft | 追加 | errCode_t | 無し | 表示内容は変更せずに、カーソルを1文字分だけ左移動させる |
moveCursorRight | 追加 | errCode_t | 無し | 表示内容は変更せずに、カーソルを1文字分だけ右移動させる |
leftToRight | errCode_t | 無し | 左から右へカーソルが進む:デフォルト | |
rightToLeft | errCode_t | 無し | 右から左へカーソルが進む | |
autoscroll | errCode_t | 無し | 自動スクロールさせる | |
noAutoscroll | errCode_t | 無し | 自動スクロールさせない:デフォルト | |
createChar | errCode_t | uint8_t index, const uint8_t font_data[8] | ユーザー定義文字フォント(5x8dots)を設定: index=0〜7 の範囲 | |
size_t | const __FlashStringHelper * ifsh | プログラムメモリ上の文字列を表示する? ※__FlashStringHelper を調べてみたのですが、これといった説明が見つかりませんでした。詳細不明です。 | ||
size_t | const String & s | s を表示する | ||
size_t | const char str[ ] | str を表示する | ||
size_t | char c | c を表示する | ||
size_t | unsigned char b, int base = DEC | b を base に従って表示する | ||
size_t | int n, int base = DEC | n を base に従って表示する | ||
size_t | unsigned int n, int base = DEC | n を base に従って表示する | ||
size_t | long n, int base = DEC | n を base に従って表示する | ||
size_t | unsigned long n, int base = DEC | n を base に従って表示する | ||
size_t | double n, int digits = 2 | n を digits の桁で表示する? | ||
size_t | const Printable & x | Printable 派生クラスの printTo メンバー関数を呼び出す | ||
println | size_t | 無し | 改行だけする | |
println | size_t | const __FlashStringHelper * ifsh | プログラムメモリ上の文字列を表示する?+改行処理 ※__FlashStringHelper を調べてみたのですが、これといった説明が見つかりませんでした。詳細不明です。 | |
println | size_t | const String & s | s を表示する+改行処理 | |
println | size_t | const char str[ ] | str を表示する+改行処理 | |
println | size_t | char c | c を表示する+改行処理 | |
println | size_t | unsigned char b, int base = DEC | b を base に従って表示する+改行処理 | |
println | size_t | int n, int base = DEC | n を base に従って表示する+改行処理 | |
println | size_t | unsigned int n, int base = DEC | n を base に従って表示する+改行処理 | |
println | size_t | long n, int base = DEC | n を base に従って表示する+改行処理 | |
println | size_t | unsigned long n, int base = DEC | n を base に従って表示する+改行処理 | |
println | size_t | double n, int digits = 2 | n を digits の桁で表示する?+改行処理 | |
println | size_t | const Printable & x | Printable 派生クラスの printTo メンバー関数を呼び出す+改行処理 | |
print_P | size_t | const prog_char * pstr | プログラムメモリ上の文字列を表示する | |
wprint | size_t | wchar_t wch | ワイド文字(UTF-16)を1文字表示する | |
wprint | size_t | const wchar_t * wstr | SRAM 上のワイド文字列(UTF-16)を表示する | |
wprint_P | size_t | const prog_wchar * pwstr | プログラムメモリ上のワイド文字列(UTF-16)を表示する | |
write | size_t | ... | print 関数から呼び出されます。通常、ユーザーが直接呼び出す事はありません | |
write_P | size_t | ... | print_P 関数から呼び出されます。通常、ユーザーが直接呼び出す事はありません | |
getStatus | 追加 | errCode_t | 無し | カナ LCD シールドの現在の状態を取得する ※カナ LCD シールドが Busy の場合、取得せずに KANALCD_ERR_BUSY エラーを返します |
getCursorCol | 追加 | uint8_t | 無し | 現在のカーソル Col 位置 : 0〜79 ※直前に getStatus 関数を呼び出し、KANALCD_ERR_NONE が返ってきたのを確認してから、呼び出してください |
getCursorRow | 追加 | uint8_t | 無し | 現在のカーソル Row 位置 : 0〜3 ※直前に getStatus 関数を呼び出し、KANALCD_ERR_NONE が返ってきたのを確認してから、呼び出してください |
getScreenMode | 追加 | uint8_t | 無し | 現在の画面モードの状態 : KANALCD_SM_xxx のいずれかの値 ※直前に getStatus 関数を呼び出し、KANALCD_ERR_NONE が返ってきたのを確認してから、呼び出してください |
getEncoding | 追加 | uint8_t | 無し | 現在の符号化方式の状態 : KANALCD_ENC_xxx のいずれかの値 ※直前に getStatus 関数を呼び出し、KANALCD_ERR_NONE が返ってきたのを確認してから、呼び出してください |
getLackedCode | 追加 | uint8_t | 無し | 文字コード欠乏状態:0=充足中, 1=欠乏中 ※直前に getStatus 関数を呼び出し、KANALCD_ERR_NONE が返ってきたのを確認してから、呼び出してください |
getBlink | 追加 | uint8_t | 無し | 現在の点滅の状態 : 0=OFF, 1=ON ※直前に getStatus 関数を呼び出し、KANALCD_ERR_NONE が返ってきたのを確認してから、呼び出してください |
getCursor | 追加 | uint8_t | 無し | 現在のカーソル表示の状態 : 0=OFF, 1=ON ※直前に getStatus 関数を呼び出し、KANALCD_ERR_NONE が返ってきたのを確認してから、呼び出してください |
getDisplay | 追加 | uint8_t | 無し | 現在の LCD 表示の状態 : 0=OFF, 1=ON ※直前に getStatus 関数を呼び出し、KANALCD_ERR_NONE が返ってきたのを確認してから、呼び出してください |
getCursorDir | 追加 | uint8_t | 無し | 現在のカーソル進行方向の状態 : 0=RtoL(右から左), 1=LtoR(左から右) ※直前に getStatus 関数を呼び出し、KANALCD_ERR_NONE が返ってきたのを確認してから、呼び出してください |
getAutoScroll | 追加 | uint8_t | 無し | 現在の自動スクロールの状態 : 0=OFF, 1=ON ※直前に getStatus 関数を呼び出し、KANALCD_ERR_NONE が返ってきたのを確認してから、呼び出してください |
getError | 追加 | uint8_t | 無し | 現在のカナ LCD シールドのエラーコード : KANALCD_ERR_xxx のいずれかの値 ※直前に getStatus 関数を呼び出し、KANALCD_ERR_NONE が返ってきたのを確認してから、呼び出してください |
getLeftSW | 追加 | uint8_t | 無し | 現在の左スイッチの状態 : 0=OFF, 1=ON ※約10ms間隔で更新されるので、それよりも短い間隔で読み出しても、同じ値しか読み出せません ※直前に getStatus 関数を呼び出し、KANALCD_ERR_NONE が返ってきたのを確認してから、呼び出してください |
getRightSW | 追加 | uint8_t | 無し | 現在の右スイッチの状態 : 0=OFF, 1=ON ※約10ms間隔で更新されるので、それよりも短い間隔で読み出しても、同じ値しか読み出せません ※直前に getStatus 関数を呼び出し、KANALCD_ERR_NONE が返ってきたのを確認してから、呼び出してください |
getBacklight | 追加 | uint8_t | 無し | 現在のバックライトの状態 : 0=OFF, 1=ON ※直前に getStatus 関数を呼び出し、KANALCD_ERR_NONE が返ってきたのを確認してから、呼び出してください |
getKlcdType | 追加 | uint8_t | 無し | カナ LCD シールドのタイプ: 常に "BS21LAB-015" を意味する 0x0F が返される |
getFirmVer | 追加 | uint8_t | 無し | カナ LCD シールドのファームウェアの Version 番号 (例: v1.2 の時は 0x12 になる) |
変数名 | 型 | コメント |
res | uint8_t | print 関数等でエラー発生時の詳細を知る為に使用できます |
関数名 | 戻り値 | パラメータ | コメント |
convertWCharToChar | size_t | char * buffer, const wchar_t * wstr | SRAM 上の UTF-16 文字列 wstr を、UTF-8 文字列 buffer に変換します。変換後のバイト数を返します。 |
convertWCharToChar_P | size_t | char * buffer, const prog_wchar * pwstr | プログラムメモリ上の UTF-16 文字列 pwstr を、UTF-8 文字列 buffer に変換します。変換後のバイト数を返します。 |