最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

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

分享到微博請遵守國家法律
兴和县| 沾益县| 武城县| 德钦县| 邵阳县| 兴业县| 祁东县| 绥棱县| 武夷山市| 锡林浩特市| 汝州市| 奉贤区| 定西市| 平南县| 鹰潭市| 海原县| 远安县| 车险| 南澳县| 神池县| 文昌市| 丹东市| 册亨县| 万山特区| 阿克| 大宁县| 汾阳市| 鄂州市| 保康县| 郁南县| 虎林市| 渭南市| 江门市| 曲松县| 三原县| 万宁市| 灵川县| 泾川县| 井研县| 滁州市| 阿荣旗|