本帖最后由 jinglixixi 于 2021-11-4 15:56 编辑
在例程中有2种控制LED的方式,一种是采用延时的方式来控制LED输出高低电平来产生闪烁效果,另一种则是采用类似中断的处理方式来按一定的时间来控制LED的状态进行翻转。由于第一种方式是采用for循环的方式,故在执行一定次数后便停止了;而第2种方式则会持续地执行下去。 学习了例程的编程方法,我们如果来编写自己的程序呢? 1.控制外挂的LED模块 为了后面能以GPIO口来模拟I2C通讯以驱动OLED屏,故选取的引脚是Arduino接口上的SDA,这样就可以直接将LED模块的线直接插入接口来使用。
图1 Arduino接口 实现LED模块控制的程序如下: app.json:
- {
- "version": "1.0.0",
- "io": {
- "led": {
- "type": "GPIO",
- "port": 42,
- "dir": "output",
- "pull": "pulldown"
- }
- },
- "debugLevel": "DEBUG"
- }
复制代码
app.json:
- var gpio = require('gpio');
- var led = gpio.open({
- id: 'led',
- success: function() {
- console.log('gpio: open led success')
- },
- fail: function() {
- console.log('gpio: open led failed')
- }
- });
- var vol = 0;
- function ledblink() {
- console.log('ledblink');
- led.toggle();
- }
- var id1 = setInterval(ledblink, 1000);
- var id2 = setInterval(function() {
- console.log('setInterval');
- }, 500);
- console.log('gpio: ready to test')
复制代码
程序下载的过程如图2所示,其执行效果见图3和图4所示。
图2下载程序
图3熄灭状态
图4点亮状态 动画演示:
2.同时控制2个LED 既然我们可以随心所欲地使用GPIO口来输出,那又该如何同时控制2个乃至多个LED呢? 其实现的方法就是在文件app.JSON中同时创建22个乃至多个GPIO实例,其形式如下: app.json:
- {
- "version": "1.0.0",
- "io": {
- "led1": {
- "type": "GPIO",
- "port": 4,
- "dir": "output",
- "pull": "pulldown"
- },
- "led2": {
- "type": "GPIO",
- "port": 42,
- "dir": "output",
- "pull": "pulldown"
- }
- },
- "debugLevel": "DEBUG",
- "repl": "enable"
- }
复制代码
app.js:
- vargpio = require('gpio');
- var led1 = gpio.open({
- id: 'led1',
- success: function() {
- console.log('gpio: open led1 success')
- },
- fail: function() {
- console.log('gpio: open led1 failed')
- }
- });
- var led2 = gpio.open({
- id: 'led2',
- success: function() {
- console.log('gpio: open led2 success')
- },
- fail: function() {
- console.log('gpio: open led2 failed')
- }
- })
- varvol = 0;
- functionledblink() {
- console.log('ledblink');
- led1.toggle();
- led2.toggle();
- }
- var id1 = setInterval(ledblink, 1000);
- var id2 = setInterval(function() {
- console.log('setInterval');
- }, 500);
- console.log('gpio: ready to test')
复制代码
经图5所示的程序下载过程,其执行效果见图6和图7所示。
图5 下载过程
图6 熄灭状态
图7 点亮状态 动画演示:
3.按键的判别检测 掌握了GPIO口的输出功能,接下来的目标就是解决其输入的用法,常见的就是按键的状态判别处理。 稍感意外的是,在进行程序测试时却并未见到预期的效果,其程序如下: app.json:
- {
- "version": "1.0.0",
- "io": {
- "key": {
- "type": "GPIO",
- "port": 42,
- "dir": "input",
- "pull": "pulldown"
- }
- },
- "debugLevel": "DEBUG"
- }
复制代码
app.js:
- vargpio = require('gpio');
- var key = gpio.open({
- id: 'key',
- success: function() {
- console.log('gpio: open key success')
- },
- fail: function() {
- console.log('gpio: open key failed')
- }
- });
复制代码
后经排查与判别条件的表达形式有关,排除后其效果如图8所示,说明程序已运行,且处理正确。 |