• How to make a Digital Watch using an 0.96 inch OLED Display (Cách tạo Đồng hồ kỹ thuật số bằng Màn hình OLED 0,96 inch)

QC

How to make a Digital Watch using an 0.96 inch OLED Display (Cách tạo Đồng hồ kỹ thuật số bằng Màn hình OLED 0,96 inch)

 How to make a Digital Watch using an 0.96 inch OLED Display (Cách tạo Đồng hồ kỹ thuật số bằng Màn hình OLED 0,96 inch)

Màn hình OLED là gì?

Màn hình đi-ốt phát quang hữu cơ (OLED) hay còn được gọi là màn hình đi-ốt EL hữu cơ là một loại màn hình dựa trên một hợp chất hữu cơ phát ra ánh sáng phản ứng với dòng điện đặt vào nó. Đây là màn hình tự phát sáng mà không cần đèn nền như màn hình LCD thông thường. Nó có thể được giao tiếp với bất kỳ bộ vi điều khiển nào sử dụng cả giao thức truyền thông SPI và IIC. Loại màn hình OLED này có nhiều hình dạng và kích thước khác nhau. Trong dự án này, chúng tôi sẽ sử dụng màn hình OLED 0,96 inch. Màn hình này bao gồm 128 × 64 pixel có thể được BẬT / TẮT bằng bất kỳ bộ vi điều khiển nào. Trong trường hợp của chúng tôi, chúng tôi sẽ sử dụng bảng Arduino UNO.


Sơ đồ chân của màn hình OLED 0,96 inch


Đặc điểm của màn hình OLED 0,96 inch

Điện áp đầu vào: 3,3-5 V
Hoạt động hiện tại: 9-12mA
Nhiệt độ hoạt động: -40 ° C đến 80 ° C
Độ phân giải: 128 × 64 Pixel
Trình điều khiển được sử dụng: SSD1306
Giao diện: IIC và SPI
Màn hình tự phát sáng
Sự tiêu thụ ít điện năng
Màn hình rất mỏng
Các thành phần cần thiết cho dự án này
Arduino UNO
Màn hình OLED 0,96 inch
Mô-đun RTC DS3231
Breadboard
Dây nhảy
Sơ đồ chân của mô-đun DS3232 RTC


Block diagram of this project



Hoạt động của dự án này

Mục tiêu chính của dự án này là tạo ra một chiếc đồng hồ kỹ thuật số sử dụng màn hình OLED. Bây giờ, để có được ngày giờ chính xác, chúng ta phải sử dụng bất kỳ mô-đun RTC nào. Ở đây, chúng tôi sẽ sử dụng mô-đun DS3231.

Trong mã chính của chúng tôi, chúng tôi sẽ thêm một mã để lấy cả giá trị ngày và giờ từ mô-đun này và lưu trữ chúng vào một số biến.

Sau đó, chúng tôi sẽ thêm mã giao diện cơ bản của màn hình OLED vào mã chính của chúng tôi và hiển thị cả giá trị ngày và giờ trên màn hình OLED.

Libraries needed for this project

Trước khi tiếp tục, hãy tải xuống và cài đặt tất cả các thư viện này trong phần mềm Arduino IDE.

https://github.com/adafruit/Adafruit-GFX-Library
https://github.com/adafruit/Adafruit_SSD1306
http://www.rinkydinkelectronics.com/library.php?id=73


Circuit diagram of this project



Bước 1: Đặt dữ liệu, thời gian và ngày của mô-đun RTC. Đối với điều đó, hãy tải mã sau lên Bảng Arduino.

Sử dụng hàm rtc.setDay (Tên_ngày) để đặt ngày; viết tên ngày bằng chữ in hoa bên trong dấu ngoặc.
Sử dụng hàm rtc.setTime (hh: mm: ss) để đặt thời gian; đầu tiên, viết giờ, sau đó viết phút, và cuối cùng viết giây.
Sử dụng hàm rtc.setDate (dd: mm: yyyy) để đặt ngày; đầu tiên viết ngày, sau đó viết tháng, và trong những năm cuối cùng viết.

#include "DS3231.h" 
DS3231  rtc(A4, A5);
void setup()
{
  Serial.begin(115200); 
  rtc.begin(); 
  

  rtc.setDay(MONDAY);    
  rtc.setTime(13,2,2);     
  rtc.setDate(2,5,2021);
}
void loop() { 
 

}
Bước 2: Tìm địa chỉ của Màn hình OLED. Để tải lên mã sau trong Arduino. Sau đó, mở màn hình nối tiếp và ghi lại địa chỉ của màn hình OLED. Chỉ kết nối màn hình OLED với Arduino, không kết nối mô-đun RTC. Nếu không, bạn sẽ nhận được ba địa chỉ.

#include <Wire.h>
 

void setup()
{
  Wire.begin();

  Serial.begin(9600);
  while (!Serial);             
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
 Serial.println("Scanning...");
 
 nDevices = 0;
  for(address = 1; address < 127; address++ )
  {

    Wire.beginTransmission(address);
    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);           
}




Mã Arduino cho dự án này
Bước 3: Đây là mã chính của dự án này. Tải lên mã này trong Arduino.


#include "DS3231.h" 

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 
#define SCREEN_HEIGHT 64 


#define OLED_RESET     4 
#define SCREEN_ADDRESS 0x3C 
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

DS3231  rtc(A4, A5); 
void setup() {
 
  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); 
  }
}

void loop() {
  display.clearDisplay();
  display.setTextSize(1); // Draw 2X-scale text
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("TIME");
  display.setTextSize(2);
  display.setCursor(0, 10);
  display.println(rtc.getTimeStr());
  display.setTextSize(1);
  display.setCursor(0, 30);
  display.println("DATE");
  display.setTextSize(2);
  display.setCursor(0, 41);
  display.println(rtc.getDateStr());
  display.display();      // Show initial text
  delay(100);
}

Working of this code

#include "DS3231.h" 

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Đầu tiên, hãy bao gồm tất cả các thư viện cần thiết cho dự án này. Chúng tôi cần thư viện DS3231 cho mô-đun DS3231 RTC, thư viện dây cho giao tiếp I2C và thư viện Adafruit GFX và SSD1306 cho màn hình OLED.


#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64

Xác định hai hằng số để lưu trữ pixel chiều rộng và chiều cao của màn hình OLED. Chúng tôi đang sử dụng màn hình OLED có 128 pixel chiều rộng và 64 pixel chiều cao.

#define SCREEN_ADDRESS 0x3C 

Đặt địa chỉ I2C của màn hình OLED


Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Chuyển tất cả các tham số vào thư viện.


DS3231  rtc(A4, A5); 

Xác định chân SDA và SCL cho mô-đun DS3231 RTC. Chân A4 của Arduino là chân SDA và chân A5 của Arduino là chân SCL.

void setup() { Serial.begin(9600); if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); for(;;); } }


Khởi động màn hình OLED trong hàm setup (). Nếu phân bổ không thành công, bạn sẽ thấy thông báo này “Phân bổ SSD1306 không thành công”




void loop() { display.clearDisplay(); display.setTextSize(1); // Draw 1X-scale text display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); display.println("TIME");



Chúng tôi sẽ viết mã chính của chúng tôi trong hàm loop ().
Đầu tiên, xóa màn hình bằng lệnh clearDisplay ().
Sau đó đặt kích thước Văn bản bằng cách sử dụng hàm setTextSize (). Viết 1 bên trong dấu ngoặc cho tỷ lệ 1X, viết 2 bên trong dấu ngoặc cho tỷ lệ 2X, v.v.

Sau đó, thiết lập màu của văn bản bằng cách sử dụng hàm setTextColor (). Nếu bạn ghi SSD1306_WHITE, thì tất cả văn bản sẽ được hiển thị bằng màu sáng và nền sẽ có màu tối. Nếu bạn ghi SSD1306_BLACK, thì tất cả văn bản sẽ được hiển thị bằng màu tối và nền của màn hình sẽ được hiển thị bằng màu sáng.
Sau đó, đặt vị trí con trỏ nơi bạn muốn hiển thị văn bản của mình bằng cách sử dụng hàm setCursor (). Đầu tiên, viết số cột và viết số hàng. Hãy nhớ rằng chúng ta có 128 cột và 64 hàng vì chúng ta có 128 × 64 pixel trong màn hình này.

Sau đó in thời gian trên màn hình.


display.setTextSize(2); display.setCursor(0, 10); display.println(rtc.getTimeStr());



Sau đó thiết lập lại kích thước của văn bản. Lần này chúng tôi đang sử dụng kích thước 2X. Sau đó đặt lại vị trí con trỏ và in thời gian. Để lấy thời gian từ mô-đun RTC, chúng ta sẽ sử dụng hàm getTimeStr ().


display.setTextSize(1); display.setCursor(0, 30); display.println("DATE"); display.setTextSize(2); display.setCursor(0, 41); display.println(rtc.getDateStr()); display.display(); // Show initial text delay(100); }


Similarly, display the date on the OLED display. We are using getDateStr() function to get the date from the RTC module.

And in the last give a delay of 100ms.

Output result




































































Nap Code vào PY32F003 dùng Stlink

 Nap Code vào PY32F003 dùng Stlink Bước 1: Cài đặt  KeilC v5.39 theo link sau ( chú ý 5.39 keil c mới nạp ok). https://edge07.111.ir.cdn.ir/...