1

My question is related to my previous question. These encoder programs outputs two line per pule/tick.

Here is the part of the code I want to use:

void loop()
{
    // Read the status of the inputs
    debouncerA.update();
    debouncerB.update();

    int8_t EncVariation = 0;

    if (debouncerA.rose())
    { // if input A changed from low to high, it was CW if B is high too
        EncVariation = (debouncerB.read()) ? 1 : -1;
    }
    else if (debouncerA.fell())
    { // if input A changed from high to low, it was CW if B is low too
        EncVariation = (debouncerB.read()) ? -1 : 1;
    }
    else if (debouncerB.rose())
    { // if input B changed from low to high, it was CCW if A is high too
        EncVariation = (debouncerA.read()) ? -1 : 1;
    }
    else if (debouncerB.fell())
    { // if input B changed from high to low, it was CCW if B is low too
        EncVariation = (debouncerA.read()) ? 1 : -1;
    }
//
  if (EncVariation != 0) {

        encoder0Pos = encoder0Pos + EncVariation;

        int degs = (encoder0Pos * 6) % 360 ;

        if(degs<0){ degs = 360 + degs; }

        Serial.println (degs);
   }
}

For three inputs/ticks this outputs like:

6

12

18

24

30

36

But I only need the second ones like:

12

24

36

How can I do that? (I need it to send the relevant data do a PC.)

I spend so long time on it couldnt find any solution.

floppy380
  • 245
  • 1
  • 4
  • 10

2 Answers2

1

IF and only IF you want exactly what you have asked for which is alternate lines not to be output then this is a very crude and quick solution.

Outside of loop() add this declaration:

bool skipNextLine = true;  // true skips the odd lines, false skips even lines

And change the end of your code like this:

  if (EncVariation != 0) {
    encoder0Pos = encoder0Pos + EncVariation;
    int degrees = (encoder0Pos * 6) % 360 ;
    if(degrees<0){ deg = 360 + degs; }
    if (!skipNextLine)
    {  // This will skip alternate lines
        Serial.println (deg);
        skipNextLine = true;
    }
    else
    {
        skipNextLine = false;
    }
  }
Mark Smith
  • 2,181
  • 1
  • 11
  • 14
Code Gorilla
  • 5,652
  • 1
  • 17
  • 31
0

Use a static variable to count loop execution and only prohibit the very first of every 3 counts.

dannyf
  • 2,813
  • 11
  • 13