💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 调用方法: `setWatch(function,pin,options)` ## 参数 `function`\- 要执行的函数或字符串 `pin`\- 要监听的引脚 `options`\- 如果是布尔值或整数,它决定是调用一次 (false = 默认值)还是每次发生变化时都调用(true)。可以是形式为`{repeat:true/false(default),edge:'rising'/'falling'/'both'(default),debounce:10}`的对象 - 更多信息见下文。 ## 返回 可传递给 clearWatch 的 ID ## 描述 当引脚发生变化时调用指定的函数。使用 setWatch 设置的监控可以使用 clearWatch 来移除。 ~~~ { // 是重复触发回调(true),还是在第一次回调后移除监听(false)。 repeat: true, // (默认值: false), // 在信号的上升沿或下降沿触发。可以是一个字符串,或者 1 表示“上升沿falling”,-1 表示“下降沿falling”,0 表示“两者都有both”。 edge:'rising', //(default for built-in buttons)/'falling'/'both'(default for pins), // 使用软件去抖来防止在开关抖动时产生多次调用。 // 这是以毫秒为单位等待抖动平息的时间,或者为 0 表示禁用。 debounce:10, // (默认值是 0,内置按钮的默认值是 25。), // 高级:如果所提供的函数是一个“原生”函数(已编译或汇编的)。 // 设置 irq:true 将在中断本身中调用该函数。 irq : false, // (默认值 false) // 高级:如果指定了,那么每当调用监控时,都会读取给定的引脚。 // 并且该状态将作为`data`字段包含在回调中。 data : pin, // 高级:在北欧设备上,监控可以是“高”或“低”精度。 // 默认情况下使用低精度(这对功耗更好), // 但这意味着高速脉冲(小于 25 微秒)可能无法可靠接收。 // 设置 hispeed=true 允许检测高速脉冲,但以更高的空闲功耗为代价。 hispeed : true } ~~~ 函数回调会带有一个参数被调用,该参数是一个类型为 `{state:bool, time:float, lastTime:float} `的对象。 * `state`引脚当前是 `1` 还是 `0` * `time`引脚改变状态的时间(以秒为单位) * `lastTime` 是引脚最后改变状态的秒数。当使用 edge:'rising'(上升沿)或 edge:'falling'(下降沿)时,这与函数最后一次被调用的时间不一样。 * `data` 如果在选项中指定了 data:pin 则会包含该值,并且可以用于读取时钟数据。 例如,如果您想要测量一个正脉冲的长度,您可以使用: ~~~ setWatch(function(e) { console.log(e.time - e.lastTime); }, BTN, { repeat:true, edge:'falling' }); ~~~ 这将仅在脉冲的下降沿被调用,但将能够测量脉冲的宽度,因为 e.lastTime 是上升沿的时间。 在内部,一个中断会将引脚状态改变的时间以确切发生的时间写入一个队列,而提供给 setWatch 的函数仅从主消息循环中执行。然而,如果回调是一个原生函数 void (bool state),那么你可以在选项中添加 irq:true,这将导致该函数在中断内被调用。这样做时,中断会在两个边缘发生,并且不会有去抖。 **注意:** 如果你之前没有调用 pinMode,那么这个函数会将引脚的状态重置为`input`。 **注意:** STM32 芯片(用于 Espruino 板和 Pico)不能监控两个具有相同编号的引脚——例如 A0 和 B0。 **注意:** 在 nRF52 芯片上(用于 Puck.js、Pixl.js、MDBT42Q),setWatch 会禁用该引脚上的 GPIO 输出。为了能够再次向该引脚写入,你需要使用 clearWatch 禁用监控。