(16/10/06)ということで、自力で数値をchar型配列に変換し出力する方法を説明します。char型の説明のために一回u8glibを離れ、Serial.printについて話します。順を追って細かく説明していくので、分かっていたら飛ばしてください。文字列についてASCIIコードSerial.printでは意識しなくても、文字列だろうと数値だろうと正常に表示してくれます。{Serial.println(txt);Serial.println(val);Serial.println();delay(1000);}txtはchar型、valはbyte型の整数です。txtには”(シングルクォーテーション)でくくった文字としての’5’を代入していますが、どちらも5が表示されます。当たり前のように見えるかもしれないですが、これは便宜を図って変換してくれているからこうなります。CastSerial.println((byte)txt);9Serial.println((byte)txt);txtを整数として表すと「53」と出るようになります。これは’5’という文字がASCIIコードのリストでは53番目であるということを示しています。リストを見ると「文字」の列にある5の横は「10進法」の53になってますよね。逆に、char型のtxtに数字の53を入れると「5」が文字として表示されます。「数」と、実際割り当てられている文字としての「数値」は違うということです。これが分かると、「じゃ、そうやって変換すればu8glibでも数値を表せるんじゃないか」と思っちゃうんですが、もうひとつ問題があります。u8g.draw.Str()関数で扱えるのは文字列だけ。一応自分の中では「文字は1文字、文字列は複数の文字の団体」という棲み分けをしてます。文字列は配列で扱えます。通常の変数は1つで1データしか入らないのを、配列ではいくつかのデータをひとつのセットとして扱えます。端的に言えばグループ化です。つけて何個の配列かを指定し、個々のデータを代入するだけです。することで本来1文字づつ表現しないといけないものを1つの単語として扱えるようになります。{Serial.println(txt);delay(1000);}最後のnullとはヌル文字、または終端文字と呼ばれているもので、char型の配列では必要不可欠な要素です。“Hello”が5文字なのに[6]個作っているのは、ヌル文字用の箱を最後に置かなければいけないからです。このように、個数と中に入るデータをきっちり最初に指定していれば、null文字は自動的に入ってくれます。逆に、null文字分を忘れて箱数が少ないと書き込みでエラーになりますので、気をつけてください。番号を指定すれば、その箱のデータだけを扱えます。}8Serial.println(txt[1]);”Hello”の2番目の’e’だけ抜き出せたりします。気をつけないといけないのは、箱の数は6個だけど箱のカウントは0から、っていうことです。間違えたり混乱するので、気をつけてください。いうことで、u8glibで数値を表示するための準備は整いました。数値をChar型配列に変換して表示する上記の話を踏まえ、まず可変抵抗器の値1桁分の数値を表示してみます。(u8g.nextPage());}文字列num[2]を用意し、0番の箱へvol_valの1の位の値を代入します。この時ポイントなのが、まず、vol_valを10で割った余りだけにしていることです。これで1の位だけが抜き出せます。次にその数値を’0’に足していることです。分からないかもしれないですが、’0’から’9’はASCIIコードの数字では順当に並んでいます。53ASCIIコードで確認すれば10進法の53は文字で数字の5。1桁の数値なら文字の’0’に直接足してやれば、その分のシフトで事足ります。結果、Char型への変換になるという算段です。後はこれを発展させて4桁分行えば、数値をディスプレイに表示できます。(u8g.nextPage());}vol_valのそれぞれの位を1桁に落としてnum配列にはめ込んでいくだけです。これでようやく数値表示を達成できました。織り交ぜて且つ、なるべく簡素化したスケッチを書いてみます。(u8g.nextPage());}defineのDEGを変えれば4桁以上も表示できます。値より大きい位に’0’がつかないようにしてみました。良ければ自分に合った形に改良して使ってください。これでu8glibでOLEDが何となく使えるようになったかと思います。u8glibには他にも関数がたくさんあります。次回は自分が使う機能を軸に紹介してみたいと思います。コメントデータの処理方法の詳細はこちらをご覧ください。よるトラフィックデータの収集が行われています。この収集に関しては「匿名」であり、個人情報を特定するものではありません。Amazonアソシエイツ”による広告掲載においても、cookieによるトラフィックデータの収集が行われます。プライバシー規約をご覧下さい。