360度PWM旋轉編碼器突破

      360度PWM旋轉編碼器突破

      USD
      Model #
      Quantity
      qty limit cart limit

      運輸成本估算器

      Note: You must have items in your cart already before you can see the estimated costs to ship your cart. This shipping tool will estimate the total shipping cost for your entire basket.

      描述

      這種類型的開關是增量式旋轉編碼器。實際上,由於它的低成本和提供信號的能力,它是所有旋轉編碼器中使用最廣泛的,這些信號可以輕鬆地解釋為提供諸如速度之類的運動相關信息。

      通過旋轉,旋轉編碼器可以在旋轉期間對正向和反向的輸出脈衝頻率進行計數,這與旋轉電位計計數器不同,沒有計數限制。使用旋轉編碼器上的按鈕,可以將其從零開始重置為初始狀態。

      測試代碼

      int redPin = 2;
      int yellowPin = 3;
      int greenPin = 4;
      int aPin = 6;
      int bPin = 7;
      int buttonPin = 5;
      int狀態= 0;
      int longPeriod = 5000; //時間為綠色或紅色
      int shortPeriod = 700; //更改時的時間段
      int targetCount = shortPeriod;
      int count = 0;
      無效setup()
      {
      pinMode(aPin,INPUT);
      pinMode(bPin,INPUT);
      pinMode(buttonPin,INPUT);
      pinMode(redPin,OUTPUT);
      pinMode(yellowPin,輸出);
      pinMode(綠色引腳,輸出);
      }
      無效循環()
      {
      數++;
      如果(digitalRead(buttonPin))
        {
      setLights(HIGH,HIGH,HIGH);
        }
      其他
        {
      int change = getEncoderTurn();
      int newPeriod = longPeriod +(更改* 1000);
      如果(newPeriod> = 1000 && newPeriod <= 10000)
          {
      longPeriod = newPeriod;
          }
      如果(count> targetCount)
          {
      setState();
      計數= 0;
          }
        }
      delay(1);
      }
      int getEncoderTurn()
      {

      //返回-1、0或+1
      static int oldA = LOW;
      static int oldB = LOW;
      int結果= 0;
      int newA = digitalRead(aPin);
      int newB = digitalRead(bPin);
      如果(newA!= oldA || newB!= oldB)
        {
      //發生了一些變化
      如果(oldA == LOW && newA == HIGH)
          {
      結果=-(oldB * 2-1);
          }
        }
      oldA = newA;
      oldB = newB;
      返回結果;
      }
      int setState()
        {
      如果(狀態== 0)
          {
      setLights(HIGH,LOW,LOW);
      targetCount = longPeriod;
      狀態= 1;
          }
      否則(狀態== 1)
          {
      setLights(HIGH,HIGH,LOW);
      targetCount = shortPeriod;
      狀態= 2;
          }
      否則(狀態== 2)
          {
      setLights(LOW,LOW,HIGH);
      targetCount = longPeriod;
      狀態= 3;
          }
      否則,如果(state == 3)
          {
      setLights(LOW,HIGH,LOW);
      targetCount = shortPeriod;
      狀態= 0;
          }
        }
      無效setLights(int紅色,int黃色,int green)
      {
      digitalWrite(redPin,紅色);
      digitalWrite(黃色針,黃色);
      digitalWrite(greenPin,綠色);