rLEDController is an open source B4R B4XLib for controlling multiple LEDs.
The LEDController enableds to control up-to 10 LEDs individually, like turn ON/OFF, turn on for period of time or number of timer ticks.
Background
The background for developing this module, is to control a number of LEDs for a model railroad project - digital command control using an Arduino MEGA as a Command Station.
The LEDs have several functions: Buffer-Stop Indicators, Loco Drive State Indicator, Command-Controller State, Track-Lights etc.
Attached
rLEDController.zip archive contains the B4R library and B4R sample projects.
Install
The files rLEDController.bx4lib and rLEDController.xml to be installed in the B4R additional libraries folder.
From the zip archive, copy the rLEDController.bx4lib and rLEDController.xml to the B4R additional libraries folder.
The folder Examples contain a B4R example (see below Basic Example).
Hardware
Tested the library with an Arduino UNO and three LEDs.
Wiring
Syntax Standard
Initialize Module
Interval - Interval in ms to check the LEDs (default 1000ms).
Debug_Mode - Debug flag to log methods steps and output.
Returns
None
Example
Add an LED to the LED arrays
Index - LED array index. Must be in range array size 0 - 10 (set by LEDCOUNT in the module). Default 0-9.
PinNr - LED GPIO pin number. Like 0x0D.
Returns
True if sucessfully added to the arrays; False if out of array index
Example
Set the LED controller timer enabled state
Enabled - True (1) Timer is ON, False (0) Timer is Off.
Returns
None
Example
Set the timer off after number of ticks
Ticks - If timer ticks > ticks, the timer will be disabled. Disable turning timer off by setting Ticks to 0.
Returns
None
Example
Get the timer state enabled or disabled
Returns
True (timer is enabled), False (timer is disabled)
Example
Set LED state to ON or OFF
Index - LED array index.
State - True=ON, False=OFF.
Returns
None
Example
Get LED state ON (True) or OFF (False)
Index - LED array index.
Returns
True (1) if LED is ON, False (0) if LED is OFF.
Example
Set LED state to ON
Index - LED array index.
Returns
None
Example
Set LED state to OFF
Index - LED array index.
Returns
None
Example
Set mode to none
All counters are resetted and LED is turned off.
Index - LED array index.
Returns
None
Example
Set mode to blink
Index - LED array index.
Ticks - Blink on number of timer ticks. Set to 1 if every timer tick else higher for every N timer ticks.
Returns
None
Example
Set mode to blink for time
Each timer_tick is calculated using the Timer_Interval.
Time - Time in ms.
Returns
None
Example
Set mode to blink for N number of timer ticks (counts)
Index - LED array index.
Count - Number of timer ticks the LED should blink.
Returns
None
Example
Set mode to on for time
Each timer_tick is calculated using the Timer_Interval.
Time - Time in ms.
Returns
None
Example
Set the blink ticks
Index - LED array index.
Ticks - Blink on number of timer ticks. Set to 1 if every timer tick else higher for every N timer ticks.
Returns
None
Example
Check the state of the LEDS, output to the log (serialline)
Returns
None but the output is written to the log.
Example
Fields
B4R Basic Example
Hints
Licence
GNU General Public License v3.0.
ToDo
See file TODO.md.
Changelog
v1.00 (20210721) - First version.
See file CHANGELOG.md.
The LEDController enableds to control up-to 10 LEDs individually, like turn ON/OFF, turn on for period of time or number of timer ticks.
Background
The background for developing this module, is to control a number of LEDs for a model railroad project - digital command control using an Arduino MEGA as a Command Station.
The LEDs have several functions: Buffer-Stop Indicators, Loco Drive State Indicator, Command-Controller State, Track-Lights etc.
Attached
rLEDController.zip archive contains the B4R library and B4R sample projects.
Install
The files rLEDController.bx4lib and rLEDController.xml to be installed in the B4R additional libraries folder.
From the zip archive, copy the rLEDController.bx4lib and rLEDController.xml to the B4R additional libraries folder.
B4X:
<path to b4r additional libraries folder>\rLEDController.bx4lib, rLEDController.xml
Hardware
Tested the library with an Arduino UNO and three LEDs.
Wiring
B4X:
LED = Arduino UNO
LED RED Plus = #13 '0x0D
LED YELLOW Plus = #12 '0x0C
LED GREEN Plus = #11 '0x0B
LED RED,YELLOW,GREEN GND = GND
Syntax Standard
- Constants are in UPPERCASE.
- Fields are in CamelCase.
- Types start with prefix TLEDController.
- All functions use underscores except Initialize.
Initialize Module
B4X:
LEDController.Initialize(Interval As ULong, Debug_Mode As Boolean)
Debug_Mode - Debug flag to log methods steps and output.
Returns
None
Example
B4X:
LEDController.Initialize(1000, True)
Add an LED to the LED arrays
B4X:
LEDController.Add_LED(Index As Byte, PinNr As Byte) As Boolean
PinNr - LED GPIO pin number. Like 0x0D.
Returns
True if sucessfully added to the arrays; False if out of array index
Example
B4X:
Private Const LEDRED As Int = 0, LEDYellow As Int = 1, LEDGREEN As Int = 2
LEDController.Add_LED(LEDRED, 0x0D)
Set the LED controller timer enabled state
B4X:
LEDController.Set_Timer_Enabled(Enabled As Boolean)
Returns
None
Example
B4X:
LEDController.Set_Timer_Enabled(False)
Set the timer off after number of ticks
B4X:
LEDController.Set_Timer_Off_After_Ticks(Ticks As ULong)
Returns
None
Example
B4X:
LEDController.Set_Timer_Off_After_Ticks(10) 'Turn timer off after 10 ticks
LEDController.Set_Timer_Off_After_Ticks(0) 'Disable turning timer off after max ticks
Get the timer state enabled or disabled
B4X:
LEDController.Get_Timer_Enabled As Boolean
True (timer is enabled), False (timer is disabled)
Example
B4X:
Dim LEDController_Timer_Enabled As Boolean = LEDController.Get_Timer_Enabled
Set LED state to ON or OFF
B4X:
LEDController.Set_State(Index As Int, State As Boolean)
State - True=ON, False=OFF.
Returns
None
Example
B4X:
Private Const LEDRED As Int = 0, LEDYellow As Int = 1, LEDGREEN As Int = 2
LEDController.Set_State(LEDRED, True)
Get LED state ON (True) or OFF (False)
B4X:
LEDController.Get_State(Index As Int) As Boolean
Returns
True (1) if LED is ON, False (0) if LED is OFF.
Example
B4X:
Private Const LEDRED As Int = 0, LEDYellow As Int = 1, LEDGREEN As Int = 2
Dim State As Boolean = LEDController.Get_State(LEDRED)
Set LED state to ON
B4X:
LEDController.Sub Set_ON(Index As Int)
Returns
None
Example
B4X:
Private Const LEDRED As Int = 0, LEDYellow As Int = 1, LEDGREEN As Int = 2
LEDController.Set_ON(LEDRED)
Set LED state to OFF
B4X:
LEDController.Sub Set_OFF(Index As Int)
Returns
None
Example
B4X:
Private Const LEDRED As Int = 0, LEDYellow As Int = 1, LEDGREEN As Int = 2
LEDController.Set_OFF(LEDRED)
Set mode to none
All counters are resetted and LED is turned off.
B4X:
LEDController.Set_Mode_None(Index As Int)
Returns
None
Example
B4X:
Private Const LEDRED As Int = 0, LEDYellow As Int = 1, LEDGREEN As Int = 2
LEDController.Set_Mode_None(LEDRED)
Set mode to blink
B4X:
LEDController.Sub Set_Mode_Blink(Index As Int, Ticks As Int)
Ticks - Blink on number of timer ticks. Set to 1 if every timer tick else higher for every N timer ticks.
Returns
None
Example
B4X:
Private Const LEDRED As Int = 0, LEDYellow As Int = 1, LEDGREEN As Int = 2
LEDController.Set_Mode_Blink(LEDRED, 2)
Set mode to blink for time
Each timer_tick is calculated using the Timer_Interval.
B4X:
LEDController.Set_Blink_For_Time(Index As Int, Time As ULong)
Returns
None
Example
B4X:
Private Const LEDRED As Int = 0, LEDYellow As Int = 1, LEDGREEN As Int = 2
LEDController.Blink_For_Time(LEDRED, 4000)
Set mode to blink for N number of timer ticks (counts)
B4X:
LEDController.Set_Blink_For_Count(Index As Int, Count As ULong)
Count - Number of timer ticks the LED should blink.
Returns
None
Example
B4X:
Private Const LEDRED As Int = 0, LEDYellow As Int = 1, LEDGREEN As Int = 2
LEDController.Set_Blink_For_Count(LEDRED, 4)
Set mode to on for time
Each timer_tick is calculated using the Timer_Interval.
B4X:
LEDController.Sub Set_ON_For_Time(Index As Int, Time As ULong)
Returns
None
Example
B4X:
Private Const LEDRED As Int = 0, LEDYellow As Int = 1, LEDGREEN As Int = 2
LEDController.Blink_For_Time(LEDRED, 4000)
Set the blink ticks
B4X:
LEDController.Set_Blink_Ticks(Index As Int, Ticks As Int)
Ticks - Blink on number of timer ticks. Set to 1 if every timer tick else higher for every N timer ticks.
Returns
None
Example
B4X:
Private Const LEDRED As Int = 0, LEDYellow As Int = 1, LEDGREEN As Int = 2
LEDController.Set_Blink_Ticks(LEDRED, 4)
Check the state of the LEDS, output to the log (serialline)
B4X:
LEDController.Check_LEDS
None but the output is written to the log.
Example
B4X:
Private Const LEDRED As Int = 0, LEDYellow As Int = 1, LEDGREEN As Int = 2
LEDController.Check_LEDS
Fields
- Debug - Debug flag to log methods steps and output.
- VERSION - Module version number.
B4R Basic Example
B4X:
Sub Process_Globals
Public VERSION As String = "B4R Library rLEDController - Basic Example"
Public serialLine As Serial
' Declare the LEDS each with unique index used for the LEDControl LED arrays. Must be in range with constant - LEDController.LEDCOUNT.
Private Const LEDRED As Int = 0, LEDYELLOW As Int = 1, LEDGREEN As Int = 2
' Set the LED controller timer interval in ms.
Private Const TIMER_INTERVAL As ULong = 1000
End Sub
Private Sub AppStart
serialLine.Initialize(115200)
Log(VERSION)
'Init the LED Controller
LEDController.Initialize(TIMER_INTERVAL, True)
'Add to the LED controller 3 LEDs (Index, PinNr)
LEDController.Add_LED(LEDRED, 0x0D)
LEDController.Add_LED(LEDYELLOW, 0x0C)
LEDController.Add_LED(LEDGREEN, 0x0B)
'Examples Overview - Some are commented out.
'LEDRED to blink every 4 timer ticks, i.e. every 4 seconds (4 * TIMER_INTERVAL in ms)
'LEDController.Set_Mode_Blink(LEDRED, 4)
'LEDYELLOW to blink 4 seconds, i.e. blinking 2 times (ON-OFF-ON-OFF) if TIMER_INTERVAL is 1000 ms
LEDController.Set_Blink_For_Time(LEDYELLOW, 4 * TIMER_INTERVAL)
'LEDRED ON for 4 seconds, if TIMER_INTERVAL is 1000 ms
LEDController.Set_ON_For_Time(LEDRED, 4 * TIMER_INTERVAL)
'LEDGREEN to blink 6 times (=12 timer ticks)
LEDController.Set_Blink_For_Count(LEDGREEN, 6)
'Let all LEDS blink same time (=interval factor 1)
'LEDController.Set_Mode_Blink(LEDRED, 1)
'LEDController.Set_Mode_Blink(LEDYELLOW, 1)
'LEDController.Set_Mode_Blink(LEDGREEN, 1)
'LEDController.Check_LEDS
'Turn the timer off after 15 ticks
LEDController.Set_Timer_Off_After_Ticks(15)
End Sub
Hints
- The number of supported LEDs can be changed in the module LEDController.bas, constant LEDCOUNT and arrays LEDS, LEDPins.
Licence
GNU General Public License v3.0.
ToDo
See file TODO.md.
Changelog
v1.00 (20210721) - First version.
See file CHANGELOG.md.