## 調用方法:
`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 禁用監控。
- Espruino簡介
- API
- 全局Globals
- acceleration()
- analogRead(pin)
- analogWrite(pin, value, options)
- atob(base64Data)
- btoa(binaryData)
- changeInterval(id, time)
- clearInterval(id)
- clearTimeout(id)
- clearWatch(id)
- compass()
- decodeURIComponent(str)
- digitalPulse(pin, value, time)
- digitalRead(pin)
- digitalWrite(pin, value)
- dump()
- echo(echoOn)
- edit(funcName)
- encodeURIComponent(str)
- eval(code)
- getPinMode(pin)
- getSerial()
- getTime()
- isFinite(x)
- isNaN(x)
- load(filename)
- parseFloat(string)
- parseInt(string, radix)
- peek16(addr, count)
- peek32(addr, count)
- peek8(addr, count)
- pinMode(pin, mode, automatic)
- poke16(addr, value)
- poke32(addr, value)
- poke8(addr,value)
- print(text, ...)
- require(moduleName)
- reset(clearFlash)
- save()
- setBusyIndicator(pin)
- setDeepSleep(sleep)
- setInterval(function, timeout, args, ...)
- setSleepIndicator(pin)
- setTime(time)
- setTimeout(function, timeout, args, ...)
- setWatch(function, pin, options)
- shiftOut(pins, options, data)
- show(image)
- trace()
- ESP8266
- ESP8266.crc32
- ESP8266.deepSleep
- ESP8266.dumpSocketInfo
- ESP8266.getFreeFlash
- ESP8266.getResetInfo
- ESP8266.getState
- ESP8266.logDebug
- ESP8266.neopixelWrite
- ESP8266.ping
- ESP8266.printLog
- ESP8266.readLog
- ESP8266.reboot
- ESP8266.setCPUFreq
- ESP8266.setLog
- ESP32
- ESP32.deepSleep(us)
- ESP32.deepSleepExt0(pin, level)
- ESP32.deepSleepExt1(pinVar, mode)
- ESP32.enableBLE(enable)
- ESP32.enableWifi(enable)
- ESP32.getState()
- ESP32.getWakeupCause()
- ESP32.reboot()
- ESP32.setAtten(pin, atten)
- ESP32.setBLE_Debug(level)
- ESP32.setOTAValid(isValid)
- Wifi
- event associated
- event auth_change
- Wifi.connect(ssid, options, callback)
- event connected
- event dhcp_timeout
- Wifi.disconnect(callback)
- event disconnected
- Wifi.getAPDetails(callback)
- Wifi.getAPIP(callback)
- Wifi.getDetails(callback)
- Wifi.getHostByName(hostname, callback)
- Wifi.getIP(callback)
- Wifi.getStatus(callback)
- Wifi.ping(hostname, callback)
- event probe_recv
- Wifi.restore()
- Wifi.save(what)
- Wifi.scan(callback)
- Wifi.setAPIP(settings, callback)
- Wifi.setConfig(settings)
- Wifi.setHostname(hostname, callback)
- Wifi.setIP(settings, callback)
- Wifi.setSNTP(server, tz_offset)
- event sta_joined
- event sta_left
- Wifi.startAP(ssid, options, callback)
- Wifi.stopAP(callback)
- Wifi.turbo(enable, callback)
- Modules
- Modules.addCached(id, sourcecode)
- Modules.getCached()
- Modules.removeAllCached()
- Modules.removeCached(id)
- Flash
- Flash.erasePage(addr)
- Flash.getFree()
- Flash.getPage(addr)
- Flash.read(length, addr)
- Flash.write(data, addr)
- Storage
- Storage.compact(showMessage)
- Storage.debug()
- Storage.erase(name)
- Storage.eraseAll()
- Storage.getFree(checkInternalFlash)
- Storage.getStats(checkInternalFlash)
- Storage.hash(regex)
- Storage.list(regex, filter)
- Storage.open(name, mode)
- Storage.optimise()
- Storage.read(name, offset, length)
- Storage.readArrayBuffer(name)
- Storage.readJSON(name, noExceptions)
- Storage.write(name, data, offset, size)
- Storage.writeJSON(name, data)
- StorageFile
- StorageFile.erase()
- StorageFile.getLength()
- StorageFile.pipe(destination, options)
- StorageFile.read(len)
- StorageFile.readLine()
- StorageFile.write(data)
- 模塊 Modules
- 使用模塊進行工作
- 內置模塊
- Espruino 模塊
- 來自 Github(或互聯網上的任何地方)
- 從 Storage 加載模塊
- 從 NPM 加載模塊
- 從一個本地文件夾
- 從 SD 卡 加載模塊
- 從互聯網加載模塊
- 已有模塊
- 常見問題
- 編寫和提交模塊(或更改)