DIY 手機搖桿 - 歷程 === ※這是一篇關於這個專案的歷程,不想看太多廢話的話,可以前往[總結](https://hackmd.io/@rSaRMoxlSgirNiv5_UNTMQ/rJYhMdiLB)。 ![](https://i.imgur.com/1FhIJn8.jpg) 背景 --- ### 起因 去參加 Maker Faire Taipie 2019 的那天,手機在口袋放著放著...面板就裂掉了, Σ(;゚д゚) 還好顯示功能還正常(雖然也沒有正常到哪裡去,對特定角落施壓就會黑屏), 而觸控面板則是垂直方向 80% 沒有反應。 這下可好了,我的手機都是別人汰換的,可沒有閒錢立刻去換手機, 於是當天去地下街買了 OTG 應急,還真的因此經歷了在捷運裡拿滑鼠接電話的奇妙體驗。 ((( °Д°))) 當天晚上在旅館滑 Facebook 的時候發現有攤位在免費贈送蘑菇頭, 恩!?這不恰巧就是輸入零件嗎? (⊙ω⊙) ### 手機 這隻手機原本我是買二手的給長輩使用, 後來電池膨脹回到我手上,拿著朋友給的電池換上之後又使用了一陣子, 不小心摔到之後試著換了面板,失敗了一次,第二次更換的時候, 也不知道是安裝過程傷到面板還是零件的品質本來就不好; 觸控板的部份區域有點感應不良,試用了一小段時間感覺還是不太順就放庫存當備用機了, 幾個禮拜前現役的手機掉在路口被碾廢,才又把它拿出來使用, 這麼說來,這隻手機也真是歷經滄桑,我卻還繼續讓它服役呢~ ![](https://i.imgur.com/yZHL2JJ.png) 感覺它會踏上跟我的耳機相同的命運...不過那又是另一段故事了。 ### 理想的手機 作為先接觸電腦再接觸智慧型手機的一代人、鍵盤輸入比觸控板打字來得快的族群,難免對於機械式輸入設備總會有種不可言喻的偏好,加上童年時期總是會看到電影中的駭客用 PDA 接上電子鎖三兩下破解的橋段已經烙印在內心深處,所以我理想中的手機型態其實長得有點像 PSP呢。(謎:其實是不曾擁有 PSP 的補償心裡作祟吧?←_←) 開發 --- 因為原本的應急方案就是滑鼠對 OTG,我也不打算走更複雜的方式, 而手邊有的開發板就是 Arduino Uno, Nano, Pro Mini 三塊, 於是需求就定位為「用 Arduino 接 USB ,而且用蘑菇頭模擬滑鼠」了, 不過實際上使用 `arduino, usb, mouse` 等關鍵字查資料, 卻得到了好幾種方案: 1. 使用 Arduino library 內建的 `mouse` ,但是要使用特定的開發板 2. 從 COM port 丟訊號給 host,host 端再透過另外一支程式接收資訊後控制滑鼠 3. 修改 UNO 板上的 Atmega8u 韌體,讓 host 辨識裝置為滑鼠 4. 用 V-USB 讓開發板的 MCU 本身作為 USB 裝置 5. 直接外部接一個UART to HID Chip (來自前輩建議) 方法1,太貴了,我只是要幫重症的手機續命而已。 方法2,懶得寫 Android 上跑得程式,而且無法自動讀取滑鼠訊號,無法有效解決重症問題。 方法3,不想用UNO板,太大塊。(最終想搭載 pro mini) 方法5,手邊沒有這樣的 IC。 這樣看下來,方法 4 雖然有技術門檻,不過似乎是裡面唯一可行的... `_(:3」∠)_` ### Hello V-USB! 於是開發要面臨的第一個問題:我要怎麼讓 V-USB 的程式上傳到 Arduino ? 要接電路還要自己編譯不支援 Arduino IDE 的原始碼, 在努力爬文之後,總算是把 V-USB 提供的範例程式搞定了, 這個部份我有撰寫另外一篇文章「[V-USB HID mouse example with Arduino Nano](https://hackmd.io/@rSaRMoxlSgirNiv5_UNTMQ/B1p8O-P5B)」。 ### 電路與程式 其實長得有點像衛星(?) ![](https://i.imgur.com/t6ZABST.jpg) ![](https://i.imgur.com/fbNrBR2.jpg) 電路圖是用 gEDA 畫的: ![](https://i.imgur.com/Cnq8k9i.png) 程式碼:https://github.com/FlySkyPie/vusb-h-mouse-with-joystick , 不得不說我已經很久沒有用 C 寫單晶片了,寫起來還真不是那麼舒服呢。(╯°Д°)╯ ┻━┻ ### DEBUG 電路完成之後,與 host 的連線不是很順暢, 於是接上電腦查看 `dmesg`,原本還會看到: `Cannot enable. Maybe the USB cable is bad?` 、 `USB port nn disabled by hub (EMI?), re-enabling` 之類的訊息, 後來用熱塑土把電路封起來、加上鋁箔並且把線換掉之後就沒有看到這些訊息了,但是仍然會條件不明的發生故障,畢竟本身不是韌體專業的,這個 BUG 後來也不打算去處理了。 ![](https://i.imgur.com/dwPwWQ0.png) 成品 --- ![](https://i.imgur.com/1FhIJn8.jpg) ![](https://i.imgur.com/KJse8tY.jpg) {%youtube AGcx4iHGyZE %} ###### tags: `development note` `2019-11-04`