旋鈕製作
http://mowei-tw.blogspot.tw/2015/06/kshootmania.html
V-USB 電路接法參考
http://coopermaa2nd.blogspot.tw/2011/10/v-usb-examples-for-arduino.html
D+ , D- 改接成下面
D+ 接腳2
D- 接腳3
按鈕4~10腳
導通到GND觸發
10接腳分 短按 長按 1秒當作分隔
A0,A1一個旋鈕
A2,A3一個旋鈕
程式碼&hex:https://www.dropbox.com/s/j6nek8wpndflp4b/KshootJOY.rar?dl=0
#include "UsbJoystick.h" class rotaryDevice { private: int analogInPin[2]; int newValue[2]; int oldValue[2]; int rotarytrigger; unsigned long rotarytime; public: rotaryDevice(int Pin, int Pin1) { analogInPin[0] = Pin; analogInPin[1] = Pin1; rotarytrigger = 0; rotarytime = 0; oldValue[0] = analogRead(analogInPin[0]); oldValue[1] = analogRead(analogInPin[1]); } int rotaryChanged() { newValue[0] = analogRead(analogInPin[0]); newValue[1] = analogRead(analogInPin[1]); int rotaryresult = rotary(); if (rotaryresult == 1) { rotarytrigger = 1; rotarytime = millis(); return 1; } else if (rotaryresult == -1) { rotarytrigger = 2; rotarytime = millis(); return 2; } if (rotarytrigger > 0) { if ((millis() - rotarytime) < 30) { if (rotarytrigger == 1) { return 1; } else if (rotarytrigger == 2) { return 2; } } else { rotarytrigger = 0; } } return 0; } int rotary() { int type = oldValue[0] - newValue[0]; int type1 = oldValue[1] - newValue[1]; if (newValue[0] > 900 || newValue[0] < 1) { if (abs(type1) > 15) { oldValue[0] = newValue[0]; oldValue[1] = newValue[1]; if (type1 < 0) { return 1; } else { return -1; } } } else if (newValue[1] > 900 || newValue[1] < 1) { if (abs(type) > 15) { oldValue[0] = newValue[0]; oldValue[1] = newValue[1]; if (type < 0) { return 1; } else { return -1; } } } else { if (abs(type) > 10 && abs(type1) > 10) { oldValue[0] = newValue[0]; oldValue[1] = newValue[1]; if (type < 0 && type1 < 0) { return 1; } else if (type > 0 && type1 > 0) { return -1; } } } return 0; } }; //BUTTON 0~9 int But0 = 4; //4~13 int But9 = 13; unsigned long startButTime = 0; unsigned long startButdownTime = 0; int startButTrigger = 0; int startButstate = 0; rotaryDevice rotary = rotaryDevice(A0, A1); rotaryDevice rotary2 = rotaryDevice(A2, A3); void setup() { for (int i = But0; i <= But9; i++) { pinMode(i, INPUT_PULLUP); } UsbJoystick.setup(); } void loop() { UsbJoystick.update(); int rotaryresult = rotary.rotaryChanged(); if (rotaryresult == 1) { UsbJoystick.setButton(12); } else if (rotaryresult == 2) { UsbJoystick.setButton(13); } int rotaryresult2 = rotary2.rotaryChanged(); if (rotaryresult2 == 1) { UsbJoystick.setButton(14); } else if (rotaryresult2 == 2) { UsbJoystick.setButton(15); } for (int i = 0; i < 6; i++) { if (digitalRead(But0 + i) == LOW) { UsbJoystick.setButton(i); } } if (startButTrigger == 0 && digitalRead(10) == LOW) { startButTrigger = 1; startButTime = millis(); } if (startButTrigger == 1 && digitalRead(10) == HIGH) { if ((millis() - startButTime) < 1000) { UsbJoystick.setButton(6); startButstate = 1; startButdownTime = millis(); } else { UsbJoystick.setButton(7); startButstate = 2; startButdownTime = millis(); } startButTrigger = 0; } if (startButstate > 0) { if ((millis() - startButdownTime) < 100) { if (startButstate == 1) { UsbJoystick.setButton(6); } else if (startButstate == 2) { UsbJoystick.setButton(7); } } else { startButstate = 0; } } UsbJoystick.sendMsg(); }
留言
張貼留言