久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

也談Arduino與旋轉(zhuǎn)編碼器的兩種連接方式(中斷方式,,普通D口)

 一場(chǎng)浩劫 2013-05-05
發(fā)表于 2012-3-4 14:59:34 


翻出去年在北京中發(fā)買的旋轉(zhuǎn)編碼器,測(cè)試了下與arduino的連接,。

原理圖就不畫了,,旋轉(zhuǎn)編碼器 A,B端分別接10K上拉至VCC,,A,、B端分別與Arduino主板連接。有時(shí)環(huán)境存在干擾,,會(huì)反跳的話,,A、B端再通過0.1uf的電容接地即可,。

分別測(cè)試了兩種的連接方式,,均成功。

1.采用中斷方式,。參照czad先前的帖子,。我把程序簡(jiǎn)化了下,意圖僅在于說明旋轉(zhuǎn)編碼器的正反計(jì)數(shù)即可,。
  1. #define PinA 2  //中斷0
  2. #define PinB 3  //中斷1

  3. unsigned long time = 0;
  4. long count = 0; //計(jì)數(shù)值
  5. long num = 0;

  6. //初始化
  7. void setup()
  8. {
  9.   Serial.begin(9600); //窗口初始化

  10.   pinMode(PinA,INPUT); //D2腳為輸入
  11.   pinMode(PinB,INPUT); //D3腳為輸入

  12.   attachInterrupt(0, blinkA, LOW);  //注冊(cè)中斷0調(diào)用函數(shù)blinkA
  13.   attachInterrupt(1, blinkB, LOW);  //注冊(cè)中斷1調(diào)用函數(shù)blinkB

  14.   time = millis(); //時(shí)間初值
  15. }

  16. //主體程序
  17. void loop()
  18. {
  19.   while (num != count)
  20.   {
  21.     num = count;
  22.     Serial.println(num);
  23.   }
  24. }

  25. //中斷0調(diào)用函數(shù)
  26. void blinkA()
  27. {
  28.   if ((millis() - time) > 3) //防抖動(dòng)處理
  29.         count ++;
  30.   time = millis();
  31. }

  32. //中斷1調(diào)用函數(shù)
  33. void blinkB()
  34. {
  35.   if ((millis() - time) > 3)  //防抖動(dòng)處理
  36.         count --;
  37.   time = millis();
  38. }
復(fù)制代碼
有圖有真相:
IMG_0064.JPG

2.采用普通Digital口的方式,,這里用D4與D5。第一種方法要用掉兩個(gè)中斷,,有點(diǎn)浪費(fèi),,有時(shí)中斷端口要留著其他用處。參考Arduino Cookbook第二版,。PS:第一版中,,那個(gè)圖是錯(cuò)誤。
  1. const int encoderPinA = 4;
  2. const int encoderPinB = 5;

  3. boolean encoderALast = LOW;  // remembers the previous pin state

  4. void setup()
  5. {
  6.   pinMode(encoderPinA, INPUT);
  7.   pinMode(encoderPinB, INPUT);
  8.   digitalWrite(encoderPinA, HIGH);
  9.   digitalWrite(encoderPinB, HIGH);
  10.   Serial.begin (9600);
  11. }

  12. void loop()
  13. {
  14.   boolean encoderA = digitalRead(encoderPinA);
  15.   if ((encoderALast == HIGH) && (encoderA == LOW))
  16.   {
  17.     if (digitalRead(encoderPinB) == LOW)
  18.     {
  19.       encoderPos--;
  20.     }
  21.     else
  22.     {
  23.       encoderPos++;
  24.     }
  25.     Serial.print (encoderPos);
  26.   }
  27.   encoderALast = encoderA;
  28. }
復(fù)制代碼
有圖有真相:




旋轉(zhuǎn)編碼器的問題該完結(jié)了吧,哈哈~

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多