单片机学习小组
直播中

贺楠

7年用户 933经验值
私信 关注

怎样去使用Arduino Leonardo制作一种免驱蓝牙鼠标呢

Leonardo HC-05串口模块的优点与缺点有哪些呢?
怎样去使用Arduino Leonardo制作一种免驱蓝牙鼠标呢?





回帖(2)

邹俩珍

2022-1-24 09:15:12
板子使用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;
    }
  }
}
举报

刘艳芳

2022-1-24 09:15:12
板子使用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;
    }
  }
}
举报

更多回帖

×
20
完善资料,
赚取积分