步骤1:直接上代码
var mraa = require("mraa");
var led = new mraa.Gpio(13);
led.dir(mraa.DIR_OUT);
var ledstate = true;
var key = new mraa.Gpio(8);
key.dir(mraa.DIR_IN);
key.isr(mraa.EDGE_RISING, func
tion(){
setTimeout(function(){
if(1 == key.read()){
led.write(ledstate?1:0);
ledstate = !ledstate;
}
},20);//
消抖
});
//
主循环
setInterval(function(){
}, 1000);
步骤2:分析代码
首先需要
mraa
模块的支持,
var mraa = require(“mraa”)
,可以吧括号中的
mraa
看做一个类,前面的变量
mraa
看做是
mraa
类的一个实例。
创建变量
led
,通过
mraa
实例绑定到
13
号
IO
口上,并设置
GPIO
口的方向为输出。
创建变量
key
,通过
mraa
实例绑定到
8
号
IO
口上,并设置
GPIO
口的方向为输入。
通过
key.isr
注册中断向量,
EDGE_RISING
设置为上升沿触发中断,中断服务函数为后面的匿名函数
function(){}
,作用是控制
led
亮或灭。
在终端服务函数中,需要对按键按下这个过程进行消抖处理,通过
setTimeout
实现
20
毫秒的延时,
20
毫秒之后读取按键状态,判定是否为抖动。
注意最后要有一个主循环,如果没有主循环的话,程序会停止。
步骤3:实验现象
GROVE
套件的按键模块接到
D8
接口上,发现没按下一次按键,
DS2
灯变换一次状态。
总结:
操作
IO
口之前有两件事情:
1、引入
mraa
模块:
var mraa = require(“mraa”);
2、绑定
IO
:
var led = new mraa.Gpio(13);
IO
口的读写指令:
1、led.write()
2、Led.read()
注册中断向量:
Key.isr(mraa.EDGE_RISING, function(){})
|