this is documentation for my Arduino (and similar microcontroller) libraries. they exist to support fast, easy to use and appropriately-scaled real-time, event-driven coding practices. most of these require the use of an event loop strategy that is strongly implied by the Arduino team's loop() skeletal program structure.

all of this code is appropriately scaled for the Arduino environment. these are not dragged in from a "desktop" software environment, but coded specifically for good performance from minimalist hardware -- which means they are even faster on fast processors.

all of the major functions provided here are designed to be invoked repeatedly from loop(), as often as possible. with rare and documented exceptions all of the code thus inserted into loop() executes in tens of microseconds -- my code does not block.

in short, all of this is meant to be used within a particular strategy towards structuring code. documention on that strategy is forthcoming (fall 2015). for now this is the start of the component documentation.


the following objects are in the library at this time. click the link to go to the documentation page. they are all available from my github repository. they install in the usual way.

object description library
SRTimer timed event/time-as-event functions. SRResources
SRLED LED-blinking manager. SRResources
SRButton momentary pushbutton switch and digital sensor functions. SRResources
SRCRC CRC-8 polynomial functions. SRResources
SRPRNG 8, 16, and 32-bit Marsaglia XORshift pseudo-random number sequence generators. much faster and somewhat smaller than built-in random(). 8 and 16 bit are far more than adequate for non-crypto purposes. SRResources
SRLoopTally simple tool for performance-checking your non-blocking code! SRResources
SRMessage very compact, generalized message-parsing system. SRResources
SRSmooth Exponential Smoothing function. see wikiledia entry for Exponential smoothing. "...a rule of thumb technique for smoothing time series data... Like any application of repeated low-pass filtering, the observed phenomenon may be an essentially random process, or it may be an orderly, but noisy, process. Whereas in the simple moving average the past observations are weighted equally, exponential window functions assign exponentially decreasing weights over time..." SRSmooth
SRPID proportional integral derivative functions of suitable scale for small controllers. integer and float versions. ideal for deriving change information from any proportional analog sensor. as well as typical closed-loop control. SRPID
obsolete SRPID this is the previous SRPID code, all integer. use the floating point version above. this integer version will be slightly faster in some cases, but it uses an array for the simple moving average integrator which means that parameter is not runtime tunable, and SMA has some noise issues. old SRPID
Integrator integration and averaging functions. SRPID
Differentiator simple differentiation functions. SRPID
SRFlock novel, simple, easy to use self-configuring radio network system that uses SRRF24 (below) for transport. built-in SRMessage support. SRRadio
SRRF24 robust, fast, compact, thorough driver for absurdly inexpensive Nordic NRF24L01+ 2.4GHz radio module. SRRadio