I2C接続キャラクタLCDモジュール用の関数を作る(4)数値を表示する
■文字列として数値をLCDに表示する
INT型の変数は16ビット、2バイトのデータでLCDに表示する場合は、
32,768 から ‐32,767 |
と5桁以上に数字で表現することになります。
Serial.print()関数やLiquidCrystalライブラリのlcd.print()関数は、数値をもつ変数を引数として渡すと、その値を示す数字の文字列として表示します。
●I2C接続キャラクタLCDモジュールに数値を表示する
前回まで作成したLCDモジュールへの表示関数は、バイト単位の文字コードをLCDモジュールに書き込んでいます。そのため、数値を表示するためには数値変数の値を表示する数字の文字列に変換する必要があります。
◆文字列のオブジェクトStringを使用して文字列に変換
数値をその値を示す文字列に変換する機能が、文字列のオブジェクトStringに備わっています。今回はこのオブジェクトの文字列Stringを利用して、数値変数の値をLCDモジュールに表示する関数を作ります。
◆Stringオブジェクトの中で今回利用する機能と使い方
今回利用するStringオブジェクトは、このオブジェクトにまつわるメソッド(ファンクション)が24種類もあり、文字列に関するたいていの処理が行えます。すべての説明はここではできませんので、今回実際に使用するメソッドについての説明を手順に従い行います。
◆オブジェクトのインスタンス
このString型のオブジェクトを利用するために、最初に次のようにインスタンス(実体)を作成します。
String strData; // インスタンス strData を定義する String strData=“String DATA”; //インスタンスを定義、生成し文字列String DATAで初期化する String strData=String(“String DATA”); //インスタンスを定義、生成し、文字列String DATAのオブジェクトで初期化する String strData=String(ndata, DEC); //インスタンスを定義、生成し、数値変数の値を10進数表示で文字列に変換し その文字列で初期化する String strData=String(ndata, HEX); //インスタンスを定義、生成し、数値変数の値を16進数表示で文字列に変換し その文字列で初期化する String strData=String(ndata, BIN); //インスタンスを定義、生成し、数値変数の値を2進数表示で文字列に変換し その文字列で初期化する String strData=String(nrdata, n); //インスタンスを定義、生成し、実数の変数nrdataの値を小数以下n桁表示で文字列に変換し その文字列で初期化する |
インスタンスの定義はString strData; で行われ、このオブジェクト変数strDataに代入する時点でインスタンスが実体としてメモリ上に展開されます。
◆メソッド
この文字列オブジェクトに対して、必要となる処理がメソッドとして用意されています。今回、LCDモジュールに表示するために文字列の先頭文字から1文字ずつ取り出すことが必要になります。その処理を何回繰り返せばよいかを知るために、文字列の文字数も知る必要があります。
●文字列を構成している文字を順番に取り出す方法
◆文字列の中の文字の位置を指定して文字を取り出す
次のような文字列を構成している文字を指定して取り出す方法が用意されています。
charAt(n) |
nは先頭の文字のアドレスが0で順番に1増加したアドレスが割り当てられています。最後の文字のアドレスは文字数をnとすると n-1となります。具体的には、文字列のオブジェクトのインスタンスがpdataとすると、次のようにファンクション(メソッド)を記述します。
char chdata=pdata.charAt(n); |
文字型の変数chdataに文字列pdataの(n+1)番目の文字が得られます。
https://www.arduino.cc/en/Reference/StringCharAt
◆文字列オブジェクトの文字数を知る方法
Arduinoの文字列オブジェクトの文字数は、ファンクション(メソッド)length()で得られます。具体的には、文字列オブジェクトのインスタンスがpdataとすると、
int len =pdata.length(); |
を実行すると、整数lenに文字列pdataの文字数が得られます。
https://www.arduino.cc/en/Reference/StringLength
●実際の文字列をLCDに表示する関数
前回までに作成したI2C接続キャラクタLCDモジュールに表示する関数に、次の関数を追加します。
i2cwritedata(pdata.charAt(i)); |
は、今まで作成した文字データを1文字分表示する関数i2cwritedata()の引数として、文字列pdataから順番に1文字ずつ取り出した文字を表示データとしてpdata.charAt(i)を渡しています。
void i2cprint( String pdata) { int n = pdata.length(); // 表示する文字列の文字数を調べている for (int i = 0; i < n; i = i + 1) { i2cwritedata(pdata.charAt(i)); } } |
この関数を前回のardlcd20050.insのプログラムに追加し、引数として”ABCDEF”の文字列を渡します。setup()関数の中で実行しています。
●実行結果
実行結果は次に示すように、文字列ABCDEFが表示されました。
次回は数値の表示を行います。
(2016/8/16 V1.1)
<神崎康宏>
(2016/8/21)「m桁」を「n桁」に修正。
String strData=String(nrdata, n);
//インスタンスを定義、生成し、実数の変数nrdataの値を小数以下m桁表示で文字列に変換し その文字列で初期化する