完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
板子使用Arduino LeonardoHC-05串口模块。
优点:
界面和网站上东拼西凑的,有些是重复的,几个蓝牙文件的连接和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 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串口模块。
优点:
界面和网站上东拼西凑的,有些是重复的,几个蓝牙文件的连接和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 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; } } } |
|
|
|
只有小组成员才能发言,加入小组>>
3309 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9050 浏览 16 评论
4084 浏览 18 评论
1168浏览 3评论
601浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
592浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2329浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1892浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 12:32 , Processed in 1.070766 second(s), Total 81, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号