虚拟鼠标实验
实验现象
按键模拟鼠标向左移动,向右移动,点击左键等操作
原理图
代码编写
#include<Mouse.h>
#define KEY1 2 //左移
#define KEY2 3 //右移
#define KEY3 4 //左键
int Flag_up = 1;
void setup()
{
pinMode(KEY1, INPUT_PULLUP);
pinMode(KEY2, INPUT_PULLUP);
pinMode(KEY3, INPUT_PULLUP);
Mouse.begin();
}
void loop()
{
if ( ScanKey(1) == 1) //左移
{
Mouse.move(-40, 0); //左移40
}
else if (ScanKey(1) == 2) //右移
{
Mouse.move(40, 0);
}
else if (ScanKey(1) == 3) //左键按下
{
Mouse.click(MOUSE_LEFT);
}
}
unsigned char ScanKey(int mode) //按键扫描程序,返回键值
{
if (mode) //mode = 1时候,该代码支持长按。mode = 0时候,不支持长按
{
Flag_up = 1;
}
if (Flag_up && (digitalRead(KEY1) == LOW || digitalRead(KEY2) == LOW || digitalRead(KEY3) == LOW) ) //当Flag_up = 1并且按键按下时
{
Flag_up = 0; //清空Flag_up
delay(30); //延时去抖动
if (digitalRead(KEY1) == LOW) //按键按下
{
return 1; //返回键值1
}
if (digitalRead(KEY2) == LOW) //按键按下
{
return 2; //返回键值2
}
if (digitalRead(KEY3) == LOW) //按键按下
{
return 3; //返回键值3
}
}
if (digitalRead(KEY1) == HIGH && digitalRead(KEY2) == HIGH && digitalRead(KEY3) == HIGH) //按键松开时候
{
Flag_up = 1; //置位Flag_up
}
return 0; //返回键值0
}