|
步骤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(){})
|