ตามกระแสอย่างต่อเนี่องในยุคโรคระบาดแบบนี้ สิ่งที่ตามมาคือ Work From Home ผ่านทางโปรแกรมต่าง ๆ อาจารย์หลายท่าน Live ทาง Facebook ผู้เขียนคาดว่าก็คงใช้โปรแกรม OBS กันเป็นส่วนมาก หรือสายเกมเมอร์ก็มีโปรแกรมอย่าง Discord ไว้พูดคุยกัน ทีนี้ปัญหาหลายคนคืออยากมีลูกเล่นเยอะ หรือการตัดเปลี่ยนหน้าจอต่าง ๆ มักต้องใช้การคลิกเม้าส์ซึ่งก็จะเสียงดังคลิ๊กแทรกลงไปที่ไมค์ด้วย อีกทั้งยังต้องเลื่อนหาคำสั่งต่าง ๆ ที่ต้องการ บางครั้งอาจซ่อนอยู่ในแท็ปเมนูเล็ก ๆ ปัญหาเหล่านี้ผู้เขียนก็เจอเองครับเวลาใช้ OBS งั้นเรามาลองทำแผงควบคุมกับเถอะ เวลาอยากเปลี่ยนฉาก กดปุ่มที่แผงของเราครั้งเดียว จบเกม หากนึกไม่ออกก็ให้ดูรูปที่ยกมาด้านล่างครับ ลักษณะมันจะเป็นแผงมีปุ่มกด เราก็ไม่ต้องไปคลิกที่หน้าจอ (แค่จำให้ได้ว่าปุ่มไหนทำอะไร จะเขียนใส่เทปกาวแปะไว้ก็ได้)

แต่เครื่องพวกนี้ราคาก็มีตั้งแต่หลักพัน หลักหมื่น หลักแสน ให้เลือกซื้อ และบางครั้งมีเงินก็ซื้อไม่ได้เพราะต้องรอของเข้ามา หรือไม่ถูกใจ ฟังก์ชั่นไม่ตรงกับที่อยากได้ เรามาทำใช้เองซะเลยครับ หลักการง่าย ๆ คือในโปรแกรมคอมพิวเตอร์ทุกโปรแกรมเขามักจะทำคีย์ลัด (Hotkeys) มาให้เพื่ออำนวยความสะดวกจะได้ไม่ต้องเลื่อนเมาส์หาแค่กดคีย์บอร์ด ซึ่งจะกดอะไรก็จะมีบอกอยู่หลังคำสั่งต่าง ๆ อย่างที่เมาส์ไฮไลท์อยู่ก็คือคำสัง Edit Transform ให้กด Ctrl+E เป็นต้น (รูปประกอบด้านล่าง) แบบเดียวกับตอนทำรายงานส่งครูแล้วเรากด Ctrl+C เพื่อคัดลอก Ctrl+X เพื่อตัด Ctrl+V เพื่อวาง เนื้อหาจากกูเกิลนั่นแหละ
แต่จะเห็นว่า OBS มันจะไม่ค่อยมีคีย์ลัดให้เราใช้ ซึ่งมันให้อิสระเราตั้งค่าได้ตามใจเลยครับ โดยการคลิกที่ Settings > Hotkeys
ซึ่งในการทำโปรเจคนี้ จะต้องใช้บอร์ดที่เป็นชิป ATmega32u4 ก็คือ Arduino Leonardo หรือ Arduino Pro Micro ย้ำว่า Pro Micro นะครับไม่ใช่ Pro Mini หรือบอร์ดในตระกูล SAMD Micro (Esplora, Zero, Due and MKR Family) ก็ใช้ได้ครับ เนื่องจากเราจะใช้ Library Keyboard ซึ่งจะใช้ได้กับบอร์ดที่มีฟังก์ชั่นนี้เท่านั้น เอาหล่ะ เราไปดูคำสั่งต่าง ๆ ของ Library นี้กันดีกว่า
Keyboard.begin() ใส่ไว้ใน setup() เพื่อสั่งให้เริ่มทำงาน
Keyboard.end() ใช้หยุดการทำงาน เช่น เราจะให้เสียบบอร์ดปุ๊บ กด 'A' แล้วจบห้ามทำอย่างอื่นอีก ก็ใช้ end ปิดการทำงานมันไป
Keyboard.press() คำสั่งนี้จะทำงานเหมือนเรากดปุ่มค้างไว้ เช่น Keyboard.press('a') ก็มีค่าเท่ากับการกดปุ่ม a ที่คีย์บอร์ดค้างไว้นั่นเอง
Keyboard.print() เป็นเหมือนการพิมพ์ไปยังคอมพิวเตอร์ เช่น Keyboard.print("Hello Summer") ก็มีค่าเท่ากับเราพิมพ์บนคีย์บอร์ดปกติเป็นคำว่า Hello Summer
Keyboard.println() เหมือน print เพียงแต่พิมพ์เสร็จแล้วจะขึ้นบรรทัดใหม่ (คงคุ้นคำสั่งกันดีแหละครับ)
Keyboard.release() คำสั่งให้ปล่อยปุ่มที่กดค้างอยู่ สมมติว่าเรา press 'a' และ 'b' จากนั้นเขียนคำสั่ง Keyboard.release('b') จะเป็นการปล่อยปุ่ม b เพียงปุ่มเดียว โดยที่ a ก็ยังคงกดค้างอยู่
Keyboard.releaseAll() ใช้ปล่อยปุ่มทั้งหมดที่มีการกดค้างอยู่ (ไม่ต้อง release ทีละตัวให้เปลืองบรรทัดโปรแกรมนั่นเอง)
Keyboard.write() คำสั่งนี้ทำงานเหมือนกับ press เพียงแต่จะเป็นการส่งรหัส ASCII เช่นจะกด 'A' รหัส ASCII ของ 'A' ก็คือ 65 ได้คำสั่งเป็น Keyboard.write(65) หรือจะเขียน Keyboard.write('A') หรือฐานสอง Keyboard.write(0b01000001) ก็ได้เช่นกัน เป็นต้น (แต่การใช้ write นี้อาจไม่รองรับ ASCII บางตัว ใช้ press ง่ายกว่าครับ)
สำหรับรหัส ASCII เราได้เคยเขียนบทความไว้แล้ว สามารถคลิกอ่านได้ที่นี่ เรามาเริ่มทำโปรเจคกันเลยดีกว่า บอกก่อนว่าโปรเจคนี้เป็นการสร้างคร่าว ๆ ให้ดูนะครับ ไม่ได้สร้างชิ้นงานจริง ๆ ใครสร้างใช้จริงก็ทำให้สวยงาม และมีแนวทางการพัฒนาต่อด้านล่าง เริ่มจากเรามาออกแบบกันก่อน ในที่นี้ผู้เขียนจะทำตัวอย่างให้ดู 4 ปุ่มเท่านั้นนะครับ ด้านฮาร์ดแวร์ก็ต่อปุ่มกดธรรมดาพื้นฐานเลย
ทีนี้มาเขียนโปรแกรมกัน ก็เป็นโปรแกรมง่าย ๆ เลย คือ เช็คค่าจากการกดปุ่ม ถ้ามีสัญญาณที่ต่างไปจากเดิม ก็ press ปุ่มต่าง ๆ ที่เราต้องการ จากนั้นก็ releaseAll จบการทำงานไปครับ ทีนี้ใครทำร้อยปุ่มก็ไม่ยาก เพียงแค่ก็อปปี้โค้ดไปวาง เปลี่ยน input และคีย์ที่จะใช้แค่นั้นเอง งานง่ายก็ทำกันง่าย ๆ แบบนี้เลยครับ จะได้ Complier ผ่าน ใช้งานกันได้เร็ว ๆ ง่าย ๆ
เพียงเท่านี้ เสียบสาย USB เข้ากับคอมพิวเตอร์ เราก็จะสามารถควบคุมคอมพิวเตอร์เพียงแค่กดปุ่มเท่านั้น ซึ่งก็ไม่ใช่เฉพาะโปรแกรมนี้นะครับ จะใช้กับโปรแกรมไหนก็ได้ จะทำ Ctrl+C Ctrl+V พื้น ๆ ก็ได้เลย ทีนี้มาว่าด้วยการพัฒนาครับ ใครอยากทำให้มันดีขึ้น ผู้เขียนก็ขอเสนอแนวทางดังนี้ เผื่อใครมีไอเดียดี ๆ ในการไปทำต่อ - ใช้ตัวต้านทานปรับค่าได้ หรือใช้ Rotary Encoder ไว้บิดหมุนเพิ่มลดเสียง - เพิ่มปุ่มให้มากขึ้น (เป็นสิบ ๆ ปุ่ม) โดยใช้ PCF8574 เพื่อขยาย Digital I/O - ใช้ millis() แทน delay() ในการ Debouce เพื่อไม่ให้ไปขวางการทำงานของโค้ดส่วนอื่น - เพิ่มให้เลือกใช้ได้เป็นชุด ๆ เช่น โหมดแรกใช้ OBS โหมดที่สองใช้กับ Chrome โหมดสามใช้กับ Word เป็นต้น - เขียน GUI ทำงานร่วมกับ EEPROM เพื่อให้สามารถตั้งค่าและปรับเปลี่ยนคีย์ต่าง ๆ ได้ง่าย หวังว่าบทความนี้คงพอเข้าใจ และสร้างเป็นอุปกรณ์ไว้ใช้ประโยชน์กันในบ้านได้จริง ๆ นะครับ นี่แหละคือประโยชน์ของ Arduino มันไม่ใช่แค่ของเล่นเด็ก มันสามารถสร้างชิ้นงานได้จริง และใช้งานได้จริง และก็ไม่ใช่กระจอกงอกง่อย ออกแบบ Hardware ที่มาพ่วงให้ดี ๆ ไฟไม่เกิน มีระบบป้องกัน มันทำงานยาว ๆ ได้สบายครับ อันนี้ผู้เขียนพิสูจน์มาแล้วอย่างน้อยก็ 2 ปีที่ใช้งาน Arduino UNO ทำโปรเจคนึงมา ทำงานตลอดปิดบ้างตอนปรับปรุงและทำความสะอาด ทุกวันนี้มันยังทำงานอยู่ครับ เป็นกำลังใจให้สร้างสรรค์ผลงานออกมา อาจจะต่อยอดเป็นธุรกิจใหญ่โตก็เป็นได้ วันนี้ขอลาไปก่อนดื้อ ๆ ครับ สวัสดี