Arduino Với LCD 1602, LCD 2004 I2C

Các lỗi thường gặp khi sử dụng I2C LCD

  • Hiển thị một dãy ô vuông.
  • Màn hình chỉ in ra một ký tự đầu.
  • Màn hình nhấp nháy.

- Các lỗi này chủ yếu là do sai địa chỉ bus, để fix lỗi các bạn thay địa chỉ mặc định là “0x27” thành “0x3F.

- Trong trường hợp vẫn không được các bạn fix lỗi bằng cách nạp code tìm địa chỉ bus của I2C.

- Sau khi tìm xong các bạn thay địa chỉ vừa tìm được vào vị trí “0x27” là xong.

Địa chỉ I2C 0x27
Địa chỉ I2C 0x3F

Tìm địa chỉ I2C của LCD:

Mỗi thiết bị I2C đều có một địa chỉ duy nhất để Arduino có thể giao tiếp với nó. Thông thường, địa chỉ I2C của LCD 1602/2004 I2C là 0x27 hoặc 0x3F. Tuy nhiên, để chắc chắn, chúng ta cần chạy một đoạn code để quét các thiết bị I2C đang kết nối với Arduino.

  1. Mở Arduino IDE.
  2. Tạo một sketch mới (File > New).
  3. Sao chép và dán đoạn code sau vào:
// --------------------------------------
// i2c_scanner
// --------------------------------------

#include <Wire.h>

void setup() {
  Wire.begin();

  Serial.begin(9600);
  while (!Serial); // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}

void loop() {
  int nDevices = 0;

  Serial.println("Scanning...");

  for (byte address = 1; address < 127; ++address) {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    byte error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.print(address, HEX);
      Serial.println("  !");

      ++nDevices;
    } else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0) {
    Serial.println("No I2C devices found\n");
  } else {
    Serial.println("done\n");
  }
  delay(5000); // Wait 5 seconds for next scan
}

Giao tiếp I2C LCD Arduino

Sơ đồ đấu nối

Sơ đồ đấu nối giao tiếp IC2 với LCD 16×2.

Phần cứng cần thiết

Lập trình hiển thị trên LCD:

Chúng ta sẽ sử dụng thư viện LiquidCrystal_I2C để làm việc với LCD I2C. Nếu bạn chưa cài đặt thư viện này, hãy làm theo các bước sau:

  1. Trong Arduino IDE, đi đến Sketch > Include Library > Manage Libraries...
  2. Tìm kiếm "LiquidCrystal I2C" và cài đặt thư viện có tên là "LiquidCrystal_I2C" của Frank de Brabander.

Sau khi cài đặt thư viện, hãy tạo một sketch mới và dán đoạn code ví dụ sau vào, nhớ thay thế địa chỉ I2C (0x27 trong ví dụ) bằng địa chỉ mà bạn đã tìm được ở bước trên:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#define row 2
#define col 16
LiquidCrystal_I2C lcd(0x27,col, row); 

void setup()
{
  lcd.init();                    
  lcd.backlight();

}

void loop()
{ 
  // Hiển thị ký tự có mã ASCII từ 0 đến 255
  for (int i = 0; i < col; i++) {
    for (int j = 0; j < row; j++) {
      lcd.setCursor(i, j);
      lcd.write(255); // Ký tự có mã ASCII 255 thường hiển thị toàn bộ pixel
    }
  }
  delay(2000);
  lcd.clear();
    lcd.setCursor(3,0);
  lcd.print("0392100200");
  lcd.setCursor(0,1);
  lcd.print("Xin chao cac ban");
  delay(5000);
}

Mô phỏng

GND VCC SD A SC L

Giải thích code

  • #include <Wire.h>#include <LiquidCrystal_I2C.h>: Thêm thư viện cần thiết cho giao tiếp I2C và điều khiển LCD I2C.
  • #define row 2, #define col 16: Định nghĩa số hàng (2) và cột (16) của LCD.
  • LiquidCrystal_I2C lcd(0x27, col, row);: Khởi tạo đối tượng lcd để điều khiển LCD I2C tại địa chỉ 0x27.
  • void setup() { lcd.init(); lcd.backlight(); }: Hàm chạy một lần khi khởi động, khởi tạo và bật đèn nền LCD.
  • void loop() { ... }: Hàm lặp lại liên tục:
    • Hiển thị toàn bộ pixel trên màn hình bằng cách ghi ký tự có mã 255 vào mọi vị trí.
    • Dừng 5 giây.
    • Xóa màn hình.
    • Hiển thị "0392100200" ở hàng 1, cột 3.
    • Hiển thị "Xin chao cac ban" ở hàng 2, cột 1.
    • Dừng 5 giây.

Bây giờ thì các bạn upload chương trình và xem kết quả nhé.

Lưu ý quan trọng:

  • Đảm bảo bạn đã kết nối đúng các chân VCC, GND, SDA và SCL. Kết nối sai có thể làm hỏng LCD hoặc Arduino.
  • Kiểm tra kỹ địa chỉ I2C của LCD bằng cách sử dụng code quét địa chỉ.
  • Nếu màn hình không hiển thị gì, hãy kiểm tra lại kết nối, đảm bảo thư viện đã được cài đặt đúng và địa chỉ I2C trong code khớp với địa chỉ thực tế. Đôi khi, bạn cần điều chỉnh biến trở trên module I2C (nếu có) để điều chỉnh độ tương phản.

Nhận xét

Mới hơn Cũ hơn