【Arduino】[LCD] print()で文章を出力しても一文字目しか表示されない

Arduino を買って,全然時間なくて触れてないんですが,とりあえず,LCD(Liquid Crystal Display)もセットで購入したので”Hello World!”くらいやっとこうかと。なかなかよくできたキットで接続は簡単。

しかし,簡単サンプルのスクラッチをコンパイルしても思ったように表示されません。

サンプルには

で「Hello World!」が出るってのに僕のLCDには・・・

おい!一文字しかでてねえじゃねえか!!

というわけで,Google先生に相談です。

・・・でも,表示できないことに関する解決策はあるのですが,

一文字しか表示されない件の解決策は見当たらない。

ちなみに,最初は一文字しか表示されない原因は,print()の仕様かと思って一文字ずつしかでないならprint()を並べたらどうだろうと思い,こんな風にしてみてみました。

すると,ちゃんと“Hello!”と表示され,出力は期待したものになりました。

でも,これでは使い物にならないですよね。ラッパー書くのもなんだか香ばしいし・・・

って,思って検索したらやっぱり,ラッパー書いてる人もいたし・・・(;゜ロ゜)

 

しかたない,こういうときはやっぱりオフィシャルのフォーラムが一番ですよね。

ありました。「A problem with my liquidCrystal_I2C display」

というわけで,どうやらLiqudCrystal_I2C ライブラリのwrite() functionを修正する必要があるようです。

Forumによると,まずこの問題はArduino IDE1.6.6以降で確認されている問題なようです。しかし,問題の原因はIDEではなく,LiqudCrystal_I2Cライブラリに起因するらしい。

write() functionの返り値が正しくは”1″となるべきところが”0″になっているんだと。

んで,IDE 1.6.5以前ではそもそもwrite()の返り値を無視していたので問題が生じていなかっただけとのこと。それが新しいバージョンではきちんと返り値を見て,エラー(”0″)が返されていたら文字の送信を停止するのだとか。

print()で与えられた文字列をライブラリが一文字ずつ出力処理(write())をする際に一文字目の出力時の返り値が”0″になってしまっていてエラーとして処理されていた。

ということなんですね。こういうときのデバッグはどうしたらいいんだろう。エラーが生じていることが確認できればもう少し対処しやすいと思うんだけどな。

IDEの仕様など,まだ,ほぼ何も弄ってみてないのでさっぱりわからないことだらけです。デバッグ方法はできるだけ初期に身に付けておくことがセオリーですね。また時間を見つけて記事に出来ればと思います。

では,以下,今回の問題の対処法です。

ちなみに開発環境はMacですので,ディレクトリ構造などはMacのもので説明します。

■解決法:LiquidCrystal_I2Cライブラリの中のwrite()を書き換える。

① Arduino IDEにインストールされたライブラリは

「書類」->「Arduino」->「libraries」

の中に入っています。この中の「LiquidCrystal_I2C」->”LiquidCrystal_I2C.cpp”をテキストエディタで開きます。

② 10行目あたりにあるWrite.write(args)の返り値が以下のようになっていると思いますので,”1″を返すように書き直します。(return 0; のところです)

write()function

保存してIDEを再起動してコンパイルすれば完了です。

なんて簡単。でも,意外と日本語での解説がうまく見つからなかったのでメモしておきます。

lcd_succeed

ちなみに,Hello WorldのスクラッチはSampleそのままです。

(参考)

Arduino 公式サイト Forum

Umemoto 電子工作「I2C LCD モジュールの使い方」

okuzawatsの日記「Arduinoに新規ライブラリを追加する」

“【Arduino】[LCD] print()で文章を出力しても一文字目しか表示されない” への10件の返信

    1. おお!こんな辺境のブログを参考にしてくださる方がいたとは!!
      滅多に更新されない自己満足メモブログですが,少しでもお役に立てたなら幸いです。もっと人のお役に立てるような良記事をアップしていけるよう精進します!

    1. 僕自身、Arduino触る時間がとれなくて、続編を全然書けずですが、こんな拙いメモがお役に立てて幸いです!コメントありがとうございます!

  1. LiquidCrystal_I2C_PCF8574 というライブラリにも同様のbugがありました。
    解決法に従って、cpp ファイルを書き換えたところ、正しく表示されるようになりました。
    大変助かりました。ありがとうございました。

  2. いつの頃から一文字しか現れなくなってほっておいていました。
    鉄道模型コントロールをArduinoでやりたい一心でアッチこち調べていたら貴殿のHPに出会いました。以前、LCM1602(LiquidCrystal_I2C)が一文字しか映らないのは機器の故障だと思いほったらかしにしていましたらバグだったのね。小生これで生き返った心地です。とても助かりました。どうもありがとうございました。

    1. コメントいただきありがとうございます!
      やはりこの記事が一番世のためになっているようで,光栄です。
      なかなか忙しくて私自身Arduino触れてませんが,もっと有用なメモ記事書けるよう精進いたします!
      鉄道模型いいですね!!楽しみましょう!!

コメントを残す

メールアドレスが公開されることはありません。