极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12513|回复: 6

Mouse.move问题

[复制链接]
发表于 2014-6-21 00:11:07 | 显示全部楼层 |阅读模式
本帖最后由 ken0137 于 2014-7-1 16:48 编辑

通过串口发一个字符串给下位机leonardo,使得电脑上的鼠标移动,出现了很奇怪的问题

  1. void setup()
  2. {  
  3. //  Serial.begin(9600);     //使用9600的波特率进行串口通讯
  4.   Serial1.begin(9600);     //使用9600的波特率进行串口通讯
  5.   Mouse.begin();  //启动鼠标库
  6. }

  7. void loop()
  8. {  
  9.    int comdata = 0;int inString=0;
  10.    while (Serial1.available() > 0)  
  11.    {   
  12.      comdata=Serial1.read();//first char
  13.      inString =Serial1.parseInt();//num   
  14.    }
  15.    switch (comdata)
  16. //=======向左移动鼠标====================
  17.     case 'L'://Move Left
  18.       {  
  19.         inString=0-inString;
  20.         Mouse.move(int(inString),0,0);
  21.         Serial1.print("L:");
  22.         Serial1.println(inString);
  23.        break;
  24.     //=======向右移动鼠标====================
  25.      case 'R'://Move Right
  26.       {  
  27.         Mouse.move(int(inString),0,0);
  28.         Serial1.print("R:");
  29.         Serial1.println(inString);      
  30.        break;
  31.       }  
  32. }
复制代码
这里我输入字符串“L100”,意思上向左移动100个单位,这个是正常的,但是我输入L500,则向右移动一点点,困惑啊,求高手指点


===========================
越界了,signed char型数据的范围-128-127
===========================
回复

使用道具 举报

发表于 2014-6-21 11:45:47 | 显示全部楼层
是不是出界了?  距离是 byte?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-21 19:28:58 | 显示全部楼层
本帖最后由 ken0137 于 2014-6-25 09:12 编辑
zoologist 发表于 2014-6-21 11:45
是不是出界了?  距离是 byte?


~~


回复 支持 反对

使用道具 举报

发表于 2014-6-21 19:56:46 | 显示全部楼层
看一下 http://arduino.cc/en/Reference/MouseMove 应该是可以的啊

建议你写个循环  看看是不是有取值上的限制啊?

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-22 02:02:33 | 显示全部楼层
zoologist 发表于 2014-6-21 19:56
看一下 http://arduino.cc/en/Reference/MouseMove 应该是可以的啊

建议你写个循环  看看是不是有取值上 ...


我实验了一下,貌似以128为界限,进行上下移动,256为周期,
例如Mouse.move(0,128,0);则不动,
当超过128时,比如为129,则向下移动过界1,就到了最上面,效果同Mouse.move(0,-127,0)
这里奇怪的是当向下移动数值128的偶数倍时,
Mouse.move(0,255/256/257,0);这样三种,鼠标都不动,
并以此类推,实验了511/512/513,767/768/769,1023/1024/1025,都不动;
128的奇数倍时,例如128,384,640等也不动,
好像是有规律,但不知道为什么是这样的?
回复 支持 反对

使用道具 举报

发表于 2014-7-1 13:48:31 | 显示全部楼层
ken0137 发表于 2014-6-22 02:02
我实验了一下,貌似以128为界限,进行上下移动,256为周期,
例如Mouse.move(0,128,0);则不动,
当超 ...


http://arduino.cc/en/Reference/MouseMove

Syntax

Mouse.move(xVal, yPos, wheel);


Parameters

xVal: amount to move along the x-axis - signed char
yVal: amount to move along the y-axis - signed char
wheel: amount to move scroll wheel - signed char



signed char 只有 8 位吧。。。其中还有一位是符号位。超了会溢出的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-1 16:47:05 | 显示全部楼层
fatfox 发表于 2014-7-1 13:48
http://arduino.cc/en/Reference/MouseMove

Syntax

怪不得了,2的七次就是128,-128~+127
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-9 13:14 , Processed in 0.034153 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表