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.
2 Answers 2
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;
}
}
-
Just tried it didnt work. It doesnt output anythingfloppy380– floppy3802017年01月26日 13:57:20 +00:00Commented Jan 26, 2017 at 13:57
-
Can it be there maybe another Serial.println (deg); needed before the last if?floppy380– floppy3802017年01月26日 14:06:09 +00:00Commented Jan 26, 2017 at 14:06
-
should skipNextLine be false at some place?floppy380– floppy3802017年01月26日 14:34:35 +00:00Commented Jan 26, 2017 at 14:34
-
Blush Whoops. Thanks Mark for editing it.Code Gorilla– Code Gorilla2017年01月26日 14:53:57 +00:00Commented Jan 26, 2017 at 14:53
Use a static variable to count loop execution and only prohibit the very first of every 3 counts.
-
I tried to use a variable and odd number selection but couldnt achive.floppy380– floppy3802017年01月26日 14:05:08 +00:00Commented Jan 26, 2017 at 14:05
if(degrees<0){ deg = 360 + degs; }
is it correct? You do the calculation of degrees and then start using degs.