在开发板的例程中,只提供了GPIO作输出口的示例,却寻不到作输入口的示例。 为此便探索了一下以按键控制LED的程序编写方法,其程序如下: app.json:
- {
- "version": "1.0.0",
- "io": {
- "led": {
- "type": "GPIO",
- "port": 4,
- "dir": "output",
- "pull": "pulldown"
- },
- "key": {
- "type": "GPIO",
- "port": 42,
- "dir": "input",
- "pull": "pullup"
- }
- },
- "debugLevel": "DEBUG",
- "repl": "enable"
- }
复制代码
该程序的作用是:将引脚4配置为输出口,以驱动板载DE LED灯;将引脚42配置为输入口,以便识别所连接的按键状态。 app.js:
- vargpio = require('gpio');
- var led = gpio.open({
- id: 'led',
- success: function() {
- console.log('gpio: open led success')
- },
- fail: function() {
- console.log('gpio: open led failed')
- }
- });
- varkey = gpio.open({
- id: 'key',
- success: function() {
- console.log('gpio: open key success')
- },
- fail: function() {
- console.log('gpio: open key failed')
- }
- })
- function delay() {
- for (vari=0; i<1000; i++)
- {
- for (vari=0; i<2000; i++)
- {
- system.versions();
- }
- }
- }
- function contrl() {
- while(1)
- {
- if(key.readValue())
- {
- console.log('led.writeValue(1)');
- led.writeValue(1);
- delay();
- }
- else
- {
- console.log('led.writeValue(0)');
- led.writeValue(0);
- delay();
- }
- }
- }
- contrl ();
- console.log('gpio: ready to test')
复制代码
该程序的作用是:运行所定义的函数contrl(),通过读取按键状态来控制LED灯的亮灭。 该程序的下载过程如图1所示,在下载后其默认状态是LED被点亮,当按键按下时则熄灭LED,其效果见图2和图3所示。
图1 程序下载
图2 默认状态
图3 按键状态 比较奇异的是,从GPIO的作用来看引脚SCL和引脚SDA的地位应是相同的,但在实际测试时却发现两者还是存在差异的,引脚SDA可作为输入口来识别按键的状态,但引脚SCL在设置为输入口之后却不能识别按键的状态来进行控制。 此外,为了扩展键位的需要并打算将按键连到阵列按键的接口上,却发现用这个接口的引脚也不能进行识别和控制。 阵列按键的接口电路如图4所示,不知为何在引脚上还串接了1K的电阻,通常情况下是无需添加这些电阻的。
图4 按键接口 由此可知,单凭GPIO的配置来使用各接口的引脚还是要慎重的,否则不一定是程序设计出现了问题,而是要从GPIO口的差异性上找一下原因。
|