readNanoseconds()
描述
此函式只能在 PWM 脈波捕捉模式下使用,功能和 read() 相同,但回傳 ns (Nanosecond)單位的脈波寬度。
語法
Enc0.readNanoseconds()
Enc1.readNanoseconds()
Enc2.readNanoseconds()
Enc3.readNanoseconds()
參數
Enc0、Enc1、Enc2、Enc3
:分別對應 ENC0、ENC1、ENC2、ENC3 編碼器介面。
回傳
回傳脈波 LOW 或 HIGH 的寬度(單位:ns),最長回傳寬度約 4.2 秒。注意:readNanoseconds()
只能在 ISR 函式內被呼叫,如果在其它地方被呼叫,將總是回傳 0。
範例
#include <Encoder.h> volatile unsigned long num1 = 0L; volatile unsigned long num2 = 0L; void encoder_isr(int flag) { // ISR 函式 if(flag == INTR_A_PULSE_LOW) num1 = Enc1.readNanoseconds(); // 讀取脈波 LOW 寬度 else if(flag == INTR_A_PULSE_HIGH) num2 = Enc1.readNanoseconds(); // 讀取脈波 HIGH 寬度 } void setup() { Serial.begin(9600); Enc1.begin(MODE_CAPTURE); Enc1.attachInterrupt(encoder_isr); // 掛載 ISR 函式並啟動中斷功能 } void loop() { Serial.print("LOW:"); Serial.print(num1); // 印出脈波 LOW 的寬度,單位:ns Serial.print(" "); Serial.print("HIGH:"); Serial.println(num2); // 印出脈波 HIGH 的寬度,單位:ns delay(100); }
See also
- begin()
- attachInterrupt()
The text of the 86Duino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.