使用加速度计和陀螺仪移动鼠标光标

Posted

技术标签:

【中文标题】使用加速度计和陀螺仪移动鼠标光标【英文标题】:Move mouse cursor with accelerometer and gyroscope 【发布时间】:2019-12-16 08:20:33 【问题描述】:

希望你能帮助我!

我想用陀螺仪和加速度计的值来控制我的电脑光标。所以基本上当我移动传感器时,应该移动光标。我使用了 MPU-6050 芯片和 ESP32。

我如何获得光标的位置:

public static void main (String[] args)

        for(int i = 0; i<= 1000000; i++) 

        PointerInfo info = MouseInfo.getPointerInfo();

        Point location = info.getLocation();

        System.out.println("x="+ location.x + " y=" + location.y);


如何从传感器获取值:

 public SensorData(JsonObject data) 
    //accerlation accelerometer
    ax = data.get("ax").asDouble()/ASENSETIFITY;
    ay = data.get("ay").asDouble()/ASENSETIFITY;
    az = data.get("az").asDouble()/ASENSETIFITY;

    //temperature 
    temp = data.get("t").asDouble()/340.00+36.53;

    //gyroscope
    gx = data.get("gx").asDouble()/GSENSETIFITY;
    gy = data.get("gy").asDouble()/GSENSETIFITY;
    gz = data.get("gz").asDouble()/GSENSETIFITY;



public String toString() 
    return "ax: " + Double.toString(ax) +", ay: " + Double.toString(ay)
        +", az: " + Double.toString(az) +", temp: " + Double.toString(temp)
        +", gx: " + Double.toString(gx) +", gy: " + Double.toString(gy)
        +", gz: " + Double.toString(gz);


到目前为止我得到了什么:

package mouse;

import java.awt.AWTException;

import java.awt.Robot;
import Connection.SensorData;

public class MouseMoving 
Robot robot;

public MouseMoving()
    try 
        robot = new Robot();
     catch (AWTException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    



    public static void verarbeite(SensorData data)

    System.out.print("Deine Maus befindet sich da:");
    System.out.println(data);

    //robot.mouseMove(1,1);



   

我的问题:

我现在如何控制光标?你有什么想法吗?

我想,您需要鼠标光标的最后一个位置,然后获取传感器的当前位置并更改鼠标位置。但是我怎样才能用我的价值观来写这个呢?

我找到了this 网站,当传感器移动时,3 个物体在电脑上旋转。但这不是用 Java 编写的,我不明白他的解决方案。

我还发现了this 和this 的问题。也许它会像那样工作。但是我编程时间不长,看不懂。

【问题讨论】:

机器人有帮助吗? docs.oracle.com/javase/7/docs/api/java/awt/Robot.html @BrianAgnew 我更新了我的问题:到目前为止我得到了什么。我尝试了 Robot 和 Robot.MouseMove,但我只能将光标移动到一个 x 和 y 位置。但是,每当我移动传感器时,都应该移动光标。这可以用 mousemove 吗? 【参考方案1】:

如果我很好地理解了您的问题,那么您正在尝试使用 Java 移动鼠标光标。为此,您可以使用 Robot 类,该类具有 MouseMove(int x, int y) 方法。

默认情况下,它会将光标定位在主屏幕上。如果您有多个屏幕设置,则必须传递一个 GraphicsDevice 对象来指示应该使用哪个屏幕。

例如,将光标向右移动 10 个像素

PointerInfo pointerInfo = MouseInfo.getPointerInfo();
Point mouseLocation = pointerInfo.getLocation();
GraphicsDevice graphicsDevice = pointerInfo.getDevice();
new Robot(graphicsDevice).MouseMove(mouseLocation.getX()+10, mouseLocation.getY());

【讨论】:

感谢您的回答!是的,我之前尝试过 MouseMove。但我只能传递一个新的 X 和 Y 位置,但鼠标应该永久移动。所以每当我移动传感器时,鼠标也应该移动。可以用 MouseMove 写这个吗? 好的,我明白了!但是我现在如何根据传感器数据移动鼠标?移动传感器时应移动 X 和 Y 位置。我需要加速度计或陀螺仪的值吗?还是我必须将它们结合起来? 我用一些新链接更新了我的问题。也许它会像那样工作?

以上是关于使用加速度计和陀螺仪移动鼠标光标的主要内容,如果未能解决你的问题,请参考以下文章

使用加速度计+陀螺仪的小汽车模型位置计算

硬件架构设计 | 惯性导航系统

请问三轴加速度传感器加三轴陀螺仪怎样测动态姿态,能不能说详细点,谢谢!

使用加速度计和陀螺仪的 6DOF

使用陀螺仪和加速度计获取方向

使用加速度计和陀螺仪获取手机在太空中的大致位置