360 Degree PWM Rotary Encoder Breakout

360 Degree PWM Rotary Encoder Breakout

$7.81 $7.81 USD
Model #AD-PB928027
Quantity
We have 6 of these in stock We have 6 of these in stock
and you currently have in your cart.
In Stock

Add 

Warranty Plus

Warranty Plus:
Your product will be replaced (including free shipping) with a new one within 12 months of purchase, even if it is damaged due to improper wiring, incorrect usage, a problem in the electrical installation or any other circumstance.

Standard Warranty:
12 month warranty comes with every purchase. Covers malfunctions when it is used within the described conditions/limits.

 +8%  ($0.62) ($0.62)

Shipping Cost Estimator

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.

  • Description

    This type of switch is an incremental rotary encoder.  As a matter of fact, it is the most widely used of all rotary encoders due to its low cost and ability to provide signals that can be easily interpreted to provide motion related information such as velocity.

    By rotating, the rotary encoder can count the output pulse frequency in positive and reverse direction during rotation, unlike a rotary potentiometer counter without counting limitation. With the button on the rotary encoder, it can be reset to its initial state starting from zero.

  • Testing code

    int redPin = 2;
    int yellowPin = 3;
    int greenPin = 4;
    int aPin = 6;
    int bPin = 7;
    int buttonPin = 5;
    int state = 0;
    int longPeriod = 5000; // Time at green or red
    int shortPeriod = 700; // Time period when changing
    int targetCount = shortPeriod;
    int count = 0;
    void setup()
    {
      pinMode(aPin, INPUT);
      pinMode(bPin, INPUT);
      pinMode(buttonPin, INPUT);
      pinMode(redPin, OUTPUT);
      pinMode(yellowPin, OUTPUT);
      pinMode(greenPin, OUTPUT);
    }
    void loop()
    {
      count++;
      if (digitalRead(buttonPin))
      {
        setLights(HIGH, HIGH, HIGH);
      }
      else
      {
        int change = getEncoderTurn();
        int newPeriod = longPeriod + (change * 1000);  
        if (newPeriod >= 1000 && newPeriod <= 10000)
        {
          longPeriod = newPeriod;
        }
        if (count > targetCount)
        {
          setState();
          count = 0;
        }
      }
      delay(1);
    }
    int getEncoderTurn()
    {

     // return -1, 0, or +1
      static int oldA = LOW;
      static int oldB = LOW;
      int result = 0;
      int newA = digitalRead(aPin);
      int newB = digitalRead(bPin);
      if (newA != oldA || newB != oldB)
      {
        // something has changed
        if (oldA == LOW && newA == HIGH)
        {
          result = -(oldB * 2 - 1);
        }
      }
      oldA = newA;
      oldB = newB;
      return result;
    }
    int setState()
      {
        if (state == 0)
        {
          setLights(HIGH, LOW, LOW);
          targetCount = longPeriod;
          state = 1;
        }
        else if (state == 1)
        {
          setLights(HIGH, HIGH, LOW);
          targetCount = shortPeriod;
          state = 2;
        }
        else if (state == 2)
        {
         setLights(LOW, LOW, HIGH);
          targetCount = longPeriod;
          state = 3;
        }
        else if (state == 3)
        {
          setLights(LOW, HIGH, LOW);
          targetCount = shortPeriod;
          state = 0;
        }
      }
    void setLights(int red, int yellow, int green)
    {
      digitalWrite(redPin, red);
      digitalWrite(yellowPin, yellow);
      digitalWrite(greenPin, green);

Frequently Bought Together

Total Price: $0.00 USD