Arduino 小心得
LCD1602 驅動問題 (使用I2C轉板)
螢幕堪稱是Arduino的第二雙眼睛(第1是Serial Port Monitor)
重要性自不待言
發現新手通常會碰到無法點亮 一片空白 完全沒有顯示文字的窘態
通常老手一不小心 搞不好也會中箭落馬
本來想說這應該很好打發 不然去找網路賣家問問看
沒想到還是費了一番功夫
現在把偶的心得公告周知 進一份心力
1.
硬體接線OK, 軟體使用網路下載 但燒錄後完全無顯示.
這耍從2方面談起
a.背光有亮 (代表硬體接線OK 軟體也OK) 可能只須再調整對比旋奸紐即可
b.背光不亮
根據網路上的回覆 大部份都是說須將I2C的Slave地址由0x27改成0x3F 即可
但偶希望大家能夠"知其然"並且"知其所以然" (這個才是實事求是 追求真理)
經過比對電路圖與實體 原來圖面PCF8574 已改用PCF8574A
再看data sheet才明白 為何0x27要改成0x3F.(其中還有pull up電阻)
2.
僅顯示第一個字 如"Hello World!" 僅看到一個H
這很明顯是軟體不OK
如果對C++不熟的人 debug可能有點難度
好在有網路好心人回覆
a.使用前可以先i2c_scanner用這個程式測出正確的位址
http://playground.arduino.cc/Main/I2cScanner
b.使用正確的程式庫,並修正 LiquidCrystal_I2C.cpp裏面 return 0 的問題,改成return 1
參考 http://forum.arduino.cc/index.php?topic=361637.0
a.請自行參考
b.偶想講一個除錯概念
為什麼只顯示了一個"H"?
很明顯是印出H之後發生了問題 下面留給大家發想
While it shows up as an issue when using the recent IDE, it is not really an IDE issue.
And while the issue is due to an interaction between the Print class supplied with the newer 1.6.6 IDE package, the actual issue is in the i2c lcd library.
The library is incorrectly always returning an error status on the write() function but the older/previous Print class ignored the return status returned by write().
The Print class code supplied in the newer IDE's looks at the return status and stops sending characters down to the library write() function on an error.
That is why a single character works but anything that prints multiple characters only prints the 1st character.
It is an easy/simple fix 1 line fix in the library.
The write() function in the library needs to return 1 and not zero.
--- bill
留言列表