setRange()
描述
設定內部計數器的上限值(下限值總是為 0)。當計數器值遞增到上限值後回到 0,會觸發一次計數溢出的中斷事件;相反的,計數器值遞減到 0 後回到上限值,也會觸發一次計數回捲的中斷事件。
注意:從 86Duino Coding 105 版本以後才能使用這個函式,並且只可在 Pulse/DIR、CW/CCW、A/B Pulse 工作模式下使用。
語法
Enc0.setRange(val)
Enc0.setRange(val, condition)
Enc1.setRange(val)
Enc1.setRange(val, condition)
Enc2.setRange(val)
Enc2.setRange(val, condition)
Enc3.setRange(val)
Enc3.setRange(val, condition)
參數
Enc0、Enc1、Enc2、Enc3
:分別對應 ENC0、ENC1、ENC2、ENC3 編碼器介面。
val
:計數器的上限值,範圍是 1 ~ 4,294,967,295 (2^32 – 1)。假如設定此值為 199,那麼計數器值會在遞增到 199 後回到 0,或者遞減到 0 後回到 199 。
condition
:true 或 false。如果要啟動計數溢出和計數回捲的中斷事件,則設定 true,反之則設定 false。(預設值是 true)
回傳
無回傳值
範例
#include "Encoder.h" volatile int ovnumber = 0; volatile int uvnumber = 0; void encoder_callback(int flag) { if(flag == INTR_OVERFLOW) // 假如是計數溢出的中斷事件 ovnumber++; else if(flag == INTR_UNDERFLOW) // 假如是計數回捲的中斷事件 uvnumber++; } void setup() { Serial.begin(9600); Enc0.begin(MODE_AB_PHASE); Enc0.setRange(199); // 設定上限值為 199 Enc0.attachInterrupt(encoder_callback); // 掛載 callback 函式並啟動中斷功能 } void loop() { Serial.print("count = "); Serial.print(Enc0.read()); // 讀取編碼器的計數值 Serial.print(" "); Serial.print("overflow = "); Serial.print(ovnumber); // 印出計數溢出的次數 Serial.print(" "); Serial.print("underflow = "); Serial.println(uvnumber); // 印出計數回捲的次數 delay(100); }
See also
- setComparator()
- setIndexReset()
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.