Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 3 of 3

Thread: simple encoder question

  1. #1
    Junior Member
    Join Date
    Apr 2020
    Posts
    19

    simple encoder question

    Hello again!

    I´m implementing an encoder to my project and decided to use the encoder lib that comes with Teensyduino. As I want it to change a value from 0 to 4 in a loop I had to modify it a bit. Also ist worked more stable after I've added a millis() debounce. So that's what it looks like right now:

    #include <Encoder.h>

    Encoder myEnc(18, 17);
    byte value = 255;
    unsigned long debounce = 0;

    void setup() {
    Serial.begin(9600);
    }

    long oldPosition = -999;

    void loop() {
    long newPosition = myEnc.read() / 4;
    if (newPosition > oldPosition && (millis() - debounce > 10)) {
    value++;
    value %= 5;
    oldPosition = newPosition;
    Serial.println(value);
    debounce = millis();
    }
    if (newPosition < oldPosition && (millis() - debounce > 10)) {
    if(value == 0)
    value = 4;
    else
    value--;
    oldPosition = newPosition;
    Serial.println(value);
    debounce = millis();
    }
    }

    this works quite reliable, but I thought this could be made in a more sophisticated way. This is lets say beginner level. I know that there are commands like "falling" and "rising" but I've never used them, as I saw in tutorials here and there this is mostly used in interrupt routines. In my code I don't have use for the number in "myEnc.read()", I just use it to know if the encoder has been turned left or right. couldn't I say "if the number is rising increase the value" or "if its falling decrease it"? I know, thats what my code does, but could I do it shorter? would like to have some input here.

    Thanks in advance, greetings from Bremen, Germany!

    Phil.

  2. #2
    Your code works and it's short and simple (if a bit messy). There is no point changing something like this. Focus your attention on something more important, as I expect you have after one month.

  3. #3
    This is probably as short as you can get it--one could probably hack some lines out, but without knowing the context, this is probably has short as you can get.


    You mention RISING / FALLING, however these are not commands, they are constants used when creating an interrupt (where the MCU will be triggered to perform an activity on a rising edge of a signal, or a falling edge of a signal). something like this.

    // in setup
    attachInterrupt(2, CALL_THIS_FUNCTION, RISING);

    // special function
    void CALL_THIS_FUNCTION(){


    }

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •