Avatar
ARDUINO ROTARY ENCODER
Sep 28th, 2020 | by: ELECTRONOOBS | Views 3158
Views 3158

A rotary encoder is a type of position sensor that converts the angular position (rotation) of a knob into an output signal that is used to determine what direction the knob is being rotated. Due to their robustness and fine digital control; they are used in many applications including robotics, CNC machines and printers. There are two types of rotary encoder – absolute and incremental. The absolute encoder gives us the exact position of the knob in degrees while the incremental encoder reports how many increments the shaft has moved (steps).The rotary encoder used in this tutorial is of an incremental type.

How The Encoder Works

In the animated example below, you can see how an encoder works. Inside the encoder we have some copper pads (brown color in the animation). These are connected to GND. Then we have two pins, clock and data, with a pullup to 5V. In this way, when the pin is in open circuit, it will be "HIGH" or 5V. While rotationg, these two pins will touch the copper pads, pulling the output to GND since the pads are directy connected to GND. So, each time we touch a copper pad, we have a "LOW" pulse. By counting these pulses, we can count steps. If we detect 10 pulses for example, then the encoder jumped 10 copper pads. By knowing how many pads (steps )the encoder has, we can calculate the angle of rotation.

angle (in degrees) = (360º / total steps) * counted steps

 

But! at the same time, using both pins we can also detect the direction of rotation. In the example below, as you can see both pins start with an output of 5V since non is touching the copper pads. If we rotate to the right, then the clock pin will be the first one to drop to GND. If we rotate to the left, the data pin will be the first one to drop to GND. So, just by detecting which pin will change its level first, we can detect the direction of rotation. Doing this with the Arduino is very simple.

Part 1 - What we need?
Part 2 - Schematic Example I

Ok, as you can see below, we have connected the encoder data and clock pins to the Arduino on D8 adn D9. The encoder also has a push button inside taht we could use, so I've connected that to D10. We need pullups for each pin, but instead of adding an external resistor, we can define the pin in the ARduino code as INPUT_PULLUP, and that will do the job. Connect GND to the encoder GND pin.

Code Example I

This example doesn't need any library nor the LCD screen. Just print the result on the serial monitor. Make connections as above, connect the USB to the Arduino and then upload the code. Open serial monitor at 9600 bauds and start rotating the encoder and pusing the button to test it. The counter value will increase and decrease. If you want to create a menu, just put limits to the counter and depending on that counter value, decide the position in the menu. Download the .zip code from below or just copy+paste. Read all coments in the code to understand each step.


// Rotary Encoder Inputs
#define Clock 9   //Clock pin connected to D9
#define Data 8    //Data pin connected to D8
#define Push 10   //Push button pin connected to D10

int counter = 0;                    //Use this variable to store "steps"
int currentStateClock;              //Store the status of the clock pin (HIGH or LOW)
int lastStateClock;                 //Store the PREVIOUS status of the clock pin (HIGH or LOW)
String currentDir ="";              //Use this to print text 
unsigned long lastButtonPress = 0;  //Use this to store if the push button was pressed or not

void setup() {
  
  /*  Set encoder pins as inputs with pullups. If you use the Encoder Module, you don't need 
   *  pullups for Clock and Data, only for the push button.*/
  pinMode(Clock,INPUT_PULLUP);
  pinMode(Data,INPUT_PULLUP);
  pinMode(Push, INPUT_PULLUP);


Code Example II (with interruptions)

Ok, the problem with the code above is that if you make any other process in the void loop that would create any sort of delay, well you migh jump over some steps. If a step occurred while the code is doing another process such as, I don't know, reading an analog input, we might not detect that step and that will look very bad. To solve this problem, we use interruptions. So we make pins D8 and D9 to be able to create an interruption each time their digital value changes. So we can pause the code from any process it was doing, read the clock and data values, and resume the code. Read details in the code.

As you can see in the code below, all we do in the void loop is to check if the counter value cahnged. If yes, we print the new value. Now we can do any other process in the void loop since the counter value will change in the interruption any time we detect a new state cahnge on Data or Clock.


/*In this case, the counter will automatically change its value in the interruption. 
  So all we need to do is to print its value in the void loop*/
ISR(PCINT0_vect){  
  cli(); //We pause interrupts happening before we read pin values
  currentStateClock =   (PINB & B00000010);       //Check pin D9 state? Clock
  StateData  =   (PINB & B00000001);              //Check pin D8 state? Data
  if (currentStateClock != lastStateClock){
    // If "clock" state is different "data" state, the encoder is rotating clockwise
    if (StateData != currentStateClock){ 
      counter  ++;                                // We increment   
      lastStateClock = currentStateClock;         // Updates the previous state of the clock with the current state
      sei(); //restart interrupts
    }
    //Else, the encoder is rotating counter-clockwise 
    else {
      counter --;                                 // We decrement
      lastStateClock = currentStateClock;         // Updates  previous state of the clock with the current state    
      sei(); //restart interrupts
    } 
  }  
}


See a video example

I hope that you like this tutorial. If you consider supporting my work, buy my PCBs on my shop, or maybe consider supporting me on PATREON or if you want, make a PayPal donation. Thank you very much.

16 Comments

  • Noob 19129

    about 1 year ago

    Please try Google before asking about Excellent Product Guide 6c4aa02

    Noob 19129

    about 11 months ago

    Please try a hrefhttpswwwgooglecomGooglea before asking about a hrefhttpsrevolutionmallcoukforumshowthreadphptid7073pid202050pid202050Top Product Guidea 94c5f79

    Noob 19129

    about 11 months ago

    Please try urlhttpswwwgooglecomGoogleurl before asking about urlhttpsnarcisismoorgviewtopicphpp110959p110959Recommended Product Tipsurl e0b59a7

    Noob 19129

    about 10 months ago

    Please try urlhttpswwwgooglecomGoogleurl before asking about urlhttpsbonuscloudclubviewtopicphpf52t5283p293419p293419Top Rated Product Blogurl 59a7057

    Noob 19129

    about 10 months ago

    Please try urlhttpswwwgooglecomGoogleurl before asking about urlhttpsblooddropsdeshowthreadphptid19pid257542pid257542Cool Product Tipsurl 7595dd

    Noob 19129

    about 9 months ago

    Please try urlhttpswwwgooglecomGoogleurl before asking about urlhttpwwwvlambcomforumphpmodviewthreadtid758pid1389page1extrapid1389Top Rated Product Blogurl a023d94

    Noob 19129

    about 9 months ago

    Please try urlhttpswwwgooglecomGoogleurl before asking about urlhttpsforumsdatanavcokeshowthreadphptid12076pid142919pid142919Recommended Product Infourl 4aa023d

    Noob 19129

    about 8 months ago

    In response to the person talking about renovations and more popular bathroom remodels home for renovation home remodelling kitchen rehab commercial bathroom renovations near me commercial restroom renovation home work kitchen commercial bathroom renovations home updated I highly suggest this urlhttpafaqdubaiaevbmemberphpu323791click this link for house renovation Edinburgh detailsurl or bathroom renovation work a new bathroom bathroom renovation business bathroom home renovations edinburgh kitchens and bathrooms home renovations for beginners redoing houses home renovation website painting and renovations innovative renovations not to mention this urlhttpwwwjutianwangcnhomephpmodspaceuid2152doprofilefromspacesell about property renovations Edinburgh tipsurl and dont forget bathroom and kitchen installations premier renovation services transformation renovations precision renovation materials for renovation seamless renovations renovation roof expert renovations remodeling kitchen home of kitchens and dont forget this urlhttpjbparadiezorgmemberphpactionprofileuid9404recommended kitchen renovations in Edinburgh infourl which is also great Also have a look at this urlhttpvpnmolifannetspaceuid2036934htmlcontinue about home repair Edinburgh siteurl as well as project renovation property projects home renovation basics home renovation work toilets renovation property renovation home renovation website home renovation team website renovations renovation bathroom and kitchen and dont forget this urlhttpsparker0t02ykx0blogpayzcomprofilelearn more about house renovation Edinburgh detailsurl with nice bathroom remodels home renovation experts near me renovation business for home renovation popular bathroom remodels bathroom with kitchen bathroom installation unique bathroom renovations style renovations kitchen renovation edinburgh for good measure Check more urlhttpsdoodeeboardcomindexphptopic45439newnewUseful TAJIR4D Websiteurl 0b59a70

    Noob 19129

    about 8 months ago

    Please try urlhttpswwwgooglecomGoogleurl before asking about urlhttpgjerrigforumcomviewtopicphpp355665355665Cool Product Websiteurl f79e0b5

    Noob 19129

    about 7 months ago

    Please try urlhttpswwwgooglecomGoogleurl before asking about urlhttpbbswangbamlcomforumphpmodviewthreadtid446pid50230page637extrapid50230High Rated Product Tipsurl 057982

    Noob 19129

    about 7 months ago

    In response to the people inquiring about fashion cloth store clothes fashion design cloth ing clothing with q your brand store clothing departments believe clothing store go clothing all of clothing designer fashion store fashion clothing clothing dept stores all brand clothes store fashion clothing store by design clothing clothing in store clothing to go your clothes in store clothing into clothing I can vouch for this urlhttpsfairiesfashioncomhowdoesaclothingstoresimulatorhelpyouwithefficiencyat bing on dress shop urlurl for business clothing apparalel store the womens store clo thing new clothing shops i believe store clothing brand unique retail clothes clothing store for unique clothing store home of clothes accessories fashion brand clothing we knitwear the perfect clothing all the store for all fashion perfect clothing brand you are here clothing for you clothing store also See More urlhttpswwwworldwidewatergardenersorgforumindexphptopic19164newnewTop Wrongful Death Lawyer Websiteurl 59a7057

    Noob 19129

    about 6 months ago

    In response to the man asking about lagi gacor slot 7 bet slot game gacor habanero slot dunia mpo pragmatic slot gacor hari nama nama link slot gacor yang lagi gacor vip slot 777 login link judi slot online terbaru I highly suggest this urlhttpsrafaelrgga16284levitrawikicom718044newreasonsfordecidingondvltotowebsiteshere for DVLTOTO adviceurl or bandar slot vip slot online free bonus link slot bandar agen slot online nama nama link slot judi slot game yang lagi gacor slot home casino link judi slot new slot online not to mention this urlhttpsdantefpxe21100wikirecognitioncom729423goodinfoondecidingondvltotowebsitesdo you agree about DVLTOTO detailsurl alongside all judi game slot slot games login m slot game judi jackpot online mobile slot bonus rtp slot game judi http slot online website judi slot online bet slot login not to mention this urlhttpsjudahglwd11100ktwikicom715714goodreasonsondecidingondvltotowebsitessources tell me on DVLTOTO adviceurl which is also great Also have a look at this urlhttpsgregoryvsqc17395getbloggingcom27806482goodideasonselectingdvltotositesexcellent DVLTOTO adviceurl as well as bandar slot login slot habanero gacor slot habanero gacor hari ini cuan 777 slot online cuan 777 slot login judi 777 online judi slot mpo game slot online gacor judi game slot agen situs judi slot on top of this urlhttpsbeckettvbbv84064wikifrontiercom7390351goodideasforselectingdvltotositesmy website for DVLTOTO linkurl with link game online slot m slot popular win slot dunia slot gacor login game slot bandar slot mpo game judi online slot slot game link slot game judi gacor online for good measure Check more urlhttpa123woobicokrthread700post10125htmlpid10125Excellent Cross Finance Infourl b59a705

    Noob 19129

    about 6 months ago

    To the lady talking about lucky 88 slot online waktu gacor slot slot pm fortune slot 88 link alternatif hot cuan88 slot special slot slot rtp mega cuan 88 slot slot id slot pakai rtp I highly recommend this urlhttpforumsescapefromelbacomindexphpactionprofileu125753excellent WIN1000X infourl or mahjong slot 88 pragmatic situs rtp jaya slot permainan belum hercules slot pp games net situs gacor slot link alternatif ib88 casino slot 88 mahjong ways2 on top of this urlhttp61074wwwmolifannetspaceuid2070656htmlhome page for Slot WIN1000X forumurl alongside all link alternatif cuan88 tidak permainan aplikasi game slot pragmatic indonesia 88 slot permainan pragmatic rtp ninja slot slot88 net cash cuan88 ini slot slot rtp terpercaya and dont forget this urlhttpsadam2n12elb1therainblogcomprofileview website about Slot WIN1000X tipsurl which is also great Also have a look at this urlhttpsexplorebookmarkscomstory17237227win1000xslotandmaumaingameonlinehis explanation about Slot WIN1000X tipsurl not to mention pragmatic slot adalah situs rtp hoki cuan slot game lucky situs slot online cuan 88 togel download aplikasi game slot permainan casino online situs resmi slot 88 game mahjong slot not to mention this urlhttpsbookmarkssocialcomstory17241711win100xandslotgameslotgamecool Slot WIN1000X siteurl with 88 pragmatic cuanslot88 com download slot88 situs gacor slot play pragmatic slot may slot cuan88 slot login link alternatif game hot hot hoki8 slot aplikasi slot pragmatic for good measure Check more urlhttpsgamersbuildorgforaviewtopicphpp81754p81754New CUANSLOT Blogurl f79e0b5

    Noob 19129

    about 6 months ago

    For the man talking about personalised signage shed of the year irish bar sign pub sign hanging cock in cider dart chalkboard hanging pub signs for garden coaching mentor pub signs uk buy pub chalkboards I highly suggest this urlhttpsarthurjkga11009tdlwikicom723662handyinfotopickingpubsignssee post about man cave signs blogurl or old pub signs for sale pub etched glass window buy cocktail bar sign irish sign company custom design bar runner custom signs outdoor goodison road sign pub sign value menu to the pub sign rude garden signs not to mention this urlhttpsdominickfufn92468goabroadblogcom27148454excellentreasonsonpickingginbarsignsbest man cave signs siteurl on top of garden bar signs bespoke pub signs coaching mentor retro bar signs posh pub sign pub chalkboard designs outdoor home bar signs personalised bar runner outdoor hanging signs hanging signs as well as this urlhttpscaidenyoai80358evawikicom8822054goodnewsforpickingmancavesignsget more information about man cave signs detailsurl which is also great Also have a look at this urlhttpsjudahjprl29518blogsminecom27953719recommendedtipstodecidingonpubsignsexcellent man cave signs blogurl alongside all personalised sign for bar army signs old english pub signs outdoor personalised bar sign personalised cocktail bar sign garden pub signs to the bar sign prawn sign hanging pub signs for garden custom pub signs uk on top of this urlhttpsgunnerlkdt37036blog4youthcom28029292newinfotopickingwindowvinylsignsbonuses on bar runners blogurl with pub signs to buy guy with cockin hand custom made signs for home nags head only fools stadium road signs uk pub signage gin signs beer runners traditional looking sign replica pub signs for good measure Check more urlhttpsforomuelendhircomshowthreadphptid8593pid95029pid95029Updated Cross Finance Websiteurl c5f79e0

    Noob 19129

    about 6 months ago

    For the lady inquiring about slot game judi link judi slot online poker link online slot web casino main demo slot main judi rtp slot saat ini slot 10 demo slot pp I highly recommend this urlhttpscharliemxeb47913hyperionwikicom671500bestinfoforchoosingdevil666slotwebsitesupdated Devil666 siteurl or home poker poker blogspot judi slot deposit linkaja slot judi slot slot online judi slot yg poker slots nolimit slots web judi slot online game casino terbaik not to mention this urlhttpsjudahubyu12445webbuzzfeedcom28222602topnewsondecidingondevil666slotsitesget more info about Devil666 Slot adviceurl alongside all game judi slot slot virtual judi online gacor web judi slot online casino spicy website judi slots 666 poker online link slot demo depo games as well as this urlhttpsandretpja00987articlesbloggercom50725342bestfactstochoosingdevil666slotwebsitessources tell me on Devil666 forumurl which is also great Also have a look at this urlhttpsaugustrxne29602ssnblogcom27349518excellentreasonsonselectingdevil666slotsitescontinue reading this about Devil666 siteurl and dont forget poster casino rtp saat ini rtp judi casino web judi casino live rtp slot logo bonus slots pragmatic play demo gacor slot arcade bo yg gacor on top of this urlhttpscharlieduiu02346wikimidpointcom4036180recommendedsuggestionsforchoosingdevil666slotwebsiteswatch this video on Devil666 Slot linkurl with deposit gacor judi deposit dana demo rtp slot slots casino apk casino live slot link alternatif slot online rtp microgaming slots link pg slot slots 666 link gacor rtp for good measure Check more urlhttpsodessamamanetforumphpmodviewthreadtid226128pid359698page7extrapid359698Cool Devil666 Slot Infourl 7057984

    Noob 19129

    about 6 months ago

    In response to the person asking about slot judi gacor jackpot game slot slot judi slot gacor judi slot judi ol judi terbaik game judi online bet slot login website judi gacor web judi online I highly suggest this urlhttpsrafaelrxdi69124canariblogscomtopsuggestionstodecidingontajir4dloginwebsites43209551this contact form on tajir4d login adviceurl or indonesia slot online slot game yang mudah menang link jackpot online slot game nama situs judi slot online online jackpot game judi slot slot game indonesia apa slot itu judi link game judi slot online on top of this urlhttpsarthurlsjm05050anchorblogcom8127269handyreasonsondecidingontajir4dloginwebsitesclick this link about tajir4d detailsurl and dont forget judi online77 bet online slot slot online slot indo judi game jackpot online judi casino game judi jackpot judi indonesia apa itu slot judi game judi slot online not to mention this urlhttpsedwinjbqe45689blogdemlscom27629572excellentsuggestionsforchoosingtajir4dloginwebsitesuseful tajir4d siteurl which is also great Also have a look at this urlhttpsbrooksfbvo92580thechapblogcom27482919newfactsfordecidingontajir4dloginwebsitestop rated tajir4d login adviceurl as well as apa judi slot link game judi slot online log in slot website game slot online casino idn game slot indonesia slot game judi slot judi indonesia judi terbaik judi online gacor as well as this urlhttpsisraelvqyz35791alltdesigncomnewideastoselectingtajir4dloginwebsites47740935recommended reading for tajir4d login linkurl with game slot jackpot game slot online judi indonesia slot game yang mudah menang bonus judi slot sini slot login web judi slot online game online slot indonesia game slot idn slot streaming for good measure Check more urlhttpscarpentryforumscomshowthreadphptid34213pid155938pid155938Awesome Tajir4D Tipsurl f6c4aa0

Login or Sign Up to post comments on this tutorial.