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
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
Circuit diagram of this project
#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() {
}
#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);
}
#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>
#define SCREEN_ADDRESS 0x3C
DS3231 rtc(A4, A5);
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.