Skip to content

Commit

Permalink
v2.2.2
Browse files Browse the repository at this point in the history
  • Loading branch information
joshua-8 committed Jun 2, 2024
1 parent e5274b7 commit e7d1fd5
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 21 deletions.
6 changes: 3 additions & 3 deletions examples/example/example.ino
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ void loop()
for (int i = 1; i <= 8; i++) {
if (bsed.isEncoderActive(i)) {
Serial.print(i);
Serial.print(":");
Serial.print(": ");
Serial.print(bsed.getEncoderPosition(i));
Serial.print(",");
Serial.print(" ");
Serial.print(bsed.getEncoderVelocity(i));
Serial.print(";");
Serial.print("; ");
}
}
Serial.println();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -293,17 +293,17 @@ ISR(PCINT0_vect)
lastPortBPinStates = pinStates;

if (bitRead(changedPins, 0))
(bitRead(pinStates, 0) == bitRead(pinStates, 1)) ? encoderCount[4]++ : encoderCount[4]--;
(bitRead(pinStates, 0) == bitRead(pinStates, 1)) ? encoderCount[4]-- : encoderCount[4]++;
if (bitRead(changedPins, 1))
(bitRead(pinStates, 0) != bitRead(pinStates, 1)) ? encoderCount[4]++ : encoderCount[4]--;
(bitRead(pinStates, 0) != bitRead(pinStates, 1)) ? encoderCount[4]-- : encoderCount[4]++;
if (bitRead(changedPins, 2))
(bitRead(pinStates, 2) == bitRead(pinStates, 3)) ? encoderCount[3]++ : encoderCount[3]--;
(bitRead(pinStates, 2) == bitRead(pinStates, 3)) ? encoderCount[3]-- : encoderCount[3]++;
if (bitRead(changedPins, 3))
(bitRead(pinStates, 2) != bitRead(pinStates, 3)) ? encoderCount[3]++ : encoderCount[3]--;
(bitRead(pinStates, 2) != bitRead(pinStates, 3)) ? encoderCount[3]-- : encoderCount[3]++;
if (bitRead(changedPins, 4))
(bitRead(pinStates, 4) == bitRead(pinStates, 5)) ? encoderCount[2]++ : encoderCount[2]--;
(bitRead(pinStates, 4) == bitRead(pinStates, 5)) ? encoderCount[2]-- : encoderCount[2]++;
if (bitRead(changedPins, 5))
(bitRead(pinStates, 4) != bitRead(pinStates, 5)) ? encoderCount[2]++ : encoderCount[2]--;
(bitRead(pinStates, 4) != bitRead(pinStates, 5)) ? encoderCount[2]-- : encoderCount[2]++;
}

ISR(PCINT1_vect)
Expand All @@ -313,29 +313,29 @@ ISR(PCINT1_vect)
uint8_t changedPins = pinStates ^ lastPortCPinStates;
lastPortCPinStates = pinStates;
if (bitRead(changedPins, 0))
(bitRead(pinStates, 0) == bitRead(pinStates, 1)) ? encoderCount[1]++ : encoderCount[1]--;
(bitRead(pinStates, 0) == bitRead(pinStates, 1)) ? encoderCount[1]-- : encoderCount[1]++;
if (bitRead(changedPins, 1))
(bitRead(pinStates, 0) != bitRead(pinStates, 1)) ? encoderCount[1]++ : encoderCount[1]--;
(bitRead(pinStates, 0) != bitRead(pinStates, 1)) ? encoderCount[1]-- : encoderCount[1]++;
if (bitRead(changedPins, 2))
(bitRead(pinStates, 2) == bitRead(pinStates, 3)) ? encoderCount[0]-- : encoderCount[0]++;
(bitRead(pinStates, 2) == bitRead(pinStates, 3)) ? encoderCount[0]++ : encoderCount[0]--;
if (bitRead(changedPins, 3))
(bitRead(pinStates, 2) != bitRead(pinStates, 3)) ? encoderCount[0]-- : encoderCount[0]++;
(bitRead(pinStates, 2) != bitRead(pinStates, 3)) ? encoderCount[0]++ : encoderCount[0]--;
}
ISR(PCINT2_vect)
{
uint8_t pinStates = PIND & PORTD_used_pins_mask; // D7-D2
uint8_t changedPins = pinStates ^ lastPortDPinStates;
lastPortDPinStates = pinStates;
if (bitRead(changedPins, 2))
(bitRead(pinStates, 2) == bitRead(pinStates, 3)) ? encoderCount[7]++ : encoderCount[7]--;
(bitRead(pinStates, 2) == bitRead(pinStates, 3)) ? encoderCount[7]-- : encoderCount[7]++;
if (bitRead(changedPins, 3))
(bitRead(pinStates, 2) != bitRead(pinStates, 3)) ? encoderCount[7]++ : encoderCount[7]--;
(bitRead(pinStates, 2) != bitRead(pinStates, 3)) ? encoderCount[7]-- : encoderCount[7]++;
if (bitRead(changedPins, 4))
(bitRead(pinStates, 4) == bitRead(pinStates, 5)) ? encoderCount[6]++ : encoderCount[6]--;
(bitRead(pinStates, 4) == bitRead(pinStates, 5)) ? encoderCount[6]-- : encoderCount[6]++;
if (bitRead(changedPins, 5))
(bitRead(pinStates, 4) != bitRead(pinStates, 5)) ? encoderCount[6]++ : encoderCount[6]--;
(bitRead(pinStates, 4) != bitRead(pinStates, 5)) ? encoderCount[6]-- : encoderCount[6]++;
if (bitRead(changedPins, 6))
(bitRead(pinStates, 6) == bitRead(pinStates, 7)) ? encoderCount[5]++ : encoderCount[5]--;
(bitRead(pinStates, 6) == bitRead(pinStates, 7)) ? encoderCount[5]-- : encoderCount[5]++;
if (bitRead(changedPins, 7))
(bitRead(pinStates, 6) != bitRead(pinStates, 7)) ? encoderCount[5]++ : encoderCount[5]--;
(bitRead(pinStates, 6) != bitRead(pinStates, 7)) ? encoderCount[5]-- : encoderCount[5]++;
}
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=byte-sized-encoder-decoder
version=2.1.3
version=2.2.2
author=RCM Games <robot.control.modules@gmail.com>
maintainer=RCM Games <robot.control.modules@gmail.com>
sentence=communicate over I2C with an encoder reading module
Expand Down
9 changes: 8 additions & 1 deletion src/byte-sized-encoder-decoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ class ByteSizedEncoderDecoder {
* @brief array of 8 numbers representing the last encoder count read from the board
*/
int16_t lastEncoderCount[8];
/**
* @brief array of 8 numbers representing the last encoder count read from the board for velocity calculation
*/
int16_t lastVelocityEncoderCount[8];
/**
* @brief I2C bus to communicate over.
*/
Expand Down Expand Up @@ -77,10 +81,12 @@ class ByteSizedEncoderDecoder {
memset(encoderCount, 0, 8);
memset(encoderOverflows, 0, 8);
memset(lastEncoderCount, 0, 8);
memset(lastVelocityEncoderCount, 0, 8);
memset(lastReadMicros, 0, 8);
memset(encoderVelocity, 0, 8);
memset(encoderSlowestInterval, _encoderSlowestInterval, 8);
memset(encoderEnoughCounts, _encoderEnoughCounts, 8);
memset(isVelNewVal, 0, 8);
}
/**
* @brief set the value of encoderSlowestInterval
Expand Down Expand Up @@ -183,7 +189,8 @@ class ByteSizedEncoderDecoder {
int32_t hundredMicrosSinceLastRead = (mic - lastReadMicros[i]) / 100; // using a time interval of 100 microseconds (won't overflow int32)
if (hundredMicrosSinceLastRead > (int32_t)(encoderSlowestInterval[i] * 10) || abs(encoderCount[i] - lastEncoderCount[i]) > encoderEnoughCounts[i]) {
lastReadMicros[i] = mic;
encoderVelocity[i] = (int32_t)10000 * (encoderCount[i] - lastEncoderCount[i]) / hundredMicrosSinceLastRead;
encoderVelocity[i] = (int32_t)10000 * (encoderCount[i] - lastVelocityEncoderCount[i]) / hundredMicrosSinceLastRead;
lastVelocityEncoderCount[i] = encoderCount[i];
isVelNewVal[i] = true;
}
}
Expand Down

0 comments on commit e7d1fd5

Please sign in to comment.