无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

30位旋轉(zhuǎn)編碼器EC11輸出30脈沖 --Arduino

2021-03-17 14:54 作者:ShoryLee  | 我要投稿

手上的旋轉(zhuǎn)編碼器是30位的,網(wǎng)上搜到的大都說30位15脈沖,我從網(wǎng)上也找來一個示例下載后運行,果然是只能輸出15個脈沖,覺得不解,那其他的15位不就浪費了?而且每旋轉(zhuǎn)2位才輸出一個脈沖,那個無輸出的位就顯得很不合理。直到在B站看了一個UP(機電匠)的介紹視頻,請教過后才找到解決這個問題的想法。

旋轉(zhuǎn)編碼器

網(wǎng)上找來的示例,能實現(xiàn)15脈沖輸出,且支持正反轉(zhuǎn)計數(shù)。在此基礎(chǔ)上,通過B站UP提示的?對A腳的上升沿和下降沿都需要檢測?我對示例進行了調(diào)整,示例中其實只對下降沿做了判斷,上升沿并沒有處理。源程序沒有使用中斷,我也不會使用。就想著,如果AB腳被上拉了,如何還有上升沿?是拉低后恢復上拉時候產(chǎn)生的上升沿嗎?
示例來源:https://www.basemu.com/how-to-use-rotary-encoder-arduino.html
B 站來源:https://www.bilibili.com/video/BV1uv411q7Wy

源程序并沒有串口輸出值,而是調(diào)節(jié)LED亮度,我將其改為直接輸出值。強烈建議查看以上2個來源。
Arduino 測試例程:
/*
采樣編碼器 200Hz 使用 millis() 函數(shù)
*/
int Value = 0;? ? // 編碼器輸出值
int Step = 5;? ? // 定義每次旋轉(zhuǎn)的步進值

unsigned long currentTime;
unsigned long loopTime;

const int pin_A = 2;
const int pin_B = 3;

unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;

void setup()??{

??Serial.begin(115200);

??pinMode(pin_A, INPUT_PULLUP); //設(shè)置上拉輸入,是否就不用外部上拉?
??pinMode(pin_B, INPUT_PULLUP);

??currentTime = millis();
??loopTime = currentTime;
}

void loop()??{
??// 獲取經(jīng)過的時間
??currentTime = millis();
??if(currentTime >= (loopTime + 5)){
? ? // 5ms = 200Hz??
? ? encoder_A = digitalRead(pin_A);? ? // 讀取編碼器值
? ? encoder_B = digitalRead(pin_B);? ?

? ? // A腳 高電平轉(zhuǎn)低電平,下降沿
? ? if((!encoder_A) && (encoder_A_prev)){
? ?? ?// A從高到低
? ?? ?if(encoder_B) {
? ?? ???// B 高電平,順時針
? ?? ???// 增加,不要超過255
? ?? ???if(Value + Step <= 255) Value += Step;? ?? ?? ?? ?? ?
? ?? ?} else {
? ?? ???// B 低電平,逆時針? ?? ?
? ?? ???// 降低,不要低于0
? ?? ???if(Value - Step >= 0) Value -= Step;? ?? ?? ?? ?? ?
? ?? ?}? ?
? ? }
? ? // A腳 低電平轉(zhuǎn)高電平,上升沿
? ? if((encoder_A) && (!encoder_A_prev)){
? ?? ?if(!encoder_B) {
? ?? ???// 增加,不要超過255
? ?? ???if(Value + Step <= 255) Value += Step;? ?? ?? ?? ?? ?
? ?? ?} else {? ???
? ?? ???// 降低,不要低于0
? ?? ???if(Value - Step >= 0) Value -= Step;? ?? ?? ?? ?? ?
? ?? ?}? ?
? ? }
? ? // 存儲A腳狀態(tài)??
? ? encoder_A_prev = encoder_A;

? ? // 輸出
? ? Serial.println(Value);? ?
? ? // 更新循環(huán)時間
? ? loopTime = currentTime;??
??}
??// 其他補充的代碼,可以從這里開始
}

30位旋轉(zhuǎn)編碼器EC11輸出30脈沖 --Arduino的評論 (共 條)

分享到微博請遵守國家法律
晋中市| 齐齐哈尔市| 兴隆县| 哈密市| 五河县| 犍为县| 郎溪县| 兴义市| 平陆县| 古丈县| 浦东新区| 松原市| 南陵县| 东光县| 翼城县| 历史| 梁河县| 礼泉县| 平塘县| 广州市| 五家渠市| 华宁县| 沙湾县| 四川省| 蓬莱市| 绥芬河市| 怀安县| 丰都县| 逊克县| 吉首市| 拉孜县| 台前县| 开封县| 沁阳市| 大余县| 旬阳县| 德清县| 双流县| 滦南县| 松滋市| 绍兴县|