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

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

分享到微博請遵守國家法律
乌兰县| 桃源县| 龙陵县| 无棣县| 安阳市| 茌平县| 鱼台县| 清丰县| 开封县| 沙田区| 子长县| 遵义县| 宁陵县| 五峰| 稻城县| 类乌齐县| 剑阁县| 东安县| 邳州市| 吉木乃县| 始兴县| 扬州市| 石柱| 新田县| 虎林市| 和田市| 天气| 岳池县| 唐河县| 贺州市| 隆化县| 新化县| 灵川县| 宁夏| 手机| 利川市| 宁城县| 巴东县| 新源县| 满洲里市| 贵南县|