Driver to control leds one at a time or in group

Dependents:   handling_leds leds toggle writing ... more

Hotboards_leds.h

Committer:
Hotboards
Date:
2016-02-27
Revision:
0:ea0715867677

File content as of revision 0:ea0715867677:

/*
  Hotboards_leds.cpp - Driver to control leds one at a time or in group
  Hotboards leds board (http://hotboards.org)
  Created by Diego Perez, January 16, 2016.
  Released into the public domain.
*/
#ifndef Hotboards_leds_h
#define Hotboards_leds_h

#include "mbed.h"

/** Hotboards_leds class.
 *  Used to control general purpose leds
 *
 * Example:
 * @code
 * #include "mbed.h"
 * #include "Hotboards_leds.h"
 *
 * Hotboards_leds led( PB_5 );
 * 
 * int main( void ) 
 * {
 *     for(;;){  
 *         led.toggle( );
 *         wait( 0.2 );
 *     }
 * }
 * @endcode
 */
class Hotboards_leds
{
    public :
        /** Create Hotboards_leds instance for one led
          * @param led0 pin where the led 0 will be connected
          * @param on logic level to turn on the led
          * 
          * Example:
          * @code
          *   // instance one led on pin 5
          *   Hotboards_leds led( 5 );
          * @endcode
          */
        Hotboards_leds( PinName led0, bool on=1 );
        
        /** Create Hotboards_leds instance for two leds
          * @param led1 pin where the led 1 will be connected
          * @param led0 pin where the led 0 will be connected
          * @param on logic level to turn on the leds
          * 
          * Example:
          * @code
          *   // one instance with 2 leds on pins 5 and 6
          *   Hotboards_leds led( 5, 6 );
          * @endcode
          */
        Hotboards_leds( PinName led1, PinName led0, bool on=1 );
        
        /** Create Hotboards_leds instance for three leds
          * @param led2 pin where the led 2 will be connected
          * @param led1 pin where the led 1 will be connected
          * @param led0 pin where the led 0 will be connected
          * @param on logic level to turn on the leds
          * 
          * Example:
          * @code
          *   // one instance with 3 leds on pins 5, 6 and 7
          *   Hotboards_leds led( 5, 6, 7 );
          * @endcode
          */
        Hotboards_leds( PinName led2, PinName led1, PinName led0, bool on=1 );
        
        /** Create Hotboards_leds instance for four leds
          * @param led3 pin where the led 3 will be connected
          * @param led2 pin where the led 2 will be connected
          * @param led1 pin where the led 1 will be connected
          * @param led0 pin where the led 0 will be connected
          * @param on logic level to turn on the leds
          * 
          * Example:
          * @code
          *   // one instance with 4 leds on pins 5, 6, 7 and 8
          *   Hotboards_leds led( 5, 6, 7, 8 );
          * @endcode
          */
        Hotboards_leds( PinName led3, PinName led2, PinName led1, PinName led0, bool on=1 );
        
        /** Create Hotboards_leds instance for five leds
          * @param led4 pin where the led 4 will be connected
          * @param led3 pin where the led 3 will be connected
          * @param led2 pin where the led 2 will be connected
          * @param led1 pin where the led 1 will be connected
          * @param led0 pin where the led 0 will be connected
          * @param on logic level to turn on the leds
          * 
          * Example:
          * @code
          *   // one instance with 5 leds on pins 5, 6, 7, 8 and 9
          *   Hotboards_leds led( 5, 6, 7, 8, 9 );
          * @endcode
          */
        Hotboards_leds( PinName led4, PinName led3, PinName led2, PinName led1, PinName led0, bool on=1 );
        
        /** Create Hotboards_leds instance for six leds
          * @param led5 pin where the led 5 will be connected
          * @param led4 pin where the led 4 will be connected
          * @param led3 pin where the led 3 will be connected
          * @param led2 pin where the led 2 will be connected
          * @param led1 pin where the led 1 will be connected
          * @param led0 pin where the led 0 will be connected
          * @param on logic level to turn on the leds
          * 
          * Example:
          * @code
          *   // one instance with 6 leds on pins 5, 6, 7, 8, 9 and 10
          *   Hotboards_leds led( 5, 6, 7, 8, 9, 10 );
          * @endcode
          */
        Hotboards_leds( PinName led5, PinName led4, PinName led3, PinName led2, PinName led1, PinName led0, bool on=1 );
        
        /** Create Hotboards_leds instance for seven leds
          * @param led6 pin where the led 6 will be connected
          * @param led5 pin where the led 5 will be connected
          * @param led4 pin where the led 4 will be connected
          * @param led3 pin where the led 3 will be connected
          * @param led2 pin where the led 2 will be connected
          * @param led1 pin where the led 1 will be connected
          * @param led0 pin where the led 0 will be connected
          * @param on logic level to turn on the leds
          * 
          * Example:
          * @code
          *   // one instance with 7 leds on pins 5, 6, 7, 8, 9, 10 and 11
          *   Hotboards_leds led( 5, 6, 7, 8, 9, 10, 11 );
          * @endcode
          */
        Hotboards_leds( PinName led6, PinName led5, PinName led4, PinName led3, PinName led2, PinName led1, PinName led0, bool on=1 );
        
        /** Create Hotboards_leds instance for eight leds
          * @param led7 pin where the led 7 will be connected
          * @param led6 pin where the led 6 will be connected
          * @param led5 pin where the led 5 will be connected
          * @param led4 pin where the led 4 will be connected
          * @param led3 pin where the led 3 will be connected
          * @param led2 pin where the led 2 will be connected
          * @param led1 pin where the led 1 will be connected
          * @param led0 pin where the led 0 will be connected
          * @param on logic level to turn on the leds
          * 
          * Example:
          * @code
          *   // one instance with 8 leds on pins 5, 6, 7, 8, 9, 10, 11 and 12
          *   Hotboards_leds led( 5, 6, 7, 8, 9, 10, 11, 12 );
          * @endcode
          */
        Hotboards_leds( PinName led7, PinName led6, PinName led5, PinName led4, PinName led3, PinName led2, PinName led1, PinName led0, bool on=1 );
        
        /** Turn on a single led
          * @param led led number to be turn on
          * 
          * Example:
          * @code
          *   // instance one led on pin 5 and turn it on
          *   Hotboards_leds led( 5 );
          *   led.turnOn( );
          *     
          *   // instance a bus with 4 leds
          *   Hotboards_leds leds( 8, 7, 6, 5 );
          *   // turn on led 2 on pin 7
          *   leds.turnOn( 2 );
          *   // turn on led 0 on pin 5
          *   leds.turnOn( 0 );
          * @endcode
          */
        void turnOn( uint8_t led=0 );
        
        /** Turn off a single led
          * @param led led number to be turn off
          * 
          * Example:
          * @code
          *   // instance one led on pin 5 and turn it off
          *   Hotboards_leds led( 5 );
          *   led.turnOff( );
          *     
          *   // instance a bus with 4 leds
          *   Hotboards_leds leds( 8, 7, 6, 5 );
          *   // turn off led 3 on pin 8
          *   leds.turnOff( 3 );
          *   // turn off led 0 on pin 5
          *   leds.turnOff( 0 );
          * @endcode
          */
        void turnOff( uint8_t led=0 );
        
        /** Toggle a single led
          * @param led led number to be toggled
          * 
          * Example:
          * @code
          *   // instance one led on pin 7 and toggle it
          *   Hotboards_leds led( 7 );
          *   led.toggle( );
          *     
          *   // instance a bus with 3 leds
          *   Hotboards_leds leds( 2, 3, 4 );
          *   // toggle led 2 on pin 2
          *   leds.toggle( 2 );
          *   // toggle led 1 on pin 3
          *   leds.toggle( 1 );
          * @endcode
          */
        void toggle( uint8_t led=0 );
        
        /** Write to a single led or the entire bus
          * @param val value to be written
          * 
          * Example:
          * @code
          *   // instance one led on pin 7 and write a 1 (aceptara valores de 0 a 1) 
          *   Hotboards_leds led( 7 );
          *   led.write( 1 );
          *    
          *   // instance a 4 leds bus (pin2->led3 ..... pin5->led0)
          *   Hotboards_leds leds( 2, 3, 4, 5 );
          *   // write the 10 value (it will accept values from 0 to 15) 
          *   leds.write( 10 );
          *      
          *   // instance an 8 leds bus (pin4->led7 ..... pin3->led0)
          *   Hotboards_leds leds( 4, 3, 2, 6, 5, 7, 8, 9 );
          *   // write the 134 value (it will accept values from 0 to 255)
          *   leds.write( 134 );
          * @endcode
          */
        void write( uint8_t val );
        
        /** Read a single led or the entire bus
          * @return led states
          * 
          * Example:
          * @code
          *   // instance on led on 7 and read its state (0 o 1)
          *   Hotboards_leds led( 7 );
          *   uint8_t var = led.read( );
          *    
          *   // instance an 8 leds bus (pin9->led7 ..... pin2->led0)
          *   Hotboards_leds leds( 9, 8, 7, 6, 5, 4, 3, 2 );
          *   // read the leds value (from 0 to 255) 
          *   uint8_t var = leds.read( );
          *  
          *   // nstance a 4 leds bus (pin2->led3 ..... pin5->led0)
          *   Hotboards_leds leds( 2, 3, 4, 5 );
          *   // read led 1 state (pin 4) 
          *   uint8_t val1 = leds.write( 1 );
          *   // read led 0 state (pin 5) 
          *   uint8_t val2 = leds.write( 0 );
          * @endcode
          */
        uint8_t read( uint8_t led=0xff );

    private :
        void begin( uint8_t led, PinName pin );
        DigitalOut *_pin[8];
        uint8_t _leds;
        uint8_t _state;
        bool _on;
};

#endif