#Region Project Attributes
#AutoFlushLogs: True
#CheckArrayBounds: True
#StackBufferSize: 300
#End Region
Sub Process_Globals
'These global variables will be declared once when the application starts.
'Public variables can be accessed from all modules.
Public Serial1 As Serial
' Dim bc As ByteConverter
Dim mode_in As Boolean = False 'common cathode (set to True for display with common Anode)
Dim numOfDigits As Byte = 4 'Using a 4 digit x 7 segment LED display
Dim digit1 As Byte = 13 'Most significant digit i.e most left - pin 13
Dim digit2 As Byte = 12 '2nd digit from left - pin 12
Dim digit3 As Byte = 11 '3rd digit from left - pin 11
Dim digit4 As Byte = 10 'Least significant digit i.e most right - pin 10
Dim segmentDP As Byte = 9 'digital point - pin 9
Dim segment1 As Byte = 2 'Segment A - pin 2
Dim segment2 As Byte = 3 'Segment B - pin 3
Dim segment3 As Byte = 4 'Segment C - pin 4
Dim segment4 As Byte = 5 'Segment D - pin 5
Dim segment5 As Byte = 6 'Segment E - pin 6
Dim segment6 As Byte = 7 'Segment F - pin 7
Dim segment7 As Byte = 8 'Segment G - pin 8
Dim brightness As Byte = 100 'Set the brightness of the LED display between 0 and 100
Dim min1, min10, hr1, hr10, sec10, sec1 As Byte 'keeping track of out clock thta we are setting up in AppStart
Dim decimalposition As Byte = 2 'set the decimal position to 2 (the 2nd DP from the left)
Dim prevtime, currenttime As ULong
Dim dat1() As Byte = "HALO" 'set dat1 to "abcd" - we will pass it to the dsipaly in the timer
Dim cnt As UInt = 0 'a counter to decide what to display
'display will chnage between showing hour and minutes, minutes and seconds, "abcd", and then repeating this sequence of display
Dim t As Timer 'We need a timer
End Sub
Private Sub AppStart
Serial1.Initialize(115200)
Log("AppStart")
t.Initialize("t_tick", 20) 'initialize the timer - tick every 20ms
prevtime = Millis 'get the millis since MCU started
hr10 = 1 'Set the hours, minuntes, and seconds here that you want to start the clock with
hr1 = 9
min10 = 2
min1 = 2
sec10 = 0
sec1 = 0
RunNative("begin", Null) 'call Begin in SevSeg
Delay(1)
RunNative("SetBrightness", Null) 'set the brightness of the LED's
Delay(1)
t.Enabled = True 'Enable the timer
End Sub
Sub t_tick
cnt = cnt + 1 'increment the counter
currenttime = Millis 'get the current Millis
If (currenttime - prevtime) > 1000 Then 'has 1 second gone by since previous "get Millis"?
prevtime = currenttime 'if so, then store current time to previous time
sec1 = sec1 + 1 'increment seconds 1's
If sec1 > 9 Then
sec1 = 0
sec10 = sec10 + 1 'increment seconds 10's
If sec10 > 5 Then '.....sure you will follow the rest of the logic
sec10 = 0
min1 = min1 + 1
If min1 > 9 Then
min1 = 0
min10 = min10 + 1
If min10 > 5 Then
min10 = 0
hr1 = hr1 + 1
If hr1 > 9 Then
hr1 = 0
hr10 = hr10 + 1
End If
End If
End If
End If
End If
End If
If hr10 = 2 Then 'check for midnight and if so set hr10 and hr1 to 0
If hr1 = 4 Then
hr10 = 0
hr1 = 0
End If
End If
If cnt < 500 Then 'if counter is less than 500 then display HH.MM
decimalposition = 2
Dim c As String = JoinStrings(Array As String(hr10, hr1, min10, min1)) 'build the string
Dim b() As Byte = c 'convert the string to a byte array
RunNative("DisplayString", b) 'call DisplayString in SevSeg and pass it the byte array
else if cnt < 1000 Then 'if counter is > 500 and less than 1000 then display MM.SS
decimalposition = 2
Dim c As String = JoinStrings(Array As String(min10, min1, sec10, sec1))
Dim b() As Byte = c
RunNative("DisplayString", b)
else if cnt < 1500 Then 'if counter >= 1000 but < 1500 then display dat1 = abcd
decimalposition = 0
RunNative("DisplayString", dat1)
Else
cnt = 0
End If
End Sub
#if C
#include <SevSeg.h>
SevSeg sevseg; //We are using the SevSeg library
void begin(B4R::Object* o) { //begin - called from B4R code to set up mode(common cathode/anode), number of digits on the display, pins that are used, and where the digital point should be displayed
sevseg.Begin(b4r_main::_mode_in, b4r_main::_numofdigits, b4r_main::_digit1, b4r_main::_digit2, b4r_main::_digit3, b4r_main::_digit4, b4r_main::_segment1, b4r_main::_segment2, b4r_main::_segment3, b4r_main::_segment4, b4r_main::_segment5, b4r_main::_segment6, b4r_main::_segment7, b4r_main::_segmentdp);
}
void SetBrightness(B4R::Object* o) { //set the brightness of the LED's on the 7 segment display
sevseg.SetBrightness(b4r_main::_brightness);
}
void DisplayString(B4R::Object* o) { //what do display - passed in from the B4R code and received here as a B4R Object
B4R::Array* conversion = (B4R::Array*)B4R::Object::toPointer(o);
char* toDisplay = (char*)conversion->data;
sevseg.DisplayString(toDisplay, b4r_main::_decimalposition);
}
#End If