使用加速度计和陀螺仪移动鼠标光标
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 位置。我需要加速度计或陀螺仪的值吗?还是我必须将它们结合起来? 我用一些新链接更新了我的问题。也许它会像那样工作?以上是关于使用加速度计和陀螺仪移动鼠标光标的主要内容,如果未能解决你的问题,请参考以下文章