板子使用Arduino LeonardoHC-05串口模块。
优点:
- 32u4支持USB,免驱动,即插即用。用CH341的板子协议写上位机程序,不能即插即用,而且每个电脑都装了CH341驱动。
- 安装方便,只需三根杜邦线即可,VCC GND RX
- 编程简单
缺点:
操作界面很容易连接个人+Python=任何给对象的操作界面,简单的界面是我用本机界面操作的Java语言
界面和
网站上东拼西凑的,有些是重复的,几个蓝牙文件的连接和ppt的部分代码是重复的,程序能够编译成功,全靠强大的,哪里就可以了。hc -05,当然应该是其他的Arduino Leonardo 的直接开发板子,多少块钱,支持,键盘键盘。的,一个没有学过的编程方法,于是我在断断续续地判断,VR 接收到的数据不完整,并没有影响,原来使用手机的传感器计算方法很顺。 ,用角和拉来发射鼠标的XY,调出结果有多种方法,滚动了多种轴的取法,每次都是最长时间越长,延迟,然后用二乘法然而,如此求出过滤结果,但实际上却用了却还是有卡号……但实际上,却有很大的不同,而且往往会来回受什么问题几乎没有解决办法,估计最近没有我学过PID的,还有一个可能是数据的弯路到达了……游戏的差距很大,一个很慢的一个。 ,修改了运行板的
网页代码,来自于
其他的实现。
我用了一个非常简单的长度,如果你的手指和手指移动的长度,
如果X和Y都小于5个像素,则发送单击信号,实测完美。双指功能没有做,不会。
if (detaX < 5 && detaY <5){
sendSignal("*C1");
}
Arduino全部代码:
#include"Keyboard.h"
#include"Mouse.h"
int oldx = 0;
int oldy = 0;
int x = 0;
int y = 0;
//SoftwareSerial mySerial(2,3);//RX=2,TX=3
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
void setup() {
// put your setup code here, to run once:
// Serial.begin(115200); //设置串口波特率9600
Serial1.begin(115200);
// inputString.reserve(200);
}
void loop() {
if(stringComplete){
if(inputString[0]='*'){
if(inputString[1]=='C'){
if(inputString[2]=='4'){
Keyboard.press(KEY_LEFT_CTRL);
delay(5);
Keyboard.press(KEY_LEFT_GUI);
delay(5);
Keyboard.press(KEY_LEFT_ARROW);
delay(5);
Keyboard.release(KEY_LEFT_ARROW);
delay(5);
Keyboard.release(KEY_LEFT_GUI);
delay(5);
Keyboard.release(KEY_LEFT_CTRL);
}
else if(inputString[2]=='6'){
Keyboard.press(KEY_LEFT_CTRL);
delay(5);
Keyboard.press(KEY_LEFT_GUI);
delay(5);
Keyboard.press(KEY_RIGHT_ARROW);
delay(5);
Keyboard.release(KEY_RIGHT_ARROW);
delay(5);
Keyboard.release(KEY_LEFT_GUI);
delay(5);
Keyboard.release(KEY_LEFT_CTRL);
}
else if(inputString[2]=='h'){
keyClick(KEY_F5);
}
else if(inputString[2]=='u'){
keyClick(KEY_UP_ARROW);
}
else if(inputString[2]=='d'){
keyClick(KEY_DOWN_ARROW);
}
else if(inputString[2]=='l'){
keyClick(KEY_LEFT_ARROW);
}
else if(inputString[2]=='r'){
keyClick(KEY_RIGHT_ARROW);
}
else if(inputString[2]=='e'){
keyClick(KEY_ESC);
}
else if(inputString[2]=='s'){
Keyboard.press(KEY_RIGHT_ALT);
}
else if(inputString[2]=='g'){
Keyboard.release(KEY_RIGHT_ALT);
}
else if(inputString[2]=='1'){
Mouse.click(MOUSE_LEFT);
}
else if(inputString[2]=='2'){
Mouse.click(MOUSE_MIDDLE);
}
else if(inputString[2]=='3'){
Mouse.click(MOUSE_RIGHT);
}
else if(inputString[2]=='v'){
Mouse.press(MOUSE_LEFT);
}
else if(inputString[2]=='^'){
Mouse.release(MOUSE_LEFT);
}
else if(inputString[2]=='t'){
keyClick(KEY_TAB);
}
else if(inputString[2]=='n'){
Keyboard.press(KEY_LEFT_SHIFT);
delay(5);
Keyboard.press(KEY_F5);
delay(5);
Keyboard.release(KEY_F5);
delay(5);
Keyboard.release(KEY_LEFT_SHIFT);
}
}
else{
if(inputString[1]=='x'){
int yl = getyindex(inputString);
x = inputString.substring(2,yl).toInt();
y = inputString.substring(yl+1,-1).toInt();
int x_dist = (x-oldx);
int y_dist = (y-oldy);
Mouse.move(x_dist,y_dist);
oldx=x;
oldy=y;
}
}
}
inputString="";
stringComplete = false;
}
}
int getyindex(String a){
for(int i=0;i
if(a
=='y'){
return i;
}
}
}
void keyClick(int a){
Keyboard.press(a);
delay(1);
Keyboard.release(a);
}
void serialEvent1() {
while (Serial1.available()>0) {
// if(stringComplete){
// inputString="";
// }
char inChar = (char)Serial1.read();
if(!stringComplete){
if(inputString[0]=='*'){
inputString += inChar;
}
else{
if (inChar =='*'){
inputString="*";
}
}
}
if (inChar == 'n') {
stringComplete = true;
}
}
}
板子使用Arduino LeonardoHC-05串口模块。
优点:
- 32u4支持USB,免驱动,即插即用。用CH341的板子协议写上位机程序,不能即插即用,而且每个电脑都装了CH341驱动。
- 安装方便,只需三根杜邦线即可,VCC GND RX
- 编程简单
缺点:
操作界面很容易连接个人+Python=任何给对象的操作界面,简单的界面是我用本机界面操作的Java语言
界面和
网站上东拼西凑的,有些是重复的,几个蓝牙文件的连接和ppt的部分代码是重复的,程序能够编译成功,全靠强大的,哪里就可以了。hc -05,当然应该是其他的Arduino Leonardo 的直接开发板子,多少块钱,支持,键盘键盘。的,一个没有学过的编程方法,于是我在断断续续地判断,VR 接收到的数据不完整,并没有影响,原来使用手机的传感器计算方法很顺。 ,用角和拉来发射鼠标的XY,调出结果有多种方法,滚动了多种轴的取法,每次都是最长时间越长,延迟,然后用二乘法然而,如此求出过滤结果,但实际上却用了却还是有卡号……但实际上,却有很大的不同,而且往往会来回受什么问题几乎没有解决办法,估计最近没有我学过PID的,还有一个可能是数据的弯路到达了……游戏的差距很大,一个很慢的一个。 ,修改了运行板的
网页代码,来自于
其他的实现。
我用了一个非常简单的长度,如果你的手指和手指移动的长度,
如果X和Y都小于5个像素,则发送单击信号,实测完美。双指功能没有做,不会。
if (detaX < 5 && detaY <5){
sendSignal("*C1");
}
Arduino全部代码:
#include"Keyboard.h"
#include"Mouse.h"
int oldx = 0;
int oldy = 0;
int x = 0;
int y = 0;
//SoftwareSerial mySerial(2,3);//RX=2,TX=3
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
void setup() {
// put your setup code here, to run once:
// Serial.begin(115200); //设置串口波特率9600
Serial1.begin(115200);
// inputString.reserve(200);
}
void loop() {
if(stringComplete){
if(inputString[0]='*'){
if(inputString[1]=='C'){
if(inputString[2]=='4'){
Keyboard.press(KEY_LEFT_CTRL);
delay(5);
Keyboard.press(KEY_LEFT_GUI);
delay(5);
Keyboard.press(KEY_LEFT_ARROW);
delay(5);
Keyboard.release(KEY_LEFT_ARROW);
delay(5);
Keyboard.release(KEY_LEFT_GUI);
delay(5);
Keyboard.release(KEY_LEFT_CTRL);
}
else if(inputString[2]=='6'){
Keyboard.press(KEY_LEFT_CTRL);
delay(5);
Keyboard.press(KEY_LEFT_GUI);
delay(5);
Keyboard.press(KEY_RIGHT_ARROW);
delay(5);
Keyboard.release(KEY_RIGHT_ARROW);
delay(5);
Keyboard.release(KEY_LEFT_GUI);
delay(5);
Keyboard.release(KEY_LEFT_CTRL);
}
else if(inputString[2]=='h'){
keyClick(KEY_F5);
}
else if(inputString[2]=='u'){
keyClick(KEY_UP_ARROW);
}
else if(inputString[2]=='d'){
keyClick(KEY_DOWN_ARROW);
}
else if(inputString[2]=='l'){
keyClick(KEY_LEFT_ARROW);
}
else if(inputString[2]=='r'){
keyClick(KEY_RIGHT_ARROW);
}
else if(inputString[2]=='e'){
keyClick(KEY_ESC);
}
else if(inputString[2]=='s'){
Keyboard.press(KEY_RIGHT_ALT);
}
else if(inputString[2]=='g'){
Keyboard.release(KEY_RIGHT_ALT);
}
else if(inputString[2]=='1'){
Mouse.click(MOUSE_LEFT);
}
else if(inputString[2]=='2'){
Mouse.click(MOUSE_MIDDLE);
}
else if(inputString[2]=='3'){
Mouse.click(MOUSE_RIGHT);
}
else if(inputString[2]=='v'){
Mouse.press(MOUSE_LEFT);
}
else if(inputString[2]=='^'){
Mouse.release(MOUSE_LEFT);
}
else if(inputString[2]=='t'){
keyClick(KEY_TAB);
}
else if(inputString[2]=='n'){
Keyboard.press(KEY_LEFT_SHIFT);
delay(5);
Keyboard.press(KEY_F5);
delay(5);
Keyboard.release(KEY_F5);
delay(5);
Keyboard.release(KEY_LEFT_SHIFT);
}
}
else{
if(inputString[1]=='x'){
int yl = getyindex(inputString);
x = inputString.substring(2,yl).toInt();
y = inputString.substring(yl+1,-1).toInt();
int x_dist = (x-oldx);
int y_dist = (y-oldy);
Mouse.move(x_dist,y_dist);
oldx=x;
oldy=y;
}
}
}
inputString="";
stringComplete = false;
}
}
int getyindex(String a){
for(int i=0;i
if(a
=='y'){
return i;
}
}
}
void keyClick(int a){
Keyboard.press(a);
delay(1);
Keyboard.release(a);
}
void serialEvent1() {
while (Serial1.available()>0) {
// if(stringComplete){
// inputString="";
// }
char inChar = (char)Serial1.read();
if(!stringComplete){
if(inputString[0]=='*'){
inputString += inChar;
}
else{
if (inChar =='*'){
inputString="*";
}
}
}
if (inChar == 'n') {
stringComplete = true;
}
}
}
举报