#Region Project Attributes
#AutoFlushLogs: True
#CheckArrayBounds: True
#StackBufferSize: 300
#End Region
Sub Process_Globals
Public Serial1 As Serial
Private led As LedControl
Public DINPin As Pin
Public CSpin As Pin
Public CLKPin As Pin
Public Timer1 As Timer
Public count As Byte
Public stringtext As String="B4R is great!" 'Text to display
Public Timerinterval As Long=2000 '2 seconds
Public bc As ByteConverter
Public indextext As Int
Public rows As Int=8 'rmax7219 8x8 display
Public columns As Int=8
Public firstchar As Int=2 'place on LCD to begin displaying char
Public appearchareffect As Int=100 'appear effect on displaying string
End Sub
Private Sub AppStart
Serial1.Initialize(115200)
Timer1.Initialize("Timer1_Tick",Timerinterval)
DINPin.Initialize(10,DINPin.MODE_OUTPUT)
CSpin.Initialize(9,CSpin.MODE_OUTPUT)
CLKPin.Initialize(8,CLKPin.MODE_OUTPUT)
Log("AppStart")
led.Initialize(DINPin.PinNumber,CLKPin.PinNumber,CSpin.PinNumber,1)
led.Shutdown(0, False)
led.SetIntensity(0, 8)
If firstchar >3 Then firstchar=2 'char (5 rows values) + firstchar place <=8
Timer1.Enabled=True
End Sub
Sub GetByte(Index As UInt) As Byte
Return RunNative("getdata", Index)
End Sub
Sub Timer1_Tick
led.ClearDisplay(0)
Dim charmapindex As Int=stringtext.GetBytes(indextext) 'Get character
For j=0 To 4 'Get the five rows that build the char (see charmap Inline C# code)
led.setRow(0,firstchar+j,GetByte((charmapindex-31)*5+j)) ' Substracting 31 as first char in charmap begins before sp (ASCII)
Delay(appearchareffect)
Next
If indextext=stringtext.Length-1 Then
indextext=0
Else
indextext=indextext+1
End If
End Sub
#if C
#include <avr/pgmspace.h>
const PROGMEM byte data[] = { //change the data here
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, // sp
0x00, 0x00, 0x2f, 0x00, 0x00, // !
0x00, 0x07, 0x00, 0x07, 0x00, // "
0x14, 0x7f, 0x14, 0x7f, 0x14, // #
0x24, 0x2a, 0x7f, 0x2a, 0x12, //$
0xc4, 0xc8, 0x10, 0x26, 0x46, //%
0x36, 0x49, 0x55, 0x22, 0x50, //&
0x00, 0x05, 0x03, 0x00, 0x00, //'
0x00, 0x1c, 0x22, 0x41, 0x00, //(
0x00, 0x41, 0x22, 0x1c, 0x00, //)
0x14, 0x08, 0x3E, 0x08, 0x14, // *
0x08, 0x08, 0x3E, 0x08, 0x08, //+
0x00, 0x00, 0x50, 0x30, 0x00, //,
0x10, 0x10, 0x10, 0x10, 0x10, //-
0x00, 0x60, 0x60, 0x00, 0x00, // .
0x20, 0x10, 0x08, 0x04, 0x02, ///
0x3E, 0x51, 0x49, 0x45, 0x3E, //0
0x00, 0x42, 0x7F, 0x40, 0x00, //1
0x42, 0x61, 0x51, 0x49, 0x46, //2
0x21, 0x41, 0x45, 0x4B, 0x31, //3
0x18, 0x14, 0x12, 0x7F, 0x10, //4
0x27, 0x45, 0x45, 0x45, 0x39, //5
0x3C, 0x4A, 0x49, 0x49, 0x30, //6
0x01, 0x71, 0x09, 0x05, 0x03, // 7
0x36, 0x49, 0x49, 0x49, 0x36, //8
0x06, 0x49, 0x49, 0x29, 0x1E, //9
0x00, 0x36, 0x36, 0x00, 0x00, //:
0x00, 0x56, 0x36, 0x00, 0x00, //;
0x08, 0x14, 0x22, 0x41, 0x00, //<
0x14, 0x14, 0x14, 0x14, 0x14, //=
0x00, 0x41, 0x22, 0x14, 0x08, //>
0x02, 0x01, 0x51, 0x09, 0x06, //?
0x32, 0x49, 0x59, 0x51, 0x3E, //@
0x7E, 0x11, 0x11, 0x11, 0x7E, //A
0x7F, 0x49, 0x49, 0x49, 0x36, //B
0x3E, 0x41, 0x41, 0x41, 0x22, //C
0x7F, 0x41, 0x41, 0x22, 0x1C, //D
0x7F, 0x49, 0x49, 0x49, 0x41, //E
0x7F, 0x09, 0x09, 0x09, 0x01, //F
0x3E, 0x41, 0x49, 0x49, 0x7A, //G
0x7F, 0x08, 0x08, 0x08, 0x7F, //H
0x00, 0x41, 0x7F, 0x41, 0x00, //I
0x20, 0x40, 0x41, 0x3F, 0x01, //J
0x7F, 0x08, 0x14, 0x22, 0x41, //K
0x7F, 0x40, 0x40, 0x40, 0x40, //L
0x7F, 0x02, 0x0C, 0x02, 0x7F, //M
0x7F, 0x04, 0x08, 0x10, 0x7F, //N
0x3E, 0x41, 0x41, 0x41, 0x3E, //O
0x7F, 0x09, 0x09, 0x09, 0x06, //P
0x3E, 0x41, 0x51, 0x21, 0x5E, //Q
0x7F, 0x09, 0x19, 0x29, 0x46, //R
0x46, 0x49, 0x49, 0x49, 0x31, //S
0x01, 0x01, 0x7F, 0x01, 0x01, // T
0x3F, 0x40, 0x40, 0x40, 0x3F, //U
0x1F, 0x20, 0x40, 0x20, 0x1F, //V
0x3F, 0x40, 0x38, 0x40, 0x3F, //W
0x63, 0x14, 0x08, 0x14, 0x63, //X
0x07, 0x08, 0x70, 0x08, 0x07, //Y
0x61, 0x51, 0x49, 0x45, 0x43, //Z
0x00, 0x7F, 0x41, 0x41, 0x00, //[
0x55, 0x2A, 0x55, 0x2A, 0x55, //55
0x00, 0x41, 0x41, 0x7F, 0x00, //]
0x04, 0x02, 0x01, 0x02, 0x04, //^
0x40, 0x40, 0x40, 0x40, 0x40, //,
0x00, 0x01, 0x02, 0x04, 0x00, //'
0x20, 0x54, 0x54, 0x54, 0x78, //a
0x7F, 0x48, 0x44, 0x44, 0x38, //b
0x38, 0x44, 0x44, 0x44, 0x20, //c
0x38, 0x44, 0x44, 0x48, 0x7F, //d
0x38, 0x54, 0x54, 0x54, 0x18, //e
0x08, 0x7E, 0x09, 0x01, 0x02, //f
0x0C, 0x52, 0x52, 0x52, 0x3E, //g
0x7F, 0x08, 0x04, 0x04, 0x78, // h
0x00, 0x44, 0x7D, 0x40, 0x00, //i
0x20, 0x40, 0x44, 0x3D, 0x00, //j
0x7F, 0x10, 0x28, 0x44, 0x00, // k
0x00, 0x41, 0x7F, 0x40, 0x00, // l
0x7C, 0x04, 0x18, 0x04, 0x78, // m
0x7C, 0x08, 0x04, 0x04, 0x78, //n
0x38, 0x44, 0x44, 0x44, 0x38, //o
0x7C, 0x14, 0x14, 0x14, 0x08, // p
0x08, 0x14, 0x14, 0x18, 0x7C, //q
0x7C, 0x08, 0x04, 0x04, 0x08, //r
0x48, 0x54, 0x54, 0x54, 0x20, //s
0x04, 0x3F, 0x44, 0x40, 0x20, //t
0x3C, 0x40, 0x40, 0x20, 0x7C, //u
0x1C, 0x20, 0x40, 0x20, 0x1C, //v
0x3C, 0x40, 0x30, 0x40, 0x3C, // w
0x44, 0x28, 0x10, 0x28, 0x44, //x
0x0C, 0x50, 0x50, 0x50, 0x3C, //y
0x44, 0x64, 0x54, 0x4C, 0x44 //z
};
B4R::Object beo1;
B4R::Object* getdata(B4R::Object* o) {
return beo1.wrapNumber(pgm_read_byte_near(data + o->toLong()));
}
#end if