• 4

Arduino 使用 1602 IIC(I2C) LCD 點陣液晶模組

剛剛組裝的顯示模組
執行arduino內建的顯示程式
模組只會出現這樣的畫面
請問這是模組問題還是程式的問題
上傳過程的編譯未出現異常訊息

Arduino 使用 1602 IIC(I2C) LCD 點陣液晶模組
2015-11-21 16:14 發佈

swlin3223 wrote:
剛剛組裝的顯示模組...(恕刪)


這個是LCD模組沒有正確的驅動,

原因大概有2大類,

1.程式錯誤

2.接線錯誤


LCD模組接線跟程式有分4BIT介面或8BIT介面,

要確認你是哪種介面的接線,檢查接線

程式的I/O PORT的分配也要對應接線的PORT上.
越是親密的人 越需要你的尊重 ,尊重你的另一半 感情才能長長久久
他的驅動模組只有4個PIN....如圖
GND
VCC
SDA
SCL
連接到控制板是
GND接地
VCC接5v
SDA接a4
SCL接a5

swlin3223 wrote:
他的驅動模組只有4...(恕刪)


你這個LCD模組是有I2C轉接板的,

走的也是I2C的接線,不是一般並列4BIT或8BIT的介面,

ARDUINO內建的LCD驅動程式應該也有支援I2C的介面,

要確認你的LCD驅動程式是並列還是I2C介面的.

最好是把你的程式碼貼出來.


也可以Google ARDUINO LCM1602 I2C 或ARDUINO LCM1602 IIC,

看看別人程式是怎麼寫的.
越是親密的人 越需要你的尊重 ,尊重你的另一半 感情才能長長久久
Arduino有很多模組需要有相關的Library來驅動與執行相關功能。
你這片是很常見的 I2C介面1602 LCD,Arduino範例的LiquidCrystal
library 無法驅動 I2C介面類型的1602 LCD。

買這類模組前先問問賣家有沒有提供相關驅動與範例程式,
可以縮短摸索學習的時間至少有範例可以驅動測試東西是否正常,
不然找不到驅動就變成沒用的東西了。


你的問題是
1. 接線錯了: LCD的 SDA、SCL 應該要接Arduino的SDA、SCL接腳。
(請看我照片中的白黃線位置,白線SDA接腳,黃線SCL接腳)





2. 沒有用到對的Library來驅動。 ( 這片1602 LCD 可以下載我附件中的Library驅動 )

安裝到Arduino軟體後,範例中就會多一個LiquidCrystal_I2C 1602V1,
裡面的範例就可以驅動這片I2C 1602 LCD。

如果你對Arduino操作與電子相關概念還不熟悉,建議可以買"超圖解Arduino互動設計入門"
這本書來看,這本書的內容由淺入深講解的很清楚。




附加壓縮檔: 201511/mobile01-05f2c92a4765fc4dc4c33abd8ab3e100.zip
#include <LiquidCrystal.h>
#define RS 2
#define E 3
#define D4 4
#define D5 5
#define D6 6
#define D7 7

LiquidCrystal lcd(RS,E,D4,D5,D6,D7); //建立 LCD 物件

void setup() { //初始設定 (一次性)
lcd.begin(16,2); //定義 LCD 為 2 列 16 行顯示器
lcd.clear(); //清除螢幕
lcd.setCursor(0,0); //游標移到左上角
lcd.print("Hello World!"); //在第一列印出 Hello World!
}

void loop() { //無限迴圈
lcd.setCursor(0,1); //游標移到第 2 列第 1 行
lcd.print(millis()/1000); //印出秒數
}
安裝後進行編譯
出現異常訊息..............如圖


swlin3223 wrote:
剛剛組裝的顯示模組...(恕刪)

#include <LiquidCrystal.h>
#define RS 2
#define E 3
#define D4 4
#define D5 5
#define D6 6
#define D7 7

LiquidCrystal lcd(RS,E,D4,D5,D6,D7); //建立 LCD 物件

void setup() { //初始設定 (一次性)
lcd.begin(16,2); //定義 LCD 為 2 列 16 行顯示器
lcd.clear(); //清除螢幕
lcd.setCursor(0,0); //游標移到左上角
lcd.print("Hello World!"); //在第一列印出 Hello World!
}

void loop() { //無限迴圈
lcd.setCursor(0,1); //游標移到第 2 列第 1 行
lcd.print(millis()/1000); //印出秒數
}
這是我原來的上傳
接線如下圖


swlin3223 wrote:
#include <LiquidCrys...(恕刪)


你這一段程式碼比較像是用 1602 原本的連接埠,但是你現用了有加上 I2C 轉接的 1602,程式庫應該要換一下

估狗了一下,找到一段可能的範例,供參考

#include <LiquidCrystal_I2C.h>

// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // 設定 LCD I2C 位址


I2C 界面還要設定 device 的位置,才能正常通訊,可以估狗 ardunio liquidcrystal_i2c 就有一些相關資料可以參考了。
swlin3223 wrote:
安裝後進行編譯
出現異常訊息..............如圖


你這是Library沒正確安裝

LiquidCrystal_I2c 就是驅動這片I2C LCD的函式庫

顯示 'LiquidCrystal_I2c' dose not name a type 表示
Arduino IDE 不認識這個函式而預設認為這是使用者自定變數,
才會出現變數未宣告類型的警告。

搜尋一下你Arduino的Library目錄在什麼位置,
Windows預設值會安裝在 媒體櫃>文件>Arduino>Library 這個目錄。

我給你的檔案解壓縮後,裡面的子目錄放在 Arduino\Library這個目錄下。
裡面應該要有這些檔案




你的接線我查了一下腳位應該沒有問題,
Arduino 的SCL與A5相通,SDA與A4相通,即使不接在原本的SCL與SDA上,
接在A4、A5也是一樣的功能。

你這片I2C LCD只要正確安裝Library是簡單就可以應用的


以下程式碼中會定義包含LiquidCrystal_I2C.h 函式來使用這片LCD,
市場上賣的這片LCD其 I2C定址基本上都是0x27 也不用改。
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);

最後在void setup() 中, 以 lcd.init(); 初始化這片LCD

用lcd.print("Hello, world!"); 就可以顯示文字了。
  • 4
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?