- Vật liệu thiết yếu:
- Tìm hiểu về Mô-đun màn hình LCD TFT:
- Hiệu chỉnh màn hình LCD TFT cho màn hình cảm ứng:
- Kết nối màn hình LCD TFT với Arduino:
- Lập trình Arduino của bạn cho TFT LCD:
- Đang làm việc:
Arduino luôn giúp xây dựng các dự án một cách dễ dàng và làm cho chúng trông hấp dẫn hơn. Lập trình màn hình LCD với tùy chọn màn hình cảm ứng nghe có vẻ là một nhiệm vụ phức tạp, nhưng các thư viện và lá chắn Arduino đã làm cho nó thực sự dễ dàng. Trong dự án này, chúng tôi sẽ sử dụng màn hình LCD TFT 2,4 ”Arduino để xây dựng máy tính Màn hình cảm ứng Arduino của riêng chúng tôi có thể thực hiện tất cả các phép tính cơ bản như Phép cộng, Phép trừ, Phép chia và Phép nhân.
Vật liệu thiết yếu:
- Arduino Uno
- Tấm chắn màn hình TFT LCD 2,4 ”
- Pin 9V.
Tìm hiểu về Mô-đun màn hình LCD TFT:
Trước khi chúng tôi thực sự đi sâu vào dự án, điều quan trọng là phải biết, mô-đun LCD TFT 2,4 ”này hoạt động như thế nào và các loại có trong đó là gì. Chúng ta hãy cùng xem sơ đồ chân của mô-đun màn hình TFT LCD 2,4 ”này.
Như bạn có thể thấy, có 28 chân cắm sẽ hoàn toàn phù hợp với bất kỳ Bảng Arduino Uno / Arduino Mega nào. Một phân loại nhỏ của các chân này được đưa ra trong bảng dưới đây.
Như bạn có thể thấy, các chân có thể được phân loại theo bốn phân loại chính như Chân lệnh LCD, Chân dữ liệu LCD, Chân thẻ SD và Chân nguồn, Chúng ta không cần biết nhiều về hoạt động chi tiết của các chân này vì chúng sẽ được chăm sóc bởi Thư viện Arduino của chúng tôi.
Bạn cũng có thể tìm thấy một khe cắm thẻ SD ở cuối mô-đun được hiển thị ở trên, có thể được sử dụng để tải thẻ SD với các tệp hình ảnh bmp và những hình ảnh này có thể được hiển thị trên màn hình TFT LCD của chúng tôi bằng cách sử dụng Chương trình Arduino.
Một điều quan trọng cần lưu ý là IC giao diện của bạn. Có rất nhiều loại mô-đun TFT có sẵn trên thị trường, bắt đầu từ mô-đun TFT LCD Adafruit chính hãng cho đến hàng nhái giá rẻ của Trung Quốc. Một chương trình hoạt động hoàn hảo cho lá chắn Adafruit của bạn có thể không hoạt động tương tự đối với các bảng đột phá của Trung Quốc. Vì vậy, điều rất quan trọng là biết bạn đang cầm trên tay loại màn hình LCD nào. Chi tiết này phải được lấy từ nhà cung cấp. Nếu bạn đang gặp một máy nhái rẻ tiền như của tôi thì rất có thể nó đang sử dụng IC điều khiển ili9341. Bạn có thể làm theo hướng dẫn giao tiếp màn hình LCD TFT này với hướng dẫn Arduino để thử một số chương trình ví dụ cơ bản và làm quen với màn hình LCD. Ngoài ra, hãy xem các dự án TFT LCD khác của chúng tôi với Arduino tại đây:
- Cách sử dụng NeoPixel LED Strip với Arduino và TFT LCD
- Khóa mã kỹ thuật số được điều khiển trên điện thoại thông minh bằng Arduino
Hiệu chỉnh màn hình LCD TFT cho màn hình cảm ứng:
Nếu bạn định sử dụng chức năng màn hình cảm ứng của mô-đun TFT LCD của mình, thì bạn phải hiệu chỉnh nó để làm cho nó hoạt động bình thường. Màn hình LCD không có hiệu chỉnh có thể không hoạt động, chẳng hạn như bạn có thể chạm vào một nơi và TFT có thể phản hồi khi chạm vào một số nơi khác. Các kết quả hiệu chuẩn này sẽ không giống nhau đối với tất cả các bo mạch và do đó bạn có thể tự làm việc này.
Cách tốt nhất để hiệu chỉnh là sử dụng chương trình ví dụ hiệu chuẩn (đi kèm với thư viện) hoặc sử dụng màn hình nối tiếp để phát hiện lỗi của bạn. Tuy nhiên đối với dự án này vì kích thước của các nút lớn nên việc hiệu chỉnh không phải là vấn đề lớn và tôi cũng sẽ giải thích cách bạn có thể hiệu chỉnh màn hình của mình trong phần lập trình bên dưới.
Kết nối màn hình LCD TFT với Arduino:
Màn hình LCD TFT 2,4 ”là một tấm khiên Arduino hoàn hảo. Bạn có thể trực tiếp đẩy màn hình LCD lên trên Arduino Uno và nó sẽ khớp hoàn toàn với các chân và trượt qua. Tuy nhiên, vì vấn đề an toàn nên che đầu cuối Lập trình của Arduino UNO của bạn bằng một băng cách điện nhỏ, đề phòng trường hợp đầu cuối tiếp xúc với màn hình TFT LCD của bạn. Màn hình LCD được lắp ráp trên UNO sẽ trông giống như sau.
Lập trình Arduino của bạn cho TFT LCD:
Chúng tôi đang sử dụng Thư viện SPFD5408 để mã máy tính arduino này hoạt động. Đây là thư viện đã sửa đổi của Adafruit và có thể hoạt động liền mạch với Mô-đun TFT LCD của chúng tôi. Bạn có thể kiểm tra chương trình hoàn chỉnh ở cuối Bài viết này.
Lưu ý: Điều rất quan trọng là bạn phải cài đặt thư viện này trong IDE Arduino của mình hoặc chương trình này để biên dịch mà không gặp bất kỳ lỗi nào.
Để cài đặt thư viện này, bạn chỉ cần nhấp vào liên kết ở trên sẽ đưa bạn đến trang Github. Ở đó nhấp chuột vào bản sao hoặc tải xuống và chọn “Tải xuống ZIP”. Một tệp zip sẽ được tải xuống.
Bây giờ, mở Arduino IDE và chọn Phác thảo -> Bao gồm Librarey -> Thêm thư viện.ZIP. Một cửa sổ trình duyệt sẽ mở, điều hướng đến tệp ZIP và nhấp vào “OK”. Bạn sẽ thấy “Thư viện được thêm vào Thư viện của bạn” ở góc dưới bên trái của Arduino, nếu thành công. Hướng dẫn chi tiết để làm điều tương tự được đưa ra trong Hướng dẫn Giao diện.
Bây giờ, bạn có thể sử dụng mã bên dưới trong IDE Arduino của mình và tải nó lên Arduino UNO của bạn để Máy tính màn hình cảm ứng hoạt động. Sâu hơn nữa, tôi đã giải thích mã thành các đoạn nhỏ.
Chúng tôi cần ba thư viện để chương trình này hoạt động; tất cả ba thư viện này đã được cung cấp trong tệp ZIP mà bạn đã tải xuống từ liên kết được cung cấp ở trên. Tôi chỉ cần đưa chúng vào mã như hình dưới đây.
#include
Như đã nói trước đó, chúng ta cần hiệu chỉnh màn hình LCD để làm cho nó hoạt động như mong đợi, nhưng đừng lo lắng các giá trị đưa ra ở đây hầu như là phổ biến. Các biến TS_MINX, TS_MINY, TS_MAXX và TS_MAXY quyết định hiệu chuẩn của Màn hình. Bạn có thể đùa giỡn xung quanh chúng nếu bạn cảm thấy hiệu chuẩn không đạt yêu cầu.
#define TS_MINX 125 #define TS_MINY 85 #define TS_MAXX 965 #define TS_MAXY 905
Như chúng ta biết, màn hình LCD TFT có thể hiển thị rất nhiều màu, tất cả các màu này phải được nhập vào giá trị hex. Để con người dễ đọc hơn, chúng tôi gán các giá trị này cho một biến như hình dưới đây.
#define WHITE 0x0000 // Black-> White #define YELLOW 0x001F // Blue-> Yellow #define CYAN 0xF800 // Red-> Cyan #define PINK 0x07E0 // Green-> Pink #define RED 0x07FF // Cyan -> Red #define GREEN 0xF81F // Hồng -> Xanh lục #define BLUE 0xFFE0 // Vàng-> Xanh lam #define ĐEN 0xFFFF // Trắng-> Đen
Được rồi, bây giờ chúng ta vào phần lập trình. Có ba phần liên quan đến chương trình này. Một là tạo giao diện người dùng của máy tính với các nút và màn hình. Sau đó, phát hiện các nút dựa trên người dùng chạm vào và cuối cùng tính toán kết quả và hiển thị chúng. Hãy để chúng tôi vượt qua từng cái một.
1. Tạo giao diện người dùng của Máy tính:
Đây là nơi bạn có thể sử dụng rất nhiều khả năng sáng tạo của mình để thiết kế Giao diện Người dùng của máy tính. Tôi chỉ đơn giản là tạo một bố cục cơ bản của một máy tính với 16 Nút và một đơn vị hiển thị. Bạn phải xây dựng thiết kế giống như bạn sẽ vẽ một cái gì đó trên MS paint. Các thư viện được thêm vào sẽ cho phép bạn vẽ Đường thẳng, Hình chữ nhật, Hình tròn, Ký tự, Chuỗi và nhiều hơn nữa với bất kỳ màu ưa thích nào. Bạn có thể hiểu các chức năng có sẵn từ bài viết này.
Tôi đã sử dụng khả năng vẽ đường và hộp để thiết kế giao diện người dùng trông rất giống với máy tính của những năm 90. Mỗi hộp có chiều rộng và chiều cao là 60 pixel.
// Vẽ Hộp Kết quả tft.fillRect (0, 0, 240, 80, CYAN); // Vẽ Cột đầu tiên tft.fillRect (0,260,60,60, RED); tft.fillRect (0,200,60,60, ĐEN); tft.fillRect (0,140,60,60, ĐEN); tft.fillRect (0,80,60,60, ĐEN); // Vẽ Cột thứ Ba tft.fillRect (120,260,60,60, GREEN); tft.fillRect (120,200,60,60, BLACK); tft.fillRect (120,140,60,60, ĐEN); tft.fillRect (120,80,60,60, ĐEN); // Vẽ Cột bí mật & Cột thứ tư for (int b = 260; b> = 80; b- = 60) {tft.fillRect (180, b, 60,60, BLUE); tft.fillRect (60, b, 60,60, BLACK);} // Vẽ Đường Ngang for (int h = 80; h <= 320; h + = 60) tft.drawFastHLine (0, h, 240, WHITE); // Vẽ Đường dọc for (int v = 0; v <= 240; v + = 60) tft.drawFastVLine (v, 80, 240, WHITE); // Hiển thị các nhãn bàn phím for (int j = 0; j <4; j ++) {for (int i = 0; i <4; i ++) {tft.setCursor (22 + (60 * i), 100 + (60 * j)); tft.setTextSize (3); tft.setTextColor (TRẮNG); tft.println (ký hiệu);
2. Phát hiện các nút:
Một nhiệm vụ thử thách khác là phát hiện thao tác chạm của người dùng. Mỗi khi người dùng chạm vào một nơi nào đó, chúng ta sẽ có thể biết được vị trí X và Y của pixel mà anh ta chạm vào như thế nào. Giá trị này có thể được hiển thị trên màn hình nối tiếp bằng println như hình dưới đây.
TSPoint p = waitTouch (); X = py; Y = px; Serial.print (X); Serial.print (','); Serial.println (Y); // + "" + Y);
Vì chúng tôi đã thiết kế hộp với chiều rộng và chiều cao là 60 pixel mỗi và có bốn Hàng và cho các cột bắt đầu từ (0,0). Vị trí của mỗi hộp có thể được dự đoán như trong hình dưới đây.
Nhưng trong trường hợp thực tế, đây sẽ không phải là kết quả. Sẽ có sự khác biệt lớn giữa giá trị kỳ vọng và thực tế do vấn đề hiệu chuẩn.
Vì vậy, để dự đoán chính xác vị trí của hộp, bạn phải nhấp vào dòng và kiểm tra vị trí tương ứng của nó trên màn hình nối tiếp. Đây có thể không phải là cách làm chuyên nghiệp nhất, nhưng nó vẫn hoạt động hoàn hảo. Tôi đã đo vị trí của tất cả các dòng và thu được các giá trị dưới đây.
Bây giờ, vì chúng ta biết vị trí của tất cả các hộp. Khi người dùng chạm vào bất kỳ đâu, chúng ta có thể dự đoán nơi anh ta đã chạm vào bằng cách so sánh các giá trị (X, Y) của anh ta với giá trị cho từng ô như hình dưới đây.
if (X <105 && X> 50) // Phát hiện các nút trên cột 2 {if (Y> 0 && Y <85) {Serial.println ("Nút 0"); // Nút 0 được nhấn if (Number == 0) Number = 0; else Số = (Số * 10) + 0; // Được nhấn hai lần} if (Y> 85 && Y <140) {Serial.println ("Nút 2"); if (Số == 0) Số = 2; else Số = (Số * 10) + 2; // Được nhấn hai lần}
3. Hiển thị số và tính toán kết quả:
Bước cuối cùng là tính toán kết quả và hiển thị chúng trên Màn hình LCD TFT. Máy tính arduino này chỉ có thể thực hiện thao tác với 2 số. Hai số này được đặt tên là biến “Num1” và “Num2”. Biến “Number” cho và nhận giá trị từ Num1 và Num2 và cũng mang kết quả.
Khi sử dụng nhấn một nút, một chữ số sẽ được thêm vào số. Khi một nút khác được nhấn, một chữ số trước đó sẽ được nhân với 10 và số mới sẽ được thêm vào. Ví dụ, nếu chúng ta nhấn 8 rồi nhấn 5 rồi nhấn 7. Sau đó, đầu tiên biến sẽ giữ 8 sau đó (8 * 10) + 5 = 85 sau đó (85 * 10) +7 = 857. Vậy cuối cùng biến sẽ có giá trị 857 với nó.
if (Y> 192 && Y <245) {Serial.println ("Nút 8"); if (Số == 0) Số = 8; else Số = (Số * 10) + 8; // Đã nhấn lại}
Khi chúng ta thực hiện bất kỳ thao tác nào như cộng, khi người dùng nhấn nút cộng, giá trị từ Số sẽ được chuyển sang Num1 và sau đó Số sẽ được chuyển thành 0 để sẵn sàng lấy đầu vào cho số thứ hai.
Khi nhấn Equal, giá trị trong Number sẽ được gửi đến Num2 và sau đó phép tính tương ứng (trong trường hợp này là phép cộng) sẽ được thực hiện và kết quả sẽ được lưu lại trong biến “Number”.
Cuối cùng giá trị này sẽ được hiển thị trên màn hình LCD.
Đang làm việc:
Hoạt động của Máy tính màn hình cảm ứng Arduino này rất đơn giản. Bạn phải tải lên đoạn mã đã cho dưới đây trên Arduino của mình và kích hoạt nó. Bạn sẽ thấy máy tính được hiển thị trên màn hình LCD.
Bây giờ, bạn có thể nhập bất kỳ số nào và thực hiện các phép tính của mình. Nó được giới hạn cho chỉ hai toán hạng và toán tử duy nhất cho đến bây giờ. Tuy nhiên, bạn có thể điều chỉnh mã để làm cho nó có nhiều tùy chọn.
Bạn phải nhấn “C” để xóa giá trị trên màn hình mỗi lần sau khi thực hiện một phép tính. Hy vọng bạn hiểu dự án và thích xây dựng một cái gì đó tương tự. Nếu bạn có bất kỳ nghi ngờ nào, hãy đăng chúng trên diễn đàn hoặc trong phần bình luận bên dưới. Hẹn gặp lại các bạn lần sau với một dự án thú vị khác cho đến khi nào vui vẻ nhé !!
Cũng xem Video Trình diễn Dưới đây.