// THƯ VIỆN KHỞI TẠO I2C( QUAN TRỌNG )
#include <Wire.h>
// THƯ VIỆN OLED CHUẨN I2C
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// THƯ VIỆN LCD CHUẨN I2C
#include <LiquidCrystal_I2C.h>
// THIẾT LẬP ĐỘ RỘNG VÀ ĐỘ DÀI CỦA TỪNG PIXEL OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display1(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// KHAI BÁO NÚT NHẤN, VÀ TRẠNG THÁI HIỆN TẠI VÀ TRƯỚC ĐÓ NÚT NHẤN
#define BUTTON_PIN 26
int buttonPressCount = 0;
bool lastButtonState = HIGH;
// KHAI BÁO BIẾN TIMER ĐỊNH THỜI 5 GIÂY
unsigned long lastLcdUpdate = 0;
const unsigned long lcdUpdateInterval = 5000;
// KHAI BÁO ĐỐI TƯỢNG LCD VỚI ĐỊA CHỈ I2C MẶC ĐỊNH 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// TỐC ĐỘ BAUD 9600
Serial.begin(9600);
// KHỞI TẠO ĐỊA CHỈ OLED THEO CHUẨN I2C
if (!display1.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed for display1"));
for(;;);
}
// GỌI HÀM LCD VÀ BẬT ĐÈN NỀN
lcd.init();
lcd.backlight();
delay(2000);
// HIỂN THỊ OLED MỚI BẬT NGUỒN “Hello, world! - Display 1”
display1.clearDisplay();
display1.setTextSize(1);
display1.setTextColor(WHITE);
display1.setCursor(0, 10);
display1.println("Hello, world! - Display 1");
display1.display();
// HIỂN THỊ LCD MỚI BẬT NGUỒN “Hello, world! - Display 1”
lcd.setCursor(0, 0);
lcd.print("Hello, world! - LCD");
// CẤU HÌNH NÚT NHẤN ĐIỆN TRỞ KÉO LÊN
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop()
{
// HÀM ĐỌC NÚT NHẤN VÀ TĂNG BIẾN ĐẾM
bool buttonState = digitalRead(BUTTON_PIN);
if (lastButtonState == HIGH && buttonState == LOW) {
buttonPressCount++;
}
lastButtonState = buttonState;
// HIỂN THỊ BIẾN ĐẾM LÊN OLED
display1.clearDisplay();
display1.setCursor(0, 10);
display1.println("Button Press Count: " + String(buttonPressCount));
display1.display();
// HIỂN THỊ BIẾN ĐẾM LCD ( ĐÚNG 5 GIÂY CẬP NHẬT LÊN 1 LẦN
// DÙNG TIMER DÙNG HÀM millis() )
unsigned long currentMillis = millis();
if (currentMillis - lastLcdUpdate >= lcdUpdateInterval) {
lastLcdUpdate = currentMillis;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Button Count: ");
lcd.setCursor(0, 1);
lcd.print(String(buttonPressCount));
}
}