Byte Sized Encoder Decoder
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ByteSizedEncoderDecoder Class Reference

class for communicating with the firmware on a Byte Sized Encoder Decoder board More...

#include <byte-sized-encoder-decoder.h>

Public Member Functions

 ByteSizedEncoderDecoder (TwoWire *_wire, uint8_t _address=14, int16_t _encoderSlowestInterval=0, int16_t _encoderEnoughCounts=0)
 Constructor for the Byte Sized Encoder Decoder class.
 
void setEncoderSlowestInterval (uint8_t n, int16_t interval)
 set the value of encoderSlowestInterval
 
void setEncoderEnoughCounts (uint8_t n, int16_t counts)
 set the value of encoderEnoughCounts
 
boolean isVelNew (uint8_t n)
 whether the velocity was just calculated
 
void begin (boolean resetEncoders=true)
 sets up the Byte Sized Encoder Decoder board all it really does is tell the board to read from all encoders
 
void run ()
 reads the encoder positions from the board
 
int32_t getEncoderPosition (uint8_t n, boolean read=false)
 gets the position of an encoder as a 32 bit signed integer (it counts how many times the 16 bit number has overflowed)
 
int16_t getEncoderPositionWithoutOverflows (uint8_t n, boolean read=false)
 gets the position of an encoder as the 16 bit number that the board returns (it loops around and overflows at 32767 and underflows at -32768)
 
int16_t getEncoderVelocity (uint8_t n, boolean read=false)
 gets the velocity of an encoder
 
void resetEncoderPositions (boolean resetVariables=true)
 resets all encoder positions to 0
 
void setWhichEncoders (uint8_t mask)
 set which encoders you want to receive data from
 
boolean isEncoderActive (uint8_t n)
 whether you have set to read data from a specific encoder
 

Protected Member Functions

void write (uint8_t data)
 helper function to write a byte to the board
 

Protected Attributes

uint8_t address
 I2C address of the Byte Sized Encoder Decoder board (as selected by the jumpers)
 
int16_t encoderCount [8]
 array of 8 numbers representing the number of steps each encoder has taken
 
int16_t encoderOverflows [8]
 array of 8 numbers representing the number of times each encoder's counter variable has overflowed
 
int16_t lastEncoderCount [8]
 array of 8 numbers representing the last encoder count read from the board
 
int16_t lastVelocityEncoderCount [8]
 array of 8 numbers representing the last encoder count read from the board for velocity calculation
 
TwoWire * wire
 I2C bus to communicate over.
 
uint8_t whichEncodersMask
 bit mask of which encoders to read from
 
unsigned long lastReadMicros [8]
 the last time the encoders were read (microseconds)
 
int16_t encoderVelocity [8]
 array of 8 numbers representing the velocity of each encoder (steps per second)
 
int16_t encoderSlowestInterval [8]
 after this many milliseconds without an encoder tick velocity is set to zero.
 
int16_t encoderEnoughCounts [8]
 enough counts to calculate velocity from
 
boolean isVelNewVal [8]
 array of 8 booleans representing whether the velocity was just calculated
 

Detailed Description

class for communicating with the firmware on a Byte Sized Encoder Decoder board

Constructor & Destructor Documentation

◆ ByteSizedEncoderDecoder()

ByteSizedEncoderDecoder::ByteSizedEncoderDecoder ( TwoWire *  _wire,
uint8_t  _address = 14,
int16_t  _encoderSlowestInterval = 0,
int16_t  _encoderEnoughCounts = 0 
)
inline

Constructor for the Byte Sized Encoder Decoder class.

Parameters
_wireI2C bus to communicate over. &Wire or &Wire1
_addressI2C address of the Byte Sized Encoder Decoder board (as selected by the jumpers), default is 14, (14-17 are options)
_encoderSlowestIntervalafter this many milliseconds without a calculation, velocity is recalculated
_encoderEnoughCountsenough counts to calculate velocity

Member Function Documentation

◆ begin()

void ByteSizedEncoderDecoder::begin ( boolean  resetEncoders = true)
inline

sets up the Byte Sized Encoder Decoder board all it really does is tell the board to read from all encoders

Parameters
resetEncoderswhether to reset the encoder positions to 0, default is true
Note
call this after Wire.begin() has been called

◆ getEncoderPosition()

int32_t ByteSizedEncoderDecoder::getEncoderPosition ( uint8_t  n,
boolean  read = false 
)
inline

gets the position of an encoder as a 32 bit signed integer (it counts how many times the 16 bit number has overflowed)

Parameters
nencoder number (1-8), other values will return 0
readwhether to read the encoder positions from the board before returning the value, default is false
Return values
int32_tthe number of steps the encoder has taken

◆ getEncoderPositionWithoutOverflows()

int16_t ByteSizedEncoderDecoder::getEncoderPositionWithoutOverflows ( uint8_t  n,
boolean  read = false 
)
inline

gets the position of an encoder as the 16 bit number that the board returns (it loops around and overflows at 32767 and underflows at -32768)

Note
use getEncoderPosition if you want a 32 bit number that includes how many times the number from the board has overflowed
Parameters
nencoder number (1-8), other values will return 0
readwhether to read the encoder positions from the board before returning the value, default is false
Return values
int16_tthe number of steps the encoder has taken (though it loops around and overflows at 32767 and underflows at -32768)

◆ getEncoderVelocity()

int16_t ByteSizedEncoderDecoder::getEncoderVelocity ( uint8_t  n,
boolean  read = false 
)
inline

gets the velocity of an encoder

Parameters
nencoder number (1-8), other values will return 0
readwhether to read the encoder positions from the board before returning the value, default is false
Return values
int16_tthe velocity of the encoder (steps per second)

◆ isEncoderActive()

boolean ByteSizedEncoderDecoder::isEncoderActive ( uint8_t  n)
inline

whether you have set to read data from a specific encoder

Parameters
nencoder number (1-8)
Return values
booleanwhether you have set to read data from a specific encoder

◆ isVelNew()

boolean ByteSizedEncoderDecoder::isVelNew ( uint8_t  n)
inline

whether the velocity was just calculated

Note
this function resets the value to false, so call it just once
Parameters
nencoder number (1-8)
Return values
booleanwhether the velocity was just calculated

◆ resetEncoderPositions()

void ByteSizedEncoderDecoder::resetEncoderPositions ( boolean  resetVariables = true)
inline

resets all encoder positions to 0

Parameters
resetVariableswhether to reset the encoderCount and encoderOverflows variables, default is true

◆ run()

void ByteSizedEncoderDecoder::run ( )
inline

reads the encoder positions from the board

Note
call this in your loop to update the encoder positions

◆ setEncoderEnoughCounts()

void ByteSizedEncoderDecoder::setEncoderEnoughCounts ( uint8_t  n,
int16_t  counts 
)
inline

set the value of encoderEnoughCounts

Parameters
nencoder number (1-8), or 0 to set all at once
countsenough counts to calculate velocity

◆ setEncoderSlowestInterval()

void ByteSizedEncoderDecoder::setEncoderSlowestInterval ( uint8_t  n,
int16_t  interval 
)
inline

set the value of encoderSlowestInterval

Parameters
nencoder number (1-8), or 0 to set all at once
intervalafter this many milliseconds without a calculation, velocity is recalculated

◆ setWhichEncoders()

void ByteSizedEncoderDecoder::setWhichEncoders ( uint8_t  mask)
inline

set which encoders you want to receive data from

Parameters
mask8 bit mask of which encoders to read from 0b00000101 would read from encoders 6 and 8 (aligns with the labels on the board)

◆ write()

void ByteSizedEncoderDecoder::write ( uint8_t  data)
inlineprotected

helper function to write a byte to the board

Member Data Documentation

◆ address

uint8_t ByteSizedEncoderDecoder::address
protected

I2C address of the Byte Sized Encoder Decoder board (as selected by the jumpers)

◆ encoderCount

int16_t ByteSizedEncoderDecoder::encoderCount[8]
protected

array of 8 numbers representing the number of steps each encoder has taken

◆ encoderEnoughCounts

int16_t ByteSizedEncoderDecoder::encoderEnoughCounts[8]
protected

enough counts to calculate velocity from

◆ encoderOverflows

int16_t ByteSizedEncoderDecoder::encoderOverflows[8]
protected

array of 8 numbers representing the number of times each encoder's counter variable has overflowed

◆ encoderSlowestInterval

int16_t ByteSizedEncoderDecoder::encoderSlowestInterval[8]
protected

after this many milliseconds without an encoder tick velocity is set to zero.

◆ encoderVelocity

int16_t ByteSizedEncoderDecoder::encoderVelocity[8]
protected

array of 8 numbers representing the velocity of each encoder (steps per second)

◆ isVelNewVal

boolean ByteSizedEncoderDecoder::isVelNewVal[8]
protected

array of 8 booleans representing whether the velocity was just calculated

◆ lastEncoderCount

int16_t ByteSizedEncoderDecoder::lastEncoderCount[8]
protected

array of 8 numbers representing the last encoder count read from the board

◆ lastReadMicros

unsigned long ByteSizedEncoderDecoder::lastReadMicros[8]
protected

the last time the encoders were read (microseconds)

◆ lastVelocityEncoderCount

int16_t ByteSizedEncoderDecoder::lastVelocityEncoderCount[8]
protected

array of 8 numbers representing the last encoder count read from the board for velocity calculation

◆ whichEncodersMask

uint8_t ByteSizedEncoderDecoder::whichEncodersMask
protected

bit mask of which encoders to read from

◆ wire

TwoWire* ByteSizedEncoderDecoder::wire
protected

I2C bus to communicate over.


The documentation for this class was generated from the following file: