五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

分享到微博請遵守國家法律
敖汉旗| 嘉定区| 讷河市| 青河县| 寿宁县| 正安县| 中宁县| 湘阴县| 松滋市| 高要市| 鸡东县| 邢台县| 巩留县| 永仁县| 富锦市| 潮安县| 百色市| 如皋市| 宁波市| 上栗县| 庐江县| 遵化市| 都安| 兴业县| 县级市| 大足县| 洛宁县| 泾阳县| 宿迁市| 潞西市| 陇西县| 吴江市| 华阴市| 轮台县| 郯城县| 喀喇沁旗| 酉阳| 思茅市| 保亭| 南京市| 壤塘县|