Driver to control leds one at a time or in group

Dependents:   handling_leds leds toggle writing ... more

Files at this revision

API Documentation at this revision

Comitter:
Hotboards
Date:
Sat Feb 27 23:35:58 2016 +0000
Commit message:
first release , library complete, but is not tested

Changed in this revision

Hotboards_leds.cpp Show annotated file Show diff for this revision Revisions of this file
Hotboards_leds.h Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r ea0715867677 Hotboards_leds.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Hotboards_leds.cpp	Sat Feb 27 23:35:58 2016 +0000
@@ -0,0 +1,172 @@
+/*
+  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.
+*/
+
+#include "Hotboards_leds.h"
+
+#define bitRead( var, bit )           (((var) >> (bit)) & 0x01)
+#define bitWrite( var, bit, val )     (val) ? (var) |= (1<<(bit)) : (var) &= ~(1<<(bit))
+
+Hotboards_leds::Hotboards_leds( PinName led0, bool on )
+{
+    _leds = 1;
+    _state = 0;
+    _on = on;
+    begin( 0, led0 );
+}
+
+Hotboards_leds::Hotboards_leds( PinName led1, PinName led0, bool on )
+{
+    _leds = 2;
+    _state = 0;
+    _on = on;
+    begin( 0, led0 );
+    begin( 1, led1 );
+}
+
+Hotboards_leds::Hotboards_leds( PinName led2, PinName led1, PinName led0, bool on )
+{
+    _leds = 3;
+    _state = 0;
+    _on = on;
+    begin( 0, led0 );
+    begin( 1, led1 );
+    begin( 2, led2 );
+}
+
+Hotboards_leds::Hotboards_leds( PinName led3, PinName led2, PinName led1, PinName led0, bool on )
+{
+    _leds = 4;
+    _state = 0;
+    _on = on;
+    begin( 0, led0 );
+    begin( 1, led1 );
+    begin( 2, led2 );
+    begin( 3, led3 );
+}
+
+Hotboards_leds::Hotboards_leds( PinName led4, PinName led3, PinName led2, PinName led1, PinName led0, bool on )
+{
+    _leds = 5;
+    _state = 0;
+    _on = on;
+    begin( 0, led0 );
+    begin( 1, led1 );
+    begin( 2, led2 );
+    begin( 3, led3 );
+    begin( 4, led4 );
+}
+
+Hotboards_leds::Hotboards_leds( PinName led5, PinName led4, PinName led3, PinName led2, PinName led1, PinName led0, bool on )
+{
+    _leds = 6;
+    _state = 0;
+    _on = on;
+    begin( 0, led0 );
+    begin( 1, led1 );
+    begin( 2, led2 );
+    begin( 3, led3 );
+    begin( 4, led4 );
+    begin( 5, led5 );
+}
+
+Hotboards_leds::Hotboards_leds( PinName led6, PinName led5, PinName led4, PinName led3, PinName led2, PinName led1, PinName led0, bool on )
+{
+    _leds = 7;
+    _state =  0;
+    _on = on;
+    begin( 0, led0 );
+    begin( 1, led1 );
+    begin( 2, led2 );
+    begin( 3, led3 );
+    begin( 4, led4 );
+    begin( 5, led5 );
+    begin( 6, led6 );
+}
+
+Hotboards_leds::Hotboards_leds( PinName led7, PinName led6, PinName led5, PinName led4, PinName led3, PinName led2, PinName led1, PinName led0, bool on )
+{
+    _leds = 8;
+    _state = 0;
+    _on = on;
+    begin( 0, led0 );
+    begin( 1, led1 );
+    begin( 2, led2 );
+    begin( 3, led3 );
+    begin( 4, led4 );
+    begin( 5, led5 );
+    begin( 6, led6 );
+    begin( 7, led7 );
+}
+
+void Hotboards_leds::turnOn( uint8_t led )
+{
+    bitWrite( _state, led, _on );
+    _pin[ led ]->write( bitRead( _state, led ) );
+    //_pin[ led ]->write( 1 );
+}
+void Hotboards_leds::turnOff( uint8_t led )
+{
+    bitWrite( _state, led, !_on );
+    _pin[ led ]->write( bitRead( _state, led ) );
+    //_pin[ led ]->write( 0 );
+}
+
+void Hotboards_leds::toggle( uint8_t led )
+{
+    if( bitRead( _state, led ) == _on )
+    {
+        turnOff( led );
+    }
+    else
+    {
+        turnOn( led );
+    }
+}
+
+uint8_t Hotboards_leds::read( uint8_t led )
+{
+    uint8_t i;
+    uint8_t val = 0;
+
+    if( led == 0xff )
+    {
+        for( i=0 ; i<_leds ; i++ )
+        {
+            bitWrite( val, i, bitRead( _state, i ) );
+        }
+    }
+    else
+    {
+        val = bitRead( _state, led );
+    }
+    return val;
+}
+
+void Hotboards_leds::write( uint8_t val )
+{
+    uint8_t i;
+    for( i=0 ; i<_leds ; i++ )
+    {
+        if( bitRead( val, i ) )
+        {
+            turnOn( i );
+        }
+        else
+        {
+            turnOff( i );
+        }
+    }
+}
+
+void Hotboards_leds::begin( uint8_t led, PinName pin )
+{
+    // set the digital outpout that holds the led
+    _pin[ led ] = new DigitalOut( pin );
+    // turn off led (as initial state)
+    bitWrite( _state, led, !_on );
+    _pin[ led ]->write( !_on );
+}
diff -r 000000000000 -r ea0715867677 Hotboards_leds.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Hotboards_leds.h	Sat Feb 27 23:35:58 2016 +0000
@@ -0,0 +1,269 @@
+/*
+  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