上次活动拿到了DFRobot Leonardo & Xbee R3 控制器,一如既往的用料,还有标志性的颜色:
想起来还有上次赠送的徽章,想了下,做个锁屏的装置吧。使用徽章作为锁屏的触发。比如,起身离开的时候,轻触徽章即可锁住屏幕。很早之前我用模拟USB的方法做过一次【参考1】,有这个想法的缘由很简单: 上大学的时候,当团支书,负责同学交入Party申请书之类的事情(很值得骄傲的是作为熟读历史经常思考的年轻人,我从来没有写过申请书)。 想入Party有一关是“群众评议”,就是看看是否有反对的意见。当时我和班级上的同学说“一个好人,进入Party是追求进步,是好事,有机会让他改造好;一个坏人,进入Party,也是好事情,能让群众队伍更纯洁。大家都不要反对哈”。我们班级在这一关从来没有过什么问题。后来有一次,我去帮同学交入Party申请书,顺便讨价还价一下(我记得有规定是交了之后必须间隔一段才能进入正式的程序,为此我会和辅导员讨价还价一番,让申请书落款的时间提前几个月)。辅导员不在,我就稍等了一下。期间无聊,顺便翻翻其他班级的评议,结果让我大吃一惊,真有班级同学特别认真的反对某个人的,罗列了很多条意见。正在我看在兴头上,辅导员看到急忙过来将东西收了起来,半开玩笑的批评另外帮忙的女同学,说这样的东西怎么能让这种人看到………所以信息安全非常重要。时至今日,写在纸上的东西越来越少,电脑上的内容越来越多。当你起身去上厕所或者喝水的时候,是否可曾担心屏幕上的信息被人有意或者无意的看到?或者你外出办事,是否担心有人悄悄操作你的电脑?解决这个问题最简单的办法就是给Windows设置一个密码,然后在离开的时候按下 WinKey+L 。 因此,我们可以使用Arduino 模拟这个过程,按下锁屏键。 硬件上除了 Leonardo板子,还要用到徽章,还有一个导线,导线一端插入 A0口,一段接在徽章后面。徽章正面是绝缘的,需要处理一下,我用锡箔包裹了一下,导电部分留在边缘。 代码是根据【参考2】【参考3】改编的。 [mw_shl_code=c,true]//Leonardo to MakeyMake
//http://www.alsrobot.cn/article-91.html
#include <Keyboard.h>
#define MOD_GUI_LEFT 0x83 // Win 按键
int InPut0 = 0; //触控输入值初始化
int TouchedValue = 200; //临界比较值,需要根据你的材质摆放进行测试
void setup()
{
Serial.begin(9600);
pinMode(A0, INPUT); //使用A0接受输入
pinMode(9, INPUT_PULLUP); //为了防止程序错误干扰下次烧写,这里设计了一个开关
while (digitalRead(9)==HIGH) {}; //只有当对应的 D9 接地才会继续
Keyboard.begin();
}
void loop()
{
InPut0 = analogRead(A0); //检测A0的输入
Serial.println(InPut0); //Debug用
if(InPut0 <= TouchedValue ) //检测按键并去抖动
{
delay(20);
InPut0 = analogRead(A0); //检测A0的输入
if(InPut0 <=TouchedValue)
{
Serial.println("Get pressed"); //有按键
Keyboard.press(MOD_GUI_LEFT); //按下 Win Key
Keyboard.press('l'); //按下 L
//delay(200);
Keyboard.releaseAll(); //抬起全部按键
}
}
delay(1000); //1秒检查一次是否有按键
}[/mw_shl_code] 最终的样子,经过测试工作正常:
有几个需要注意的地方: 第一, 不要把徽章放在导电的物体上,这样会造成很大的干扰; 第二, 细心的朋友可能注意到,设计上我还在D9短接到地,这样的设计是为了防止编写键盘鼠标程序时,影响上位机的代码,比如,程序除了错误,会一直向电脑上输入字符。加上这个设计,相当于加入了一个硬件开关; 第三, 代码中用来判断当前是否有触摸的那个数值是实际测量得出的,需要根据具体实现来选定。 参考:
|