Driver to control leds one at a time or in group
Dependents: handling_leds leds toggle writing ... more
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 }
Generated on Mon Jul 18 2022 18:23:41 by 1.7.2