#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
// ตั้งค่าพิน I2C ของ OLED display
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
// ที่อยู่ I2C ของจอ OLED (ลองใช้ 0x3C และถ้าไม่ทำงาน ลองเปลี่ยนเป็น 0x3D)
#define OLED_ADDR 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
// เริ่มต้น Serial สำหรับ debugging
Serial.begin(115200);
// เริ่มต้นจอ OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
Serial.println(F("SSD1306 allocation failed"));
while (true); // ค้างอยู่ที่นี่หากการเริ่มต้นจอล้มเหลว
}
// แสดงข้อความเริ่มต้น
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Starting...");
display.display();
delay(2000);
}
// ฟังก์ชันสำหรับการส่งคีย์สโตรก
void send_keystroke(uint8_t keycode) {
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.print("Key: ");
display.print(keycode);
display.display();
delay(1000); // หน่วงเวลา 1 วินาที
}
// ฟังก์ชันสำหรับแปลงตัวเลขเป็นคีย์สโตรก (ตามรหัส ASCII)
uint8_t digit_to_hid_keycode(uint8_t digit) {
return digit + '0'; // เปลี่ยนเป็นรหัส ASCII
}
// ฟังก์ชันสำหรับส่งรหัส 4 หลัก
void send_code(uint16_t code) {
char code_str[5];
snprintf(code_str, sizeof(code_str), "%04d", code); // แปลงรหัสเป็น string
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.print("Code: ");
display.print(code_str);
display.display();
for (int i = 0; i < 4; i++) {
send_keystroke(digit_to_hid_keycode(code_str[i] - '0'));
}
delay(1000); // หน่วงเวลา 1 วินาที
}
void loop() {
// ส่งรหัสตั้งแต่ 0000 ถึง 9999
for (uint16_t code = 0; code <= 9999; code++) {
send_code(code);
delay(500); // หน่วงเวลา 0.5 วินาทีระหว่างแต่ละรหัส
}
}