Driver to control leds one at a time or in group

Dependents:   handling_leds leds toggle writing ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Hotboards_leds.cpp Source File

Hotboards_leds.cpp

00001 /*
00002   Hotboards_leds.cpp - Driver to control leds one at a time or in group
00003   Hotboards leds board (http://hotboards.org)
00004   Created by Diego Perez, January 16, 2016.
00005   Released into the public domain.
00006 */
00007 
00008 #include "Hotboards_leds.h"
00009 
00010 #define bitRead( var, bit )           (((var) >> (bit)) & 0x01)
00011 #define bitWrite( var, bit, val )     (val) ? (var) |= (1<<(bit)) : (var) &= ~(1<<(bit))
00012 
00013 Hotboards_leds::Hotboards_leds( PinName led0, bool on )
00014 {
00015     _leds = 1;
00016     _state = 0;
00017     _on = on;
00018     begin( 0, led0 );
00019 }
00020 
00021 Hotboards_leds::Hotboards_leds( PinName led1, PinName led0, bool on )
00022 {
00023     _leds = 2;
00024     _state = 0;
00025     _on = on;
00026     begin( 0, led0 );
00027     begin( 1, led1 );
00028 }
00029 
00030 Hotboards_leds::Hotboards_leds( PinName led2, PinName led1, PinName led0, bool on )
00031 {
00032     _leds = 3;
00033     _state = 0;
00034     _on = on;
00035     begin( 0, led0 );
00036     begin( 1, led1 );
00037     begin( 2, led2 );
00038 }
00039 
00040 Hotboards_leds::Hotboards_leds( PinName led3, PinName led2, PinName led1, PinName led0, bool on )
00041 {
00042     _leds = 4;
00043     _state = 0;
00044     _on = on;
00045     begin( 0, led0 );
00046     begin( 1, led1 );
00047     begin( 2, led2 );
00048     begin( 3, led3 );
00049 }
00050 
00051 Hotboards_leds::Hotboards_leds( PinName led4, PinName led3, PinName led2, PinName led1, PinName led0, bool on )
00052 {
00053     _leds = 5;
00054     _state = 0;
00055     _on = on;
00056     begin( 0, led0 );
00057     begin( 1, led1 );
00058     begin( 2, led2 );
00059     begin( 3, led3 );
00060     begin( 4, led4 );
00061 }
00062 
00063 Hotboards_leds::Hotboards_leds( PinName led5, PinName led4, PinName led3, PinName led2, PinName led1, PinName led0, bool on )
00064 {
00065     _leds = 6;
00066     _state = 0;
00067     _on = on;
00068     begin( 0, led0 );
00069     begin( 1, led1 );
00070     begin( 2, led2 );
00071     begin( 3, led3 );
00072     begin( 4, led4 );
00073     begin( 5, led5 );
00074 }
00075 
00076 Hotboards_leds::Hotboards_leds( PinName led6, PinName led5, PinName led4, PinName led3, PinName led2, PinName led1, PinName led0, bool on )
00077 {
00078     _leds = 7;
00079     _state =  0;
00080     _on = on;
00081     begin( 0, led0 );
00082     begin( 1, led1 );
00083     begin( 2, led2 );
00084     begin( 3, led3 );
00085     begin( 4, led4 );
00086     begin( 5, led5 );
00087     begin( 6, led6 );
00088 }
00089 
00090 Hotboards_leds::Hotboards_leds( PinName led7, PinName led6, PinName led5, PinName led4, PinName led3, PinName led2, PinName led1, PinName led0, bool on )
00091 {
00092     _leds = 8;
00093     _state = 0;
00094     _on = on;
00095     begin( 0, led0 );
00096     begin( 1, led1 );
00097     begin( 2, led2 );
00098     begin( 3, led3 );
00099     begin( 4, led4 );
00100     begin( 5, led5 );
00101     begin( 6, led6 );
00102     begin( 7, led7 );
00103 }
00104 
00105 void Hotboards_leds::turnOn( uint8_t led )
00106 {
00107     bitWrite( _state, led, _on );
00108     _pin[ led ]->write( bitRead( _state, led ) );
00109     //_pin[ led ]->write( 1 );
00110 }
00111 void Hotboards_leds::turnOff( uint8_t led )
00112 {
00113     bitWrite( _state, led, !_on );
00114     _pin[ led ]->write( bitRead( _state, led ) );
00115     //_pin[ led ]->write( 0 );
00116 }
00117 
00118 void Hotboards_leds::toggle( uint8_t led )
00119 {
00120     if( bitRead( _state, led ) == _on )
00121     {
00122         turnOff( led );
00123     }
00124     else
00125     {
00126         turnOn( led );
00127     }
00128 }
00129 
00130 uint8_t Hotboards_leds::read( uint8_t led )
00131 {
00132     uint8_t i;
00133     uint8_t val = 0;
00134 
00135     if( led == 0xff )
00136     {
00137         for( i=0 ; i<_leds ; i++ )
00138         {
00139             bitWrite( val, i, bitRead( _state, i ) );
00140         }
00141     }
00142     else
00143     {
00144         val = bitRead( _state, led );
00145     }
00146     return val;
00147 }
00148 
00149 void Hotboards_leds::write( uint8_t val )
00150 {
00151     uint8_t i;
00152     for( i=0 ; i<_leds ; i++ )
00153     {
00154         if( bitRead( val, i ) )
00155         {
00156             turnOn( i );
00157         }
00158         else
00159         {
00160             turnOff( i );
00161         }
00162     }
00163 }
00164 
00165 void Hotboards_leds::begin( uint8_t led, PinName pin )
00166 {
00167     // set the digital outpout that holds the led
00168     _pin[ led ] = new DigitalOut( pin );
00169     // turn off led (as initial state)
00170     bitWrite( _state, led, !_on );
00171     _pin[ led ]->write( !_on );
00172 }