Tekkotsu Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

LedEngine Class Reference

Provides basic LED effects via subclassing (e.g. LedMC) or embedding (e.g. EmergencyStopMC). More...

#include <LedEngine.h>

Inheritance diagram for LedEngine:

Detailed Description

Provides basic LED effects via subclassing (e.g. LedMC) or embedding (e.g. EmergencyStopMC).

This implements a collection of LED special effects so that the code can be reused various places as feedback to to the user.

The basic effects provided are:

The 'c' prefix on a function (cset(), cflash(), ccycle()) means it will call clear() before doing its own setting. This is a quick way to replace whatever is currently displayed with whatever you are about to display.

A flash() will invert and override the current setting, so that it will "reset" after the flash. Flashes change mid-range values to extremes to make the flash visible (ie not just (1-current)) Normal invert() will do simple inverses (just (1-current)), and doesn't change back automatically.

Cycling ("pulsing") and single-value setting are mutually exclusive; one will cut off the other

getSetting() returns value of last set(); getValue() returns what's actually being returned to Motion at the moment

There's some nice functions for using the LEDs to display numbers. This is handy for when you want to be free of the terminal.

NumberLEDs.jpg

The ERS-220 and ERS-7 have enough LEDs that they just use a "count the lights" style of display instead of this pseudo-arabic display. (look close to see that green bar LED at the top of the 210, which doesn't show up well in the camera image for some reason. )

NumberLEDs-ERS7.jpg

The ERS-7 also has a "mode" which controls how certain face LEDs are interpreted. By setting ERS7Info::LEDABModeOffset / ERS7Info::LEDABModeMask, you can switch between the modes -- a value of 0 is mode "A", and a value of 1 is mode "B".

ERS7-LED-Modes.png

Things to note for the ERS-7:

  • There are many fewer LEDs than there are holes in the "grill" (the holes you see on the face are not the positions of the LEDs.
  • Each LED covers several holes.
  • Not all holes have LEDs behind them -- some areas of the face panel are always dark.
  • Some LEDs (12 and 13) control two symmetrical physical LEDs.
  • Some LEDs change color based on mode (0-1), some don't change at all (2-11), and some change position and color (12-13)
  • We don't have individual names for all of the LEDs on the panel. Instead you base off of FaceLEDPanelOffset or FaceLEDPanelMask to address the LEDs, e.g., to set the nth led to x: or (if using other classes, e.g. PostureEngine)

Definition at line 71 of file LedEngine.h.

List of all members.

Classes

struct  LEDInfo
 Holds all the information needed by each of the LEDs. More...

Public Types

enum  numStyle_t { onedigit, twodigit }
 

Use these to specify a style for displaying numbers using displayNumber().

More...
enum  percentStyle_t { major, minor, none }
 

Use these to specify a style for displaying a percentage value [0-1] using displayPercent().

More...

Public Member Functions

 LedEngine ()
 constructor - don't forget to call if you inherit
virtual ~LedEngine ()
 destructor
int updateLEDs (const MotionCommand *caller, LEDBitMask_t mask=AllLEDMask)
 call this from a MotionCommand's updateOutputs() - makes calls to MotionManager to update LED values
int updateLEDs (OutputCmd cmds[NumLEDs])
 call this from a MotionCommand's updateOutputs() - performs the calculations to update LEDs' values
int updateLEDFrames (OutputCmd cmds[NumLEDs][NumFrames])
 call this from a MotionCommand's updateOutputs() - performs the calculations to update LEDs' values
void recalcFlashEnd ()
 recalculates nextFlashEnd so we can tell when a flash has completed
int isDirty ()
 returns true if there are changes since the last updateLEDs()
void invert (LEDBitMask_t leds)
 sets the leds specified by leds to the inverse of their current value
void cset (LEDBitMask_t leds, float value)
 sets the leds specified by leds to value, clears all the rest
void set (LEDBitMask_t leds, float value)
 sets the leds specified by leds to value
void cflash (LEDBitMask_t leds, float value, unsigned int ms)
 sets the leds specified by leds to value for ms milliseconds, then sets back. Clears ~leds
void flash (LEDBitMask_t leds, float value, unsigned int ms)
 sets the leds specified by leds to value for ms milliseconds, then sets back.
void flash (LEDBitMask_t leds, unsigned int ms)
 sets the leds specified by leds to either a much higher or much lower value for ms milliseconds, then sets back.
void ccycle (LEDBitMask_t leds, unsigned int period, float amp, float offset=0, int phase=0)
 causes the leds specified by leds to cycle between low and high, clears others. See cycle() for parameter documentation.
void cycle (LEDBitMask_t leds, unsigned int period, float amp, float offset=0, int phase=0)
 causes the leds specified by leds to cycle between low and high; values calculated for cycle will be clipped to [0,1] for more sensible blending of square wave approximations (high amplitude sine wave)
void clear ()
 sets all leds to 0.
void extendFlash (unsigned int ms)
 adds ms to all flash times (may resurrect previously completed flashes)
float getSetting (LEDOffset_t led_id)
 returns the current setting of the LED specified by led_id (the value you passed in set())
float getValue (LEDOffset_t led_id, unsigned int planahead=0)
 returns the current value of the LED specified by led_id (the value being expressed - may change if cycling for instance)
void displayNumber (int x, numStyle_t style)
 Allows convenient display of numerical information to the LEDs on the face.
void displayPercent (float x, percentStyle_t left_style, percentStyle_t right_style)
 Allows convenient display of percentage information to the LEDs on the face.

Static Public Attributes

static const LEDBitMask_t defaultCountNumMasks [11]

Protected Member Functions

float calcValue (unsigned int i, unsigned int t)
 Calculates the current value of led i for current time t.
void setOneOfTwo (unsigned int x, unsigned int low, unsigned int mid, unsigned int high)
 used by displayNumber() to determine settings of LEDs when using numStyle_t::twodigit
void setColumn (float x, unsigned int low, unsigned int mid, unsigned int high, unsigned int top)
 used by displayPercent() to determine settings of LEDs

Static Protected Member Functions

static float calcInvert (float value)
 Performs the 'invert' calculation based on current value (returns 1-value).
static float calcFlash (float value)
 Performs the 'flash' calculation based on current value (uses calcInvert() if value upper or lower third, 0 or 1 otherwise).
static float calcCycle (unsigned int period, float amp, float offset, unsigned int t)
 Performs the 'cycle' calculation based on desired period, amplituted, amplitude offset, and time since start. See cycle().

Protected Attributes

LEDInfo infos [NumLEDs]
 the information regarding each of the LEDs
bool dirty
 true if changes since last updateLEDs: either at least one LED is cycling or a flash has begun/ended
unsigned int numCycling
 the number of LEDs currently cycling (if non-zero, always dirty)
unsigned int nextFlashEnd
 the soonest time a flash will end (and we'll become dirty)

Member Enumeration Documentation

Use these to specify a style for displaying numbers using displayNumber().

Enumerator:
onedigit 

can display a number -9 thru 9, using the current robot model's numMask. For negative numbers, blinks the top bar - fast if it's supposed to be on, slow if it would otherwise be off

twodigit 

can display a number -99 thru 99, using setOneOfTwo(). For negative numbers, sets the top bar to 1 (off otherwise).

Definition at line 148 of file LedEngine.h.

Use these to specify a style for displaying a percentage value [0-1] using displayPercent().

Enumerator:
major 

shows overall value

minor 

shows value within major tick

none 

if you want to leave blank

Definition at line 153 of file LedEngine.h.


Constructor & Destructor Documentation

LedEngine::LedEngine (  ) 

constructor - don't forget to call if you inherit

Definition at line 125 of file LedEngine.cc.

virtual LedEngine::~LedEngine (  )  [virtual]

destructor

Definition at line 76 of file LedEngine.h.


Member Function Documentation

static float LedEngine::calcCycle ( unsigned int  period,
float  amp,
float  offset,
unsigned int  t 
) [static, protected]

Performs the 'cycle' calculation based on desired period, amplituted, amplitude offset, and time since start. See cycle().

Definition at line 187 of file LedEngine.h.

Referenced by calcValue().

static float LedEngine::calcFlash ( float  value  )  [static, protected]

Performs the 'flash' calculation based on current value (uses calcInvert() if value upper or lower third, 0 or 1 otherwise).

Definition at line 180 of file LedEngine.h.

Referenced by flash().

static float LedEngine::calcInvert ( float  value  )  [static, protected]

Performs the 'invert' calculation based on current value (returns 1-value).

Definition at line 176 of file LedEngine.h.

Referenced by calcFlash().

float LedEngine::calcValue ( unsigned int  i,
unsigned int  t 
) [protected]

Calculates the current value of led i for current time t.

Definition at line 197 of file LedEngine.h.

Referenced by flash(), getValue(), updateLEDFrames(), and updateLEDs().

void LedEngine::ccycle ( LEDBitMask_t  leds,
unsigned int  period,
float  amp,
float  offset = 0,
int  phase = 0 
)

causes the leds specified by leds to cycle between low and high, clears others. See cycle() for parameter documentation.

Definition at line 110 of file LedEngine.h.

Referenced by displayNumber().

void LedEngine::cflash ( LEDBitMask_t  leds,
float  value,
unsigned int  ms 
)

sets the leds specified by leds to value for ms milliseconds, then sets back. Clears ~leds

Definition at line 211 of file LedEngine.cc.

Referenced by ControlBase::doSelect().

void LedEngine::clear (  ) 

sets all leds to 0.

Definition at line 280 of file LedEngine.cc.

Referenced by ccycle(), cset(), ControlBase::deactivate(), displayNumber(), displayPercent(), ControlBase::doSelect(), and LedEngine().

void LedEngine::cset ( LEDBitMask_t  leds,
float  value 
)

sets the leds specified by leds to value, clears all the rest

Definition at line 100 of file LedEngine.h.

Referenced by ControlBase::doReadStdIn().

void LedEngine::cycle ( LEDBitMask_t  leds,
unsigned int  period,
float  amp,
float  offset = 0,
int  phase = 0 
)

causes the leds specified by leds to cycle between low and high; values calculated for cycle will be clipped to [0,1] for more sensible blending of square wave approximations (high amplitude sine wave)

Parameters:
leds the bitmask of leds to apply this to
period the period of the cycle (milliseconds), includes an on and off
amp the amplitude of the cycle - note that this is clipped at 0 and 1.
offset the vertical offset of the cycle - simply shifts the baseline of the cycle up or down
phase the phase within the cycle to start at (specify in milliseconds)

When this function is called, the starting time is stored as current time + phase.

The equation used is

\[\cos(\frac{2\pi(t-starttime)}{period})*(\frac{-amp}{2})+.5+offset\]

The idea is that with a amplitude=1 and offset=0, it will start at 0, ramp up to 1, and then ramp down again. The arguments to this function will let you control all parameters of the cycle.

You can get a blink-on/off instead of cycle on/off by using a very large amplitude.

Definition at line 263 of file LedEngine.cc.

Referenced by ccycle(), and EmergencyStopMC::EmergencyStopMC().

void LedEngine::displayNumber ( int  x,
numStyle_t  style 
)

Allows convenient display of numerical information to the LEDs on the face.

If overflow occurs, the face LEDs are set to flash on and off 3 every 333 milliseconds

Definition at line 299 of file LedEngine.cc.

Referenced by ControlBase::refresh(), and FlashIPAddrBehavior::setupSequence().

void LedEngine::displayPercent ( float  x,
percentStyle_t  left_style,
percentStyle_t  right_style 
)

Allows convenient display of percentage information to the LEDs on the face.

Besides allowing a two-digit display, the 'edge' bar for each type is blinked to denote how full it is. So you can get up to a two-digit, base 5 display, with an extra digit of estimated value.

If overflow (>1) occurs, sets everything to .75.
If underflow (<0) occurs, sets everything to .25.

The left and right columns are combined with an OR operation. (they overlap on the top bar) Left and right designations are dog centric!

Definition at line 397 of file LedEngine.cc.

void LedEngine::extendFlash ( unsigned int  ms  ) 

adds ms to all flash times (may resurrect previously completed flashes)

Definition at line 290 of file LedEngine.cc.

void LedEngine::flash ( LEDBitMask_t  leds,
unsigned int  ms 
)

sets the leds specified by leds to either a much higher or much lower value for ms milliseconds, then sets back.

Definition at line 234 of file LedEngine.cc.

void LedEngine::flash ( LEDBitMask_t  leds,
float  value,
unsigned int  ms 
)

sets the leds specified by leds to value for ms milliseconds, then sets back.

Definition at line 221 of file LedEngine.cc.

Referenced by ControlBase::doSelect().

float LedEngine::getSetting ( LEDOffset_t  led_id  ) 

returns the current setting of the LED specified by led_id (the value you passed in set())

Definition at line 120 of file LedEngine.h.

float LedEngine::getValue ( LEDOffset_t  led_id,
unsigned int  planahead = 0 
)

returns the current value of the LED specified by led_id (the value being expressed - may change if cycling for instance)

Definition at line 129 of file LedEngine.h.

Referenced by FlashIPAddrBehavior::setupSequence().

void LedEngine::invert ( LEDBitMask_t  leds  ) 

sets the leds specified by leds to the inverse of their current value

Definition at line 185 of file LedEngine.cc.

int LedEngine::isDirty (  ) 

returns true if there are changes since the last updateLEDs()

Reimplemented in LedMC.

Definition at line 141 of file LedEngine.cc.

void LedEngine::recalcFlashEnd ( void   ) 

recalculates nextFlashEnd so we can tell when a flash has completed

Definition at line 133 of file LedEngine.cc.

Referenced by isDirty(), updateLEDFrames(), and updateLEDs().

void LedEngine::set ( LEDBitMask_t  leds,
float  value 
)

sets the leds specified by leds to value

Definition at line 198 of file LedEngine.cc.

void LedEngine::setColumn ( float  x,
unsigned int  low,
unsigned int  mid,
unsigned int  high,
unsigned int  top 
) [protected]

used by displayPercent() to determine settings of LEDs

Definition at line 440 of file LedEngine.cc.

Referenced by displayPercent().

void LedEngine::setOneOfTwo ( unsigned int  x,
unsigned int  low,
unsigned int  mid,
unsigned int  high 
) [protected]

used by displayNumber() to determine settings of LEDs when using numStyle_t::twodigit

Definition at line 371 of file LedEngine.cc.

Referenced by displayNumber().

int LedEngine::updateLEDFrames ( OutputCmd  cmds[NumLEDs][NumFrames]  ) 

call this from a MotionCommand's updateOutputs() - performs the calculations to update LEDs' values

Parameters:
cmds on input, used for weight values - on return, holds the resulting OutputCmd's

Definition at line 174 of file LedEngine.cc.

Referenced by LedMC::updateOutputs().

int LedEngine::updateLEDs ( OutputCmd  cmds[NumLEDs]  ) 

call this from a MotionCommand's updateOutputs() - performs the calculations to update LEDs' values

Parameters:
cmds on input, used for weight values - on return, holds the resulting OutputCmd's

Definition at line 164 of file LedEngine.cc.

int LedEngine::updateLEDs ( const MotionCommand caller,
LEDBitMask_t  mask = AllLEDMask 
)

call this from a MotionCommand's updateOutputs() - makes calls to MotionManager to update LED values

Parameters:
caller pass the "parent" motioncommand's address here (usually will pass 'this')
mask a bitmask of which leds to update (uses weight of 1)

Definition at line 150 of file LedEngine.cc.

Referenced by EmergencyStopMC::updateOutputs().


Member Data Documentation

const LEDBitMask_t LedEngine::defaultCountNumMasks [static]
Initial value:
 {
  (1<<0)|(1<<8), 
  (1<<0), 
  (1<<0)|(1<<1), 
  (1<<0)|(1<<1)|(1<<2), 
  (1<<0)|(1<<1)|(1<<2)|(1<<3), 
  (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4), 
  (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5), 
  (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6), 
  (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7), 
  (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8), 
  (1<<1)|(1<<3)|(1<<5)|(1<<7) 
}

bit masks for the ondigit style of numberical display - just count the LEDs on the head

This is "Count the dots" style

Definition at line 146 of file LedEngine.h.

Referenced by displayNumber(), and FlashIPAddrBehavior::setupSequence().

bool LedEngine::dirty [protected]

true if changes since last updateLEDs: either at least one LED is cycling or a flash has begun/ended

Definition at line 223 of file LedEngine.h.

Referenced by cflash(), clear(), cycle(), LedMC::doStart(), extendFlash(), flash(), invert(), isDirty(), set(), LedMC::setDirty(), updateLEDFrames(), updateLEDs(), and LedMC::updateOutputs().

LEDInfo LedEngine::infos[NumLEDs] [protected]

the information regarding each of the LEDs

Definition at line 222 of file LedEngine.h.

Referenced by calcValue(), cflash(), clear(), cycle(), displayNumber(), extendFlash(), flash(), getSetting(), invert(), LedEngine(), recalcFlashEnd(), set(), and setOneOfTwo().

unsigned int LedEngine::nextFlashEnd [protected]

the soonest time a flash will end (and we'll become dirty)

Definition at line 225 of file LedEngine.h.

Referenced by cflash(), extendFlash(), flash(), LedMC::isAlive(), isDirty(), recalcFlashEnd(), updateLEDFrames(), updateLEDs(), and LedMC::updateOutputs().

unsigned int LedEngine::numCycling [protected]

the number of LEDs currently cycling (if non-zero, always dirty)

Definition at line 224 of file LedEngine.h.

Referenced by clear(), cycle(), set(), updateLEDFrames(), and updateLEDs().


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

Tekkotsu v5.1CVS
Generated Tue Apr 22 03:51:27 2014 by Doxygen 1.6.3