
【ฉบับสมบูรณ์】ไร้ความหน่วง ไร้ข้อผิดพลาด คู่มือระดับมืออาชีพสำหรับการสร้าง "ปุ่มทริกเกอร์ทางกายภาพอเนกประสงค์" สำหรับ Android ด้วยตัวเองตั้งแต่เริ่มต้น
ในบทความนี้ ผมจะอธิบายขั้นตอนการสร้าง "ปุ่มทริกเกอร์ทางกายภาพอเนกประสงค์" (Universal Physical Trigger Button) ที่เกิดจากความมุ่งมั่นในการแก้ปัญหาหน้างาน สำหรับไรเดอร์ส่งอาหารที่ประสบปัญหาการทำงานผิดพลาดในวันฝนตกหรือความล่าช้าในการปลุกเครื่องจากโหมดสลีป รวมถึงเหล่า Geek ที่ต้องการเพิ่มประสิทธิภาพการใช้งานอุปกรณ์ Android ให้ถึงขีดสุด
โพสต์ X ตอนสร้างชิ้นงานที่ 1 โพสต์ X ตอนสร้างชิ้นงานที่ 2 โพสต์ X ตอนสร้างชิ้นงานที่ 3 โพสต์ X ตอนสร้างชิ้นงานที่ 4 โพสต์ X ตอนสร้างชิ้นงานที่ 5
1. แนวคิด: ทำไมถึงลงเอยที่การ "ทำเอง"
แม้คู่มือนี้จะเน้นไปที่ขั้นตอนการสร้างฮาร์ดแวร์และซอฟต์แวร์ในทางปฏิบัติ แต่กระบวนการลองผิดลองถูกและความล้มเหลวซ้ำแล้วซ้ำเล่าบนท้องถนนในวันฝนตกจนกว่าจะเกิด "ปุ่มทางกายภาพขั้นสุดยอด" นี้ขึ้นมา ได้ถูกบันทึกไว้ในบทความ note ด้านล่างนี้ หากคุณสนใจเรื่องราวเบื้องหลังที่ขรุขระว่าทำไมผลิตภัณฑ์ที่มีอยู่เดิมถึงใช้ไม่ได้ผล สามารถเข้าไปอ่านเพิ่มเติมได้ครับ
- บทความอ้างอิง (note): 【スマートリモコン】雨の日の配達を快適にする最強の物理ボタンを自作した話

ปุ่ม Bluetooth หรือมีเดียคอนโทรลเลอร์ราคาถูกที่มีวางจำหน่ายทั่วไป มีจุดอ่อนร้ายแรงในสภาพแวดล้อมการทำงานที่โหดร้ายระดับมืออาชีพ (ฝนตก, การใช้งานต่อเนื่อง, การสั่งการที่ต้องตัดสินใจในเสี้ยววินาที) ดังนี้:
-
ความล่าช้าในการปลุกเครื่องจากโหมดสลีป: เนื่องจากฟังก์ชันประหยัดพลังงาน ทำให้เมื่อต้องการกดใช้งานจริง การคลิกครั้งแรกมักจะไม่ถูกรับรู้
-
การรบกวนเลย์เอาต์: ในบางแอปพลิเคชัน (เช่น Uber Eats) สัญญาณอินพุตจากผลิตภัณฑ์ทั่วไปอาจทำให้เกิดการทำงานที่ไม่คาดคิด
-
การเกิด Chattering และการจมน้ำ: ความสามารถในการป้องกันน้ำเข้าต่ำ ทำให้เกิดการทำงานผิดพลาด (Chattering) บ่อยครั้งจากความชื้นสูงหรือหยดน้ำในวันฝนตก
เพื่อแก้ไขปัญหาเหล่านี้จากรากฐาน ในโปรเจกต์นี้เราจะใช้วิธีการ สร้างเฟิร์มแวร์ด้วย C++ โดยใช้ไมโครคอนโทรลเลอร์ที่รองรับ Arduino และทำให้ OS จดจำอุปกรณ์ว่าเป็น "มีเดียรีโมทที่ทำงานได้อย่างเหมาะสมที่สุด" ด้วยวิธีนี้ เราจะสามารถสร้างสภาพแวดล้อมการทำงานที่ไร้รอยต่อ ไม่มีความล่าช้า และเชื่อถือได้
เพื่อแก้ไขปัญหาเหล่านี้จากรากฐาน ในโปรเจกต์นี้เราจะใช้วิธีการ สร้างเฟิร์มแวร์ด้วย C++ โดยใช้ไมโครคอนโทรลเลอร์ที่รองรับ Arduino และทำให้ OS จดจำอุปกรณ์ว่าเป็น "มีเดียรีโมทที่ทำงานได้อย่างเหมาะสมที่สุด" ด้วยวิธีนี้ เราจะสามารถสร้างสภาพแวดล้อมการทำงานที่ไร้รอยต่อ ไม่มีความล่าช้า และเชื่อถือได้
2. ชิ้นส่วนที่จำเป็น (BOM: รายการวัสดุ)
นี่คือรายการชิ้นส่วนที่ผ่านการทดสอบจากการใช้งานจริง ซึ่งสามารถหาซื้อได้จากร้านขายชิ้นส่วนอิเล็กทรอนิกส์ในอากิฮาบาระหรือ Amazon โดยเน้นการเลือกที่ความเสถียรเป็นหลัก
| ชื่อชิ้นส่วน | รุ่น / รายละเอียด | ราคาอ้างอิงที่ถูกที่สุด (รวมภาษี) | แหล่งที่มา | เหตุผลที่เลือก |
|---|---|---|---|---|
| บอร์ดไมโครคอนโทรลเลอร์ | Seeed Studio XIAO nRF52840 | 1,800 เยน | Sengoku Densho | ขนาดเล็กพิเศษ รองรับ Bluetooth 5.0 มีวงจรชาร์จแบตเตอรี่ในตัว เป็นบอร์ดที่เป็นคำตอบที่ดีที่สุดสำหรับการใช้งานนี้ Amazon |
| แบตเตอรี่ | Li-po แบตเตอรี่ชาร์จได้ 3.7v 110mAh | 880 เยน | Sengoku Densho | ความจุที่พอดีกับขนาดของ XIAO และเพียงพอต่อระยะเวลาการใช้งาน Amazon |
| สวิตช์คีย์บอร์ด | Kailh Choc Brown (แกนน้ำตาล) | 60 เยน/ชิ้น | Yusha Kobo | เลือกใช้แกนน้ำตาลแบบ Low-profile ที่ให้สัมผัสการคลิกที่ชัดเจน ช่วยป้องกันการกดผิด Yusha Kobo |
| คีย์แคป | chocfox CFX 1U keycap | 550 เยน/10 ชิ้น | Yusha Kobo | สำหรับสวิตช์ Choc โดยเฉพาะ รูปทรงแบนราบกดง่าย Yusha Kobo |
| สายไฟ | สายไฟแกนในจากสาย USB ที่ไม่ใช้แล้ว ฯลฯ | 0 เยน | ใช้วัสดุเหลือใช้ | มีความบางและยืดหยุ่น เหมาะสำหรับการเดินสายในพื้นที่ขนาดเล็กมาก |
| เคส | ผลงานจากเครื่องพิมพ์ 3 มิติ ฯลฯ | - | ทำเอง | สามารถทำเองจากเคสราคา 100 เยนก็ได้ ผมสร้างขึ้นโดยใช้เครื่องพิมพ์ 3 มิติ |
3. เครื่องมือและวัสดุสิ้นเปลืองที่จำเป็น
เนื่องจากเป็นงานที่ต้องใช้ความละเอียด การเตรียมเครื่องมือที่เหมาะสมคือกุญแจสู่ความสำเร็จ
-
หัวแร้ง: แนะนำแบบปรับอุณหภูมิได้ ปลายหัวแร้งไม่ควรเล็กเกินไปเพื่อให้การนำความร้อนดี
-
ตะกั่วบัดกรี:
goot สำหรับงานประกอบความหนาแน่นสูง SD-81 (0.6mm)\ Amazon - อุปกรณ์ยึด:ขาตั้งช่วยจับแบบแขนอ่อน\ Amazon - เทปกาวเจลสองหน้า:ยี่ห้อ Can Do (ความหนา 1.8mm)※เนื่องจากผมออกแบบเคส 3D Print โดยอิงจากความหนา 1.8mm นี้ หากคุณสร้างเคสเอง ไม่จำเป็นต้องใช้ หรืออาจใช้วิธีอื่นในการยึดบอร์ดกับแบตเตอรี่ก็ได้
4. การประกอบฮาร์ดแวร์: เคล็ดลับสู่การประกอบที่มั่นคง
ความผิดพลาดในขั้นตอนนี้จะนำไปสู่การทำงานที่บกพร่องโดยตรง โดยเฉพาะพื้นฐานการบัดกรีและการจัดการแบตเตอรี่ โปรดใช้ความระมัดระวังเป็นพิเศษ
4-1. การเตรียมสายไฟ
ปอกเปลือกนอกของสายชาร์จที่ไม่ใช้แล้ว (เช่น สาย USB) ออก แล้วดึงสายไฟเส้นเล็กๆ (แกนใน) ที่อยู่ข้างในออกมา ตัดให้ได้ความยาวที่ต้องการ ปอกฉนวนที่ปลายทั้งสองด้านออกประมาณ 2-3 มม. แล้วแต้มตะกั่วไว้ล่วงหน้าเล็กน้อย (Pre-soldering)
4-2. การบัดกรีสวิตช์และบอร์ด
เชื่อมต่อ XIAO nRF52840 เข้ากับสวิตช์คีย์บอร์ด
-
จุดเชื่อมต่อ:
-
ปุ่มที่ 1 (ปุ่มหลัก): ขาข้างหนึ่งของสวิตช์เข้ากับพิน
D0ของ XIAO และอีกข้างเข้ากับพินGND -
ปุ่มที่ 2 (ปุ่มรอง): ขาข้างหนึ่งของสวิตช์เข้ากับพิน
D1ของ XIAO และอีกข้างเข้ากับพินGND(※เนื่องจาก GND เป็นจุดร่วม คุณสามารถต่อแบบ Daisy Chain ที่ฝั่งสวิตช์ได้)
-
-
เคล็ดลับการบัดกรี (การอุ่น):
สาเหตุส่วนใหญ่ที่ตะกั่วไม่ติดคือ "ความร้อนไม่พอ" ให้แตะปลายหัวแร้งลงบนทั้งแพดของบอร์ด (ส่วนที่เป็นโลหะ) และสายไฟพร้อมกัน อุ่นไว้ประมาณ 1-2 วินาที ก่อนจะป้อนตะกั่วเข้าไป หากตะกั่วแผ่ออกเป็นรูปภูเขาไฟถือว่าสำเร็จ หากเป็นก้อนกลมแสดงว่าความร้อนไม่พอหรือฟลักซ์ไม่เพียงพอ
4-3. การเชื่อมต่อแบตเตอรี่ (คำเตือน: ระวังไฟฟ้าลัดวงจร)
แบตเตอรี่จะถูกบัดกรีโดยตรงเข้ากับแพดสำหรับเชื่อมต่อแบตเตอรี่ที่อยู่ด้านหลังบอร์ด (BAT+ และ BAT-)
-
ห้ามลัดวงจรเด็ดขาด: เมื่อตัดสายแบตเตอรี่ Li-po ห้ามใช้คีมตัดสายบวกและสายลบพร้อมกันเด็ดขาด เพราะจะเกิดการลัดวงจรผ่านใบมีดและเสี่ยงต่อการเกิดไฟไหม้ ต้องตัดทีละเส้น และใช้เทปพันสายไฟฉนวนปิดปลายสายที่ยังไม่ได้ทำจนกว่าจะถึงขั้นตอนของสายนั้น
-
ขั้นตอนการเชื่อมต่อ: เพื่อความปลอดภัย ให้บัดกรี สายลบ (สีดำ) เข้ากับ
BAT-ของบอร์ดก่อน จากนั้นจึงบัดกรี สายบวก (สีแดง) เข้ากับBAT+



4-4. การติดตั้งและยึด (มาตรการป้องกันสายขาด)
ในงานอิเล็กทรอนิกส์ขนาดจิ๋ว ปัญหาที่พบบ่อยที่สุดคือ "สายขาดที่โคน"
เมื่อบัดกรีเสร็จแล้ว อย่าขยับ บอร์ดหรือสายไฟโดยไม่จำเป็น
เพื่อป้องกันสายขาด หลังจากบัดกรีเสร็จให้ใช้ เทปกาวเจลสองหน้าความหนา 1.8mm ที่เตรียมไว้ ยึดบอร์ด แบตเตอรี่ และสวิตช์คีย์บอร์ดเข้ากับเคส 3D Print ให้แน่นหนา ความหนาและความยืดหยุ่นของเทปนี้ทำหน้าที่ทั้งดูดซับแรงกระแทกและปรับตำแหน่งให้เหมาะสมไปในตัว
※เทปกาวเจลสองหน้าความหนา 1.8mm มีไว้เพื่อให้พอดีกับเคสที่ผมสร้างขึ้นเท่านั้น หากคุณสร้างในสภาพแวดล้อมของคุณเอง สามารถใช้วิธีอื่นได้ ※แนะนำให้รีบยึดด้วยเทปทันที เพราะหากขยับไปมาเพื่อเตรียมบัดกรีจุดถัดไป สายไฟอาจขาดได้ จึงแนะนำให้ยึดให้แน่นทันทีครับ
5. ซอฟต์แวร์: การเขียนเฟิร์มแวร์
ใส่สมองกลเพื่อให้ไมโครคอนโทรลเลอร์ทำงานเป็น "ปุ่ม Bluetooth ประสิทธิภาพสูง" ได้
5-1. การตั้งค่าและการอัปโหลดบน Arduino IDE
ติดตั้ง Arduino IDE จาก https://www.google.com/search?q=https://www.arduino.cc/en/software ลงบน PC ของคุณ และเพิ่มแพ็กเกจของบอร์ดที่จำเป็น (Seeed nRF52 mbed-enabled Boards)

หลังจากติดตั้ง IDE แล้ว ให้เปิดโปรแกรมขึ้นมา จากนั้นเชื่อมต่อ Seeed Studio XIAO nRF52840 เข้ากับ PC ด้วยสาย USB
-
การค้นหาบอร์ด: เปิดเมนู
Select Other Board and Portแล้วค้นหาและเลือกSeeed Studio XIAO nRF52840(※หมายเหตุ: ในซีรีส์ Seeed Studio XIAO จะมีบอร์ดอื่นที่มีชื่อคล้ายกัน เช่น "รุ่นปกติ (SAMD21)" หรือ "ESP32C3" โปรดตรวจสอบให้แน่ใจว่าเลือก "nRF52840" หากเลือกผิดจะไม่สามารถอัปโหลดได้)
การเลือกบอร์ด: เมื่อค้นหาแล้ว
Seeed Studio XIAO nRF52840จะปรากฏในช่องตัวเลือก ให้เลือกบอร์ดนั้น โปรดระวังเนื่องจากมีเวอร์ชันที่แตกต่างกัน เช่น Plus หรือ Seeed เป็นต้น
-
การเลือกพอร์ต:
จาก
Tools->Portให้เลือกพอร์ตที่Seeed Studio XIAO nRF52840เชื่อมต่ออยู่ (เช่น พอร์ต COM) ※สำหรับ Mac เมนู Tools จะไม่ได้อยู่ในหน้าต่างโปรแกรม แต่อยู่ที่แถบงาน (Taskbar)
การอัปโหลด: เมื่อเตรียมบอร์ดและพอร์ตเรียบร้อยแล้ว ให้คัดลอกโค้ดด้านล่างนี้ไปวางในช่องแก้ไขข้อความตรงกลาง
#include <bluefruit.h>
// --- カスタマイズ設定 ---
#define DEVICE_NAME "D-Remote" // 11文字以内の好きな名前に変更してください
#define BTN1_PIN 0 // D0 (Vol Up / 長押し機能)
#define BTN2_PIN 1 // D1 (Vol Down)
// ----------------------
BLEDis bledis;
BLEBas blebas; // バッテリーサービス
BLEHidGeneric blehid(1, 0, 0);
static uint16_t inputReportLen[] = { 1 };
#define REPORT_ID_CONSUMER_CONTROL 1
// メディアリモコン設計図
uint8_t const hidReportDescriptor[] = {
0x05, 0x0C, // Usage Page (Consumer Devices)
0x09, 0x01, // Usage (Consumer Control)
0xA1, 0x01, // Collection (Application)
0x85, REPORT_ID_CONSUMER_CONTROL, // Report ID (1)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1 bit)
0x95, 0x03, // Report Count (3)
0x09, 0xE9, // Usage 1: Volume Increment (Bit 0)
0x09, 0xEA, // Usage 2: Volume Decrement (Bit 1)
0x09, 0xCD, // Usage 3: Play/Pause (Bit 2)
0x81, 0x02, // Input (Data, Variable, Absolute)
0x75, 0x01, // Report Size (1 bit)
0x95, 0x05, // Report Count (5) - パディング
0x81, 0x03, // Input (Constant, Variable, Absolute)
0xC0 // End Collection
};
// 実際のバッテリー残量をパーセントで計算する関数
uint8_t getBatteryPercentage() {
// バッテリー電圧読み取り用のスイッチ(VBAT_ENABLE)をONにする
pinMode(VBAT_ENABLE, OUTPUT);
digitalWrite(VBAT_ENABLE, LOW);
delay(5); // 電圧が安定するまで待機
analogReference(AR_INTERNAL); // 基準電圧3.6V
analogReadResolution(12); // 12bit解像度
int raw = analogRead(PIN_VBAT); // 電圧読み取り
// 読み取りが終わったらスイッチをOFFにして放電を防ぐ
digitalWrite(VBAT_ENABLE, HIGH);
pinMode(VBAT_ENABLE, INPUT);
// XIAO nRF52840の正確な抵抗比(1MΩと510kΩ)に基づいた電圧計算(mV)
// 計算式: 読み取り値 * (基準電圧/分解能) * (分圧比補正)
float mv = raw * (3600.0 / 4096.0) * (1510.0 / 510.0);
// リチウムイオン電池の特性に合わせる (4200mV=100%, 3300mV=0%)
if (mv >= 4200.0) return 100;
if (mv <= 3300.0) return 0;
return (uint8_t)((mv - 3300.0) / (4200.0 - 3300.0) * 100.0);
}
void setup() {
pinMode(BTN1_PIN, INPUT_PULLUP);
pinMode(BTN2_PIN, INPUT_PULLUP);
Bluefruit.begin();
Bluefruit.setTxPower(8);
Bluefruit.setName(DEVICE_NAME);
Bluefruit.setAppearance(BLE_APPEARANCE_HID_GAMEPAD);
bledis.setManufacturer("HI-JA");
bledis.setModel("Delivery Controller");
bledis.begin();
blebas.begin();
blebas.write(getBatteryPercentage()); // 起動時に実際のバッテリー残量を送信
blehid.setReportLen(inputReportLen);
blehid.setReportMap(hidReportDescriptor, sizeof(hidReportDescriptor));
blehid.begin();
Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit.Advertising.addTxPower();
Bluefruit.Advertising.addAppearance(BLE_APPEARANCE_HID_GAMEPAD);
Bluefruit.Advertising.addService(blehid);
Bluefruit.Advertising.addService(blebas);
Bluefruit.Advertising.addName();
Bluefruit.Advertising.restartOnDisconnect(true);
Bluefruit.Advertising.setInterval(32, 244);
Bluefruit.Advertising.setFastTimeout(30);
Bluefruit.Advertising.start(0);
}
void loop() {
bool raw1 = (digitalRead(BTN1_PIN) == LOW);
bool raw2 = (digitalRead(BTN2_PIN) == LOW);
static int state = 0;
static unsigned long pressTime = 0;
static uint8_t lastReport = 0;
uint8_t newReport = 0;
unsigned long now = millis();
// --- 同時押し判定ステートマシン ---
if (state == 0) {
if (raw1 || raw2) {
state = 1;
pressTime = now;
}
} else if (state == 1) {
if (!raw1 && !raw2) {
state = 0;
} else if (now - pressTime > 40) {
if (raw1 && raw2) state = 4;
else if (raw1) state = 2;
else if (raw2) state = 3;
}
} else {
if (state == 2 && !raw1) state = 0;
if (state == 3 && !raw2) state = 0;
if (state == 4 && (!raw1 && !raw2)) state = 0;
}
if (state == 2) newReport = 0x01;
else if (state == 3) newReport = 0x02;
else if (state == 4) newReport = 0x04;
else newReport = 0x00;
if (newReport != lastReport) {
blehid.inputReport(0, &newReport, 1);
lastReport = newReport;
}
// --- ฟังก์ชันกดค้าง ---
static unsigned long d0StartTime = 0;
static bool d0Long10s = false;
static bool d0Long15s = false;
if (state == 2 && raw1) {
if (d0StartTime == 0) d0StartTime = now;
unsigned long duration = now - d0StartTime;
if (duration >= 15000 && !d0Long15s) {
d0Long15s = true;
uint8_t releaseReport = 0;
blehid.inputReport(0, &releaseReport, 1);
delay(100);
nrf_gpio_cfg_sense_input(g_ADigitalPinMap[BTN1_PIN], NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW);
NRF_POWER->SYSTEMOFF = 1;
}
else if (duration >= 10000 && !d0Long10s && !d0Long15s) {
d0Long10s = true;
NVIC_SystemReset();
}
} else {
d0StartTime = 0;
d0Long10s = false;
d0Long15s = false;
}
// อัปเดตระดับแบตเตอรี่จริงทุกๆ 60 วินาที
static unsigned long lastBatteryTime = 0;
if (now - lastBatteryTime > 60000) {
lastBatteryTime = now;
blebas.write(getBatteryPercentage());
}
delay(5);
}

-
เมื่อวางโค้ดเรียบร้อยแล้ว ให้กดที่ (ไอคอนลูกศรขวา) ที่มุมซ้ายบนของหน้าจอเพื่อดำเนินการเขียนข้อมูล
เกจแสดงสถานะ
#จะเริ่มทำงาน เมื่อเสร็จสิ้นแล้วสามารถถอดออกได้เลย ห้ามถอดออกในระหว่างที่กำลังเขียนข้อมูลหากเกิดข้อผิดพลาดในการเขียนข้อมูล อาจเป็นไปได้ว่าเกิดปัญหาจากการตั้งค่าหรือการวางโค้ด ให้คัดลอกรหัสข้อผิดพลาดแล้วลองสอบถาม Gemini หรือ ChatGPT ดูครับ
5-2. การแก้ไขปัญหา: พอร์ตไม่ถูกตรวจพบหรือเครื่องค้าง
ในระหว่างการพัฒนา บ่อยครั้งที่บอร์ดอาจไม่ถูกตรวจพบโดย PC (ไม่แสดงพอร์ต)
-
การรีเซ็ตพื้นฐาน: การใช้แหนบหรืออุปกรณ์อื่นแตะที่จุด "RST" บนบอร์ดให้ลัดวงจรกันอย่างรวดเร็ว 2 ครั้ง (ดับเบิลคลิก) มักจะทำให้เข้าสู่โหมด Bootloader และถูกตรวจพบได้
-
ทางเลือกสุดท้าย (กรณีเครื่องค้างสนิท): หากรีเซ็ตแล้วไม่มีการตอบสนองใดๆ เลย เป็นไปได้ว่าบอร์ดค้างสนิท ในกรณีนี้ปุ่มรีเซ็ตจะไม่สามารถช่วยได้ วิธีเดียวที่จะบังคับรีสตาร์ทได้คือวิธีแบบดิบๆ คือ ปล่อยทิ้งไว้โดยที่ยังต่อแบตเตอรี่อยู่ จนกว่าแบตเตอรี่จะหมดเกลี้ยง
5-3. พฤติกรรมและสเปกของปุ่มที่ตั้งโปรแกรมไว้
โค้ดที่เขียนลงไปได้มีการใช้ State Machine ขนาด 40ms เพื่อกำจัดปัญหาการสั่นของหน้าสัมผัส (Chattering) ให้เหลือน้อยที่สุด นอกจากนี้ยังมีการควบคุมฟังก์ชันการอ่านแรงดันไฟฟ้า (VBAT_ENABLE) เพื่อส่งระดับแบตเตอรี่ที่แม่นยำไปยังสมาร์ทโฟน
【สเปกการทำงานของปุ่ม】
-
ปุ่ม 0 (D0) กดสั้น: เพิ่มระดับเสียง
-
ปุ่ม 1 (D1) กดสั้น: ลดระดับเสียง
-
ปุ่ม 0 + ปุ่ม 1 กดพร้อมกัน: เล่น / หยุดชั่วคราว
-
ปุ่ม 0 กดค้าง 10 วินาที: ล้างข้อมูลการจับคู่ Bluetooth (รีเซ็ต)
-
ปุ่ม 0 กดค้าง 15 วินาที: ปิดเครื่อง
【ระยะเวลาการใช้งานแบตเตอรี่】
ในโหมดสแตนด์บายที่ไม่มีการกดปุ่ม จะสามารถใช้งานได้นาน ประมาณ 20-30 วัน ในสภาพแวดล้อมการใช้งานจริง เช่น งานเดลิเวอรี่ที่มีการใช้งานบ่อย ระยะเวลาจะสั้นลงตามจำนวนครั้งที่กด
เมื่อการเขียนข้อมูลเสร็จสมบูรณ์และเริ่มทำงาน ไฟ LED สีฟ้าบนบอร์ดจะกะพริบ ซึ่งแสดงว่าอยู่ในสถานะรอการจับคู่
6. การตั้งค่าฝั่ง Android: เปลี่ยนปุ่มธรรมดาให้เป็นทริกเกอร์ที่ทรงพลังที่สุด
เมื่อฮาร์ดแวร์เสร็จสมบูรณ์และจับคู่ Bluetooth กับสมาร์ทโฟนแล้ว ขั้นตอนต่อไปคือการดักจับอินพุตนี้ที่ฝั่ง Android OS และแปลงเป็นการทำงานที่ต้องการ หากไม่ตั้งค่าส่วนนี้ ปุ่มก็จะทำหน้าที่ได้เพียงแค่ปรับระดับเสียงเท่านั้น
6-1. การเตรียมตัวล่วงหน้า: ปลดล็อกตัวเลือกสำหรับนักพัฒนา
เพื่อให้สามารถใช้สิทธิ์ระบบขั้นสูงของ Android ได้ ก่อนอื่นต้องเปิดใช้งานโหมดนักพัฒนาก่อน
-
เปิด
การตั้งค่า>เกี่ยวกับโทรศัพท์บน Android -
แตะที่
หมายเลขบิลด์ติดต่อกัน 7 ครั้งเพื่อเปิดใช้งานโหมดนักพัฒนา -
เปิด
การตั้งค่า>ระบบ>ตัวเลือกสำหรับนักพัฒนาแล้วเปิด "การแก้ไขข้อบกพร่อง USB" (USB Debugging) และ "การแก้ไขข้อบกพร่องแบบไร้สาย" (Wireless Debugging)
6-2. การติดตั้ง FRep2 และการสร้างมาโครโดยละเอียด (การแตะด้วยการจดจำภาพ)
หากคุณต้องการใช้มาโครขั้นสูงที่ "ทำการแตะเฉพาะเมื่อมีปุ่ม (รูปภาพ) ปรากฏขึ้นบนหน้าจอ" แทนที่จะใช้ฟังก์ชันการแตะตำแหน่งคงที่ของ Key Mapper คุณจำเป็นต้องสร้างมาโครใน FRep2 ให้เสร็จสิ้นก่อนที่จะตั้งค่า Key Mapper
(※ หากคุณเพียงต้องการให้แตะตำแหน่งเดิมซ้ำๆ โดยตรง ให้ข้ามขั้นตอนนี้ไปที่ "6-3. การติดตั้ง Shizuku")
① การติดตั้ง FRep2 และการเปลี่ยนเป็น "โหมดแม่นยำ" (จำเป็น)
ในการดำเนินการแตะแบบฮาร์ดแวร์ด้วยการค้นหาภาพใน FRep2 คุณจำเป็นต้องเปลี่ยนจาก "โหมดปกติ" (Simple Mode) เริ่มต้น เป็น "โหมดแม่นยำ" (Precision Mode) และให้สิทธิ์ในการจับภาพหน้าจอ
-
ติดตั้ง "FRep2" จาก Play Store
-
เข้าไปที่คู่มือการตั้งค่าบนเว็บไซต์ทางการของ FRep2 ( https://strai.x0.com/frep2-ja/setup )
-
จากหัวข้อ 【精密モード設定・画面キャプチャ権限付与】 (การตั้งค่าโหมดแม่นยำ/การให้สิทธิ์จับภาพหน้าจอ) ในหน้าเว็บ ให้ดาวน์โหลด [画面キャプチャ権限付与ツール] (เครื่องมือให้สิทธิ์จับภาพหน้าจอ) ที่เหมาะสมกับสภาพแวดล้อมการทำงานของคุณ (Windows / Mac / Linux / Android)
-
ดำเนินการตามคำแนะนำบนเว็บไซต์ทางการเพื่อรันเครื่องมือ (※ขั้นตอนนี้จะใช้ "USB Debugging" หรือ "Wireless Debugging") เพื่อให้สิทธิ์และเปิดใช้งานบริการในโหมดแม่นยำ
② การเตรียมการล่วงหน้า (ภาพหน้าจอของเป้าหมาย)
เปิดแอปที่คุณต้องการใช้งาน (เช่น Uber Eats) และ บันทึกภาพหน้าจอของหน้าจอที่มีปุ่มที่คุณต้องการแตะปรากฏอยู่
(※ ไม่สามารถใช้การแตะด้วยการจดจำภาพได้ในแอปที่ไม่สามารถจับภาพหน้าจอได้เนื่องจากเหตุผลด้านความปลอดภัย)
③ การสร้างมาโครใหม่และการตั้งค่าการแสดงผล
-
เปิด FRep2 และจากหน้าจอหลัก ให้แตะ
บันทึก(Record) >ใหม่(New) -
จากรายการการตั้งค่าทางด้านขวา ให้เปิด 【การตั้งค่าการแสดงผล】 (Display Settings) แตะที่
แสดงในทุกแอป(Show in any app) แล้วเลือกคลัง (ไม่แสดง)(Warehouse (No display))(※ ไม่จำเป็นต้องแสดงแผงควบคุมการทำงาน เนื่องจากเราจะเรียกใช้งานจากเบื้องหลังผ่านทางชอร์ตคัท)
④ การเขียนโปรแกรมจดจำภาพ
-
ในเมนู 【โปรแกรม】 (Program) ให้แตะ
แก้ไขเนื้อหาที่เล่น(Edit Trace) -
กดปุ่ม
+บนหน้าจอ แล้วแตะการจดจำภาพ(Image Recognition) >จากไฟล์ภาพ(From image file)(※ หากไม่สามารถเลือกรูปภาพได้ที่นี่ ให้ไปที่ "การตั้งค่า" ของเครื่อง > "แอป" แล้วเปิด FRep2 เพื่อให้สิทธิ์การเข้าถึงไฟล์รูปภาพ)
-
เปิดภาพหน้าจอที่เตรียมไว้ล่วงหน้า แล้วกด
ตกลง(Apply) ที่ด้านขวาล่าง
⑤ การระบุกรอบเป้าหมายที่ต้องการจดจำ
-
หน้าจอจะแสดงกรอบสี่เหลี่ยมสีน้ำเงิน กรอบสีน้ำเงินนี้คือ "เป้าหมายที่จะจดจำ"
-
ปรับจุดศูนย์กลางของกรอบให้ตรงกับตำแหน่งที่ต้องการแตะ (เช่น จุดศูนย์กลางของเครื่องหมาย "×" สำหรับการปฏิเสธงานใน Uber Eats)
-
สำคัญ: ยิ่งกรอบที่จดจำ "มีขนาดเล็ก" การประมวลผลก็จะยิ่งเร็วขึ้น หากเป็นปุ่มปฏิเสธ ให้ปรับกรอบให้แคบและยาว แล้วระบุให้ครอบคลุมเฉพาะบริเวณจุดศูนย์กลางของเครื่องหมาย × ก็เพียงพอแล้ว เมื่อระบุเสร็จแล้วให้กด
ตกลง(Apply) ที่ด้านขวาล่าง
⑥ การตั้งค่าการจดจำและการปรับขอบเขตการค้นหาให้เหมาะสม (หัวใจสำคัญของความเร็ว)
-
ในหน้าจอถัดไปที่ 【การตั้งค่าการจดจำ】 (Recognition Settings) ให้แตะที่
ความคล้ายคลึงของสี(Color similarity) แล้วเปลี่ยนเป็นค้นหา:ความคล้ายคลึง(Search: Similarity) -
ทำเครื่องหมายที่
แตะที่จุดศูนย์กลางของพื้นที่จดจำ(Tap center of recognition area) -
เมื่อแตะที่
ขอบเขตการค้นหา:ทั้งหน้าจอ(Search area: Full screen) จะมีรูปภาพที่มีตัวเลข 4 จุดปรากฏขึ้น -
แตะที่ "แสดงภาพ" (ไอคอนรูปนิ้วชี้ที่ภาพถ่าย) ที่มุมขวาบน

ตัวเลขในภาพจะเปลี่ยนไปตามขนาดหน้าจอ ดังนั้นอย่าอ้างอิงตัวเลขดังกล่าว แต่ให้ปรับขนาดด้วยอุปกรณ์ของคุณเองเสมอ
-
เฉพาะส่วนที่เป็นเป้าหมายที่คุณตั้งค่ากรอบสีน้ำเงินไว้ก่อนหน้านี้จะสว่างขึ้น
ในกรณีของปุ่มที่ตำแหน่งแนวตั้งเปลี่ยนไปตามป๊อปอัป เช่น ปุ่มปฏิเสธของ Uber Eats ให้ ขยายพื้นที่สว่างให้ครอบคลุมความกว้างสูงสุดที่ปุ่มนั้นอาจเลื่อนไป
(※ ในส่วนนี้ ยิ่งขอบเขตการค้นหาเล็กเท่าไหร่ การประมวลผลก็จะยิ่งเร็วขึ้นอย่างมหาศาล โปรดจำกัดไว้ให้เล็กที่สุดเท่าที่จำเป็น)
-
กด
ตกลง(Apply) เพื่อบันทึกการตั้งค่า -
ใน 【การตั้งค่าขั้นสูง】 (Advanced Settings) ให้เอาเครื่องหมายถูกออกหากไม่จำเป็นต้องบันทึกภาพหน้าจอ
-
กด
ปิด(Close) ที่ด้านขวาล่างเพื่อเสร็จสิ้นการตั้งค่าการค้นหาภาพ -
"รอ 5.0" (Wait 5.0) ที่มีอยู่ตั้งแต่ต้นในหน้าจอแก้ไขนั้นไม่จำเป็นและจะทำให้เสียเวลาโดยเปล่าประโยชน์ คุณสามารถลบออกได้เลย
⑦ การบันทึกการตั้งค่าและการตรวจสอบ
-
แตะ "ไอคอนฟลอปปีดิสก์" ที่มุมขวาบนเพื่อบันทึกการตั้งค่า
-
แตะ
บันทึก(Record) จากลูกศรย้อนกลับ (หรือไอคอนขีดสามขีด) ที่มุมซ้ายบนเพื่อกลับไปยังรายการการตั้งค่า -
แตะ
แผงมาตรฐาน(Standard Panel) ที่แถบด้านบน แล้วเปลี่ยนเป็นคลัง(Warehouse)
-
หากมาโครที่คุณเพิ่งสร้างขึ้นปรากฏขึ้นมา แสดงว่าการเตรียมการในฝั่ง FRep2 เสร็จสมบูรณ์แล้ว
6-3. การติดตั้งและการเปิดใช้งาน Shizuku (การรักษาความปลอดภัยของสิทธิ์ระบบและการปรับปรุงการตอบสนอง)
เพื่อให้สามารถดำเนินการระดับระบบที่ปกติแล้วต้องมีการ Root (เช่น การแตะหน้าจอแบบฮาร์ดแวร์ผ่าน ADB) เราจะให้ Shizuku ทำงานอยู่เบื้องหลังตลอดเวลา
(※ หากใช้การแตะด้วยการจดจำภาพใน FRep2 แม้ไม่มีการตั้งค่า Shizuku ก็สามารถทำงานได้ในระดับหนึ่ง แต่การมีสภาพแวดล้อม Shizuku จะทำให้การตอบสนองรวดเร็วขึ้นอย่างมาก จึงขอแนะนำให้ติดตั้งเป็นอย่างยิ่ง)
-
ติดตั้ง "Shizuku" จาก Google Play Store
(※ ข้อควรระวัง: ในอุปกรณ์บางรุ่นหรือบางประเทศ/ภูมิภาค เช่น Pixel 9a ในญี่ปุ่น อาจไม่พบ Shizuku ใน Play Store ในกรณีนั้น เพื่อความปลอดภัย โปรดดาวน์โหลดไฟล์ APK ล่าสุดโดยตรงจากหน้า Releases ของ GitHub ทางการที่ https://github.com/RikkaApps/Shizuku/releases แล้วทำการติดตั้ง (Sideload) ไม่แนะนำให้ดาวน์โหลดจากเว็บไซต์บุคคลที่สามที่ไม่ทราบแหล่งที่มา)
-
การเตรียมสภาพแวดล้อมเครือข่าย (สำคัญ): เนื่องจากต้องใช้ "Wireless Debugging" ในการเปิดใช้งาน Shizuku จึงจำเป็นต้องมีสภาพแวดล้อมที่สามารถเชื่อมต่อ Wi-Fi หรือเชื่อมต่อผ่าน Tethering จากสมาร์ทโฟนเครื่องอื่น โปรดเชื่อมต่อ Wi-Fi หรือ Tethering ในขั้นตอนนี้
(※ ไม่ต้องกังวล การเชื่อมต่อนี้มีไว้เพื่อเปิดใช้งาน Shizuku เท่านั้น หลังจากเปิดใช้งานสำเร็จแล้ว คุณสามารถยกเลิกการเชื่อมต่อได้ และจะไม่เป็นการใช้ข้อมูล (Packet) ของสมาร์ทโฟนเครื่องที่เป็นตัวปล่อย Tethering อย่างต่อเนื่อง)
-
การตรวจสอบตัวเลือกสำหรับนักพัฒนา: เพื่อความแน่ใจ ให้ตรวจสอบว่าใน
การตั้งค่า>ระบบ>ตัวเลือกสำหรับนักพัฒนาของเครื่องมีการเปิดใช้งาน "Wireless Debugging" ไว้แล้ว (หากไม่พบตัวเลือกสำหรับนักพัฒนา ให้แตะที่การตั้งค่า>เกี่ยวกับโทรศัพท์>หมายเลขบิลด์7 ครั้งติดต่อกันเพื่อเปิดใช้งาน) -
เปิดแอป Shizuku แล้วแตะ
การจับคู่(Pairing) ในส่วน "เริ่มจาก Wireless Debugging" -
ระบบจะนำคุณไปยังหน้าจอ Wireless Debugging ในตัวเลือกสำหรับนักพัฒนา ให้แตะที่
จับคู่อุปกรณ์ด้วยรหัสจับคู่(Pair device with pairing code) -
ป้อนรหัส 6 หลักที่ปรากฏขึ้นลงในช่องแจ้งเตือน (หรือป๊อปอัป) ของ Shizuku
-
กลับไปที่แอป Shizuku แล้วแตะ
เริ่ม(Start) หากมีข้อความ "Shizuku กำลังทำงานอยู่" ปรากฏขึ้นที่ด้านบน แสดงว่าสำเร็จ หลังจากยืนยันการเปิดใช้งานแล้ว คุณสามารถยกเลิกการเชื่อมต่อ Wi-Fi หรือ Tethering ได้ (※ หากรีสตาร์ทเครื่อง อาจจำเป็นต้องทำตามขั้นตอนการเปิดใช้งานนี้อีกครั้ง)
6-4. การตั้งค่า Key Mapper (การรีแมปอินพุตและการกำหนดการทำงาน)
นี่คือการตั้งค่าหลักเพื่อตรวจจับอินพุตจากปุ่มกดทางกายภาพและแปลงเป็นคำสั่งการทำงานตามต้องการ โดยขั้นตอนนี้จะเป็นการเชื่อมโยงการทำงานทั้งหมดเข้าด้วยกัน
※ ในการตั้งค่านี้ จำเป็นต้องกดปุ่มจริงเพื่อบันทึกสัญญาณ ดังนั้นโปรดเชื่อมต่อ (Pairing) ปุ่ม Bluetooth ที่คุณสร้างขึ้นเข้ากับสมาร์ทโฟนไว้ล่วงหน้า
-
ติดตั้งและเปิดแอป "Key Mapper" จาก Play Store
-
ในการเปิดใช้งานครั้งแรก ให้ทำตามคำแนะนำบนหน้าจอเพื่ออนุญาตสิทธิ์การเข้าถึง (Accessibility) และอนุญาตสิทธิ์ Shizuku ด้วย
-
แตะปุ่ม
+(หรือ+ new key map) ที่ด้านล่างของหน้าจอ เพื่อเปิดหน้าจอสร้างกฎ ซึ่งจะมีTriggerและActionsปรากฏอยู่ที่ด้านบนของหน้าจอ -
การบันทึกทริกเกอร์ (จุดเริ่มต้นการทำงาน):
-
แตะที่ปุ่มสีแดง
tap to record trigger(หรือRecord Trigger) ที่ด้านล่างของหน้าจอ -
ในขณะที่หน้าจอเปลี่ยนเป็น "Press your keys" ให้กด "ปุ่ม 1 (เช่น ปุ่มเพิ่มเสียง)" บนปุ่มกดทางกายภาพที่คุณสร้างขึ้น
-
หากหน้าจอแสดงชื่ออุปกรณ์ Bluetooth ที่คุณกดและสัญญาณอย่าง "Volume Up" แสดงว่าสำเร็จ
(※ ข้อควรทราบ: สัญญาณที่ส่งมาคือ "เพิ่มเสียง" แต่การผ่าน Key Mapper จะช่วยให้คุณสามารถแปลงเป็นคำสั่งอื่นที่คุณกำหนดไว้ได้ โดยที่ระดับเสียงของเครื่องจริงจะไม่เพิ่มขึ้น)
-
-
การตั้งค่าการทำงาน (2 แนวทาง):
ไปที่แท็บ
Actionsที่ด้านบนของหน้าจอ แล้วแตะAdd Actionที่ด้านล่าง รายการคำสั่งจะปรากฏขึ้น ให้เลือกวิธีใดวิธีหนึ่งต่อไปนี้ตามความต้องการของคุณ-
【วิธี A】 เชื่อมต่อกับมาโคร FRep2 (การแตะด้วยการจดจำภาพ / การใช้ทางลัด)
เรียกใช้มาโคร FRep2 ที่สร้างไว้ล่วงหน้าใน "6-2" ด้วยปุ่มกดทางกายภาพ
-
เลือก
Launch app shortcutจากรายการคำสั่ง -
รายการทางลัดจะปรากฏขึ้น ให้เลือก
ทางลัดของ FRep2 -
หน้าจอการตั้งค่า FRep2 จะเปิดขึ้น เนื่องจากมาโครที่สร้างไว้จะอยู่ใน "คลัง (Warehouse)" ให้เปลี่ยนรายการเป็น
คลัง (ซ่อนอยู่)แล้วเลือกมาโครที่เกี่ยวข้อง
-
สำหรับรายการเล่น ให้เลือก
เล่นตั้งแต่ต้น(※ วิธีนี้สามารถทำงานได้โดยไม่ต้องตั้งค่า Shizuku แต่หากอยู่ในสภาพแวดล้อมที่เปิดใช้งาน Shizuku การตอบสนองจะรวดเร็วกว่า)
-
-
【วิธี B】 ใช้ Shell command (การแตะแบบ ADB Hard Tap)
※ ในที่นี้จะขอยกตัวอย่างการตั้งค่าสำหรับคำสั่ง "ปฏิเสธ" ของ Uber Eats หากต้องการใช้เพื่อวัตถุประสงค์อื่น โปรดอ้างอิงจาก "6-5. การปรับแต่ง" เพื่อแก้ไข
-
เลือก
Shell commandจากรายการคำสั่ง -
เมื่อหน้าจอการตั้งค่า Shell command เปิดขึ้น ให้ใส่ชื่อในช่อง
Description(เช่น ปฏิเสธ Uber เป็นต้น) -
จากนั้น ให้คัดลอกและวางโค้ดด้านล่างนี้ลงในช่อง
Script# 1. 取得画面サイズ size=$(wm size | awk '{print $NF}'); w=${size%x*}; h=${size#*x} x=$((w * 86 / 100)) # 2. 座標計算(何度も使うので変数に入れます) y1=$((h * 565 / 1000)) y2=$((h * 528 / 1000)) y3=$((h * 491 / 1000)) y4=$((h * 454 / 1000)) y5=$((h * 417 / 1000)) # 3. 「動かないスワイプ」を実行 (75ミリ秒 = 0.075秒 押す) # tapではなくswipeを使い、始点と終点を同じにすることで「長押しタップ」になります input swipe $x $y1 $x $y1 75; sleep 0.2 input swipe $x $y2 $x $y2 75; sleep 0.2 input swipe $x $y3 $x $y3 75; sleep 0.2 input swipe $x $y4 $x $y4 75; sleep 0.2 input swipe $x $y5 $x $y5 75 -
เปลี่ยนการตั้งค่า
Execution Modeที่ด้านล่างเป็นADB(※ สำคัญ: ADB จะไม่ทำงานหากไม่ได้เชื่อมต่อกับ Shizuku นอกจากนี้ แอปอย่าง Uber Eats จะไม่สามารถแตะได้ในโหมด "Standard")
-
เมื่อตั้งค่าเสร็จแล้ว ให้แตะ
Doneที่มุมขวาล่างเพื่อบันทึก Shell command -
จากนั้นกลับไปที่หน้าจอตั้งค่าคำสั่ง แล้วกด
Doneที่มุมขวาล่างอีกครั้งเพื่อบันทึกคำสั่ง
-
-
-
การยกเลิกการเปลี่ยนระดับเสียง (สำคัญมาก) และการบันทึก:
ตรวจสอบให้แน่ใจว่าได้ทำเครื่องหมายถูก (เปิดใช้งาน) ที่ "Bypass" ซึ่งอยู่ที่ด้านล่างของหน้าจอกฎหรือในการตั้งค่า (Settings) สิ่งนี้จะทำให้เกิดสถานะที่ "ระดับเสียงของเครื่องจริงจะไม่เปลี่ยนแม้จะกดปุ่มทริกเกอร์ก็ตาม" เมื่อตรวจสอบเรียบร้อยแล้ว ให้แตะ
Doneที่มุมขวาล่างของหน้าจอเพื่อบันทึกการตั้งค่า -
การตรวจสอบการทำงานของ Key Mapper (สำคัญ):
เพื่อให้ Key Mapper ทำงานได้อย่างถูกต้อง จำเป็นต้องเปิด สวิตช์การทำงานทั้ง 2 จุด ให้เป็น ON
-
การเปิดใช้งานมาโครเฉพาะ: ตรวจสอบว่า
Enabledที่มุมขวาบนของรายการมาโครที่บันทึกไว้เป็น ON หรือไม่ -
การเปิดใช้งานตัว Key Mapper เอง: ตรวจสอบว่า
Running ↔️ Pausedที่ด้านบนของหน้าจอหลักเป็นRunningหรือไม่หากไม่เปิดทั้งสองจุด ปุ่มกดทางกายภาพจะไม่ตอบสนอง
-
ทำตามขั้นตอนเดียวกันนี้เพื่อสร้างกฎสำหรับ "ปุ่ม 2 (ลดเสียง)" หรือ "การกดพร้อมกัน (เล่น/หยุดชั่วคราว)" ตามลำดับ
6-5. การปรับแต่ง: สู่เครื่องมือสุดแกร่งในแบบของคุณเอง
สำหรับผู้เริ่มต้น แม้จะเป็นครั้งแรก แต่เมื่อตั้งค่ามาถึงจุดนี้แล้ว คุณน่าจะพอมองเห็นภาพรวมของกลไกทั้งหมดได้ ต่อไปนี้คือคำแนะนำสำหรับการปรับแต่งตามการใช้งานของคุณ
-
การเปลี่ยนทริกเกอร์หรือคำสั่ง: ลองเปลี่ยนปุ่มที่ใช้ตั้งค่า "ทริกเกอร์" หรือเปลี่ยนรายการคำสั่งเพื่อตั้งค่าเป็นการเปิดแอปพลิเคชัน (เช่น เปิด Google Maps) และทดลองใช้งานในรูปแบบต่างๆ
-
การปรับพิกัดของ Shell command: ในโค้ดวิธี B ครั้งนี้ เราคำนวณพิกัด X, Y เป็น
% (เปอร์เซ็นต์)เทียบกับขนาดหน้าจอ หากคุณเปลี่ยนตัวเลข คุณจะสามารถเปลี่ยนตำแหน่งการแตะได้อย่างอิสระ และเนื่องจากเป็นการระบุเป็น % จึงง่ายต่อการปรับใช้แม้จะเปลี่ยนไปใช้เครื่องอื่น แน่นอนว่าคุณสามารถระบุเป็นพิกเซล (px) โดยตรงได้เช่นกัน -
ความได้เปรียบด้านความเร็วในการประมวลผล: การใช้ Shell command เพื่อตั้งค่าพิกัดและแตะ จะให้ความเร็วในการประมวลผลที่เร็วกว่าการใช้ฟังก์ชันการแตะพิกัด X, Y มาตรฐานของ Key Mapper อย่างเห็นได้ชัด
-
เกี่ยวกับการกดรับงาน: แม้จะสามารถประยุกต์ใช้การตั้งค่าการแตะหรือการปัดเพื่อ "กดรับ" งานได้ แต่เนื่องจากมีความเสี่ยงสูงที่จะกดรับงานโดยไม่ตั้งใจ ในคู่มือนี้จึงไม่แนะนำและไม่ได้ใส่ตัวอย่างการตั้งค่าไว้ หากจำเป็นต้องใช้จริงๆ โปรดปรับแต่งด้วยความรับผิดชอบของตนเอง
-
การตั้งค่าที่แนะนำ: ขอแนะนำอย่างยิ่งให้ตั้งค่าปุ่มอื่นเพื่อใช้คำสั่ง "กลับไปยังแอปนำทาง (เช่น Google Maps)" หลังจากได้รับงานในขณะขับขี่
7. ข้อควรระวังและข้อจำกัดในการใช้งาน (เกี่ยวกับคุณสมบัติกันน้ำ)
อุปกรณ์นี้ถูกออกแบบมาเพื่อใช้งานในสภาพแวดล้อมที่สมบุกสมบัน แต่ก็มีข้อจำกัดทางโครงสร้าง
ไม่สามารถกันน้ำได้ 100%
คุณสามารถเพิ่มคุณสมบัติกันน้ำให้กับพื้นผิวของแผงวงจรได้โดยการทาสเปรย์เคลือบแผงวงจรหรือยาทาเล็บ อย่างไรก็ตาม เนื่องจากพอร์ต USB Type-C สำหรับชาร์จยังคงเปิดโล่งอยู่ จึงไม่สามารถปิดผนึกอุปกรณ์ทั้งหมดได้อย่างสมบูรณ์
หากจำเป็นต้องใช้งานในขณะฝนตก โปรดถือเป็นหลักการสำคัญว่าต้อง ติดตั้งไว้ภายในที่ครอบแฮนด์รถจักรยานยนต์ หรือใช้งานใน สภาพแวดล้อมที่มีหลังคา เท่านั้น หากน้ำเข้าทางพอร์ตเชื่อมต่อ อุปกรณ์จะเกิดไฟฟ้าลัดวงจรและเสียหายทันที
8. ข้อมูล STL สำหรับการพิมพ์ 3 มิติ (100 เยน)
เรามี ไฟล์ข้อมูล STL สำหรับการพิมพ์ 3 มิติ ของเคสที่แนะนำในบทความนี้จำหน่ายบน BOOTH ข้อมูลนี้ถูกออกแบบมาโดยเฉพาะเพื่อให้บอร์ดและแบตเตอรี่ประกอบกันได้อย่างพอดีในระดับมิลลิเมตร
หากคุณมีเครื่องพิมพ์ 3 มิติ สามารถดาวน์โหลดข้อมูลไปพิมพ์และใช้งานด้วยตัวเองได้เลย
【ข้อควรระวังก่อนสั่งซื้อ】 เคสนี้ได้รับการปรับขนาดให้เหมาะสมที่สุดสำหรับส่วนประกอบที่ระบุไว้ในคู่มือนี้ (โดยเฉพาะ Kailh Choc Brown และเทปกาวสองหน้าแบบเจลหนา 1.8 มม.) โปรดทราบว่าหากคุณใช้สวิตช์ที่แตกต่างออกไป หรือใช้เทปที่มีความหนาต่างกัน หรือมีสภาพแวดล้อมในการประกอบที่แตกต่างกัน ชิ้นส่วนอาจไม่สามารถประกอบเข้ากันได้พอดีและอาจไม่สามารถใช้งานได้



9. ความเป็นไปได้ที่ไร้ขีดจำกัด: สู่การแฮ็กครั้งต่อไป
ปุ่มนี้เดิมทีถูกออกแบบมาเพื่อใช้จัดการการ "รับ" หรือ "ปฏิเสธ" ออเดอร์ในการส่งอาหาร เพื่อให้สามารถดำเนินการได้ทันทีโดยไม่ต้องมองหน้าจอแม้ในขณะที่ฝนตก อย่างไรก็ตาม เมื่อคุณได้รับ "Physical Trigger" ที่ใช้งานได้หลากหลายแล้ว ขอบเขตการประยุกต์ใช้งานก็จะขยายออกไปอย่างไร้ขีดจำกัด
-
การเรียกใช้งาน AI ทันที: ใช้เป็นสวิตช์ทางกายภาพเพื่อเปิดโหมดป้อนข้อมูลด้วยเสียงหรือ API ของ ChatGPT ฯลฯ ได้ในทันที
-
การควบคุม IoT และสมาร์ทโฮม: เชื่อมต่อกับ Tasker ฯลฯ เพื่อควบคุมเครื่องใช้ไฟฟ้าจากระยะไกล หรือใช้เป็นทริกเกอร์สำหรับเรียก Webhook
-
การเล่นเกม: ใช้เป็นคอนโทรลเลอร์แบบกำหนดเองสำหรับเกมเฉพาะ โดยใช้โค้ดจัดการความหน่วงในการป้อนข้อมูลที่เป็นเอกลักษณ์
ท่ามกลางถนนที่โหดร้ายในวันที่ฝนตก หรือการลองผิดลองถูกกับการบัดกรีและการเขียนโค้ดบนโต๊ะทำงานในยามค่ำคืน ผมหวังว่าปุ่มเล็กๆ ที่เสร็จสมบูรณ์นี้จะช่วยแก้ปัญหาในหน้างานของทุกคน และกลายเป็นเมล็ดพันธุ์แห่ง "ความสนุก" ใหม่ๆ
ขอบคุณที่อ่านบันทึกที่เต็มไปด้วยความพยายามนี้จนจบ หากข้อมูลนี้เป็นเบาะแสในการเปลี่ยนสภาพแวดล้อมของคุณ หรือเป็นเชื้อไฟสำหรับการแฮ็กครั้งใหม่ นั่นถือว่าบรรลุวัตถุประสงค์แล้ว แล้วพบกันใหม่ในไอเดียถัดไปครับ