国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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的評論 (共 條)

分享到微博請遵守國家法律
胶南市| 岗巴县| 淄博市| 通山县| 西平县| 聂荣县| 江城| 天台县| 海口市| 隆德县| 合江县| 岑巩县| 墨竹工卡县| 虹口区| 永丰县| 龙川县| 隆回县| 汤阴县| 沾化县| 宁德市| 保山市| 电白县| 博爱县| 县级市| 长垣县| 汉寿县| 安徽省| 阿鲁科尔沁旗| 张家口市| 华容县| 乌什县| 海门市| 离岛区| 汤原县| 屯门区| 城固县| 莱西市| 扬州市| 赞皇县| 通河县| 黎平县|