#Region Project Attributes
#AutoFlushLogs: True
#CheckArrayBounds: True
#StackBufferSize: 1000
#End Region
Sub Process_Globals
Public Serial1 As Serial
Private SoftwareSerial1 As SoftwareSerial 'ignore
Private astream As AsyncStreams 'ignore
Private zMotor, cMotor, aMotor As Stepper 'ignore
Private StepsPerRevolution As Int = 200 'ignore
Private ssd As AdafruitSSD1306
Private Timer1 As Timer 'ignore
Private APin As Pin 'ignore
' Private degStep As Float = StepsPerRevolution/360 'ignore
Private gcodeArr(10) As String
Private gcodeLast As Int
End Sub
Private Sub AppStart
Serial1.Initialize(115200)
Log("AppStart")
'initialize Z-Motor (wire pusher)
zMotor.Initialize2(StepsPerRevolution, 4, 5, 6, 7)
zMotor.SetSpeed(60)
'initialize C-Motor (gear controller)
cMotor.Initialize2(StepsPerRevolution, 8, 9, 10, 11)
cMotor.SetSpeed(60)
'initialize A-Motor (bender)
aMotor.Initialize2(StepsPerRevolution, 2, 3, 12, 13)
aMotor.SetSpeed(60)
SoftwareSerial1.Initialize(9600, APin.A0, APin.A1)
astream.Initialize(SoftwareSerial1.Stream, "astream_NewData", Null)
Timer1.Initialize("timer1_Tick", 1000)
Timer1.Enabled = True
Log(StackBufferUsage, " : ", AvailableRAM)
ssd.InitializeI2C(4, 0x3c)
drawscreen("Loading...","","","")
CallSubPlus("startgcode",1000,"")
End Sub
Sub startgcode(b() As Byte)
' Dim bc As ByteConverter
Dim gcode() As Byte = "P0001,720/0/0,0/0/180,0/0/-180,680/0/0,0/0/180,0/0/-180,760/0/0,M2"
testGcode(gcode)
End Sub
Sub drawscreen(line1 As String, line2 As String, line3 As String, line4 As String)
ssd.ClearDisplay
ssd.GFX.SetCursor(0,0)
ssd.GFX.DrawText(line1)
ssd.GFX.SetCursor(0,8)
ssd.GFX.DrawText(line2)
ssd.GFX.SetCursor(0,16)
ssd.GFX.DrawText(line3)
ssd.GFX.SetCursor(0,24)
ssd.GFX.DrawText(line4)
ssd.Display
End Sub
'
Sub testGcode(b() As Byte)
'Z-Axis (Wire pusher) Pos1
'C-Axis (Gear control) Pos2
'A-Axis (Bender Control) Pos3
gcodeLast = 0
Dim AxisStep(3) As String
Dim bc As ByteConverter
For Each s0() As Byte In bc.Split(b, ",")
If bc.IndexOf(s0,"/") > -1 Then
Dim count As Int = 0
For Each s1() As Byte In bc.Split(s0,"/")
AxisStep(count) = bc.StringFromBytes(s1)
count = count + 1
Next
'Dim line() As Byte = "test"' JoinStrings(Array As String( "Z",AxisStep(0), " C",AxisStep(1)," A",AxisStep(2)))
gcodeArr(gcodeLast) = JoinStrings(Array As String( "Z",AxisStep(0), " C",AxisStep(1)," A",AxisStep(2)))
' If lines(1).Length = 0 Then
' lines(1) = line
' else if lines(2).Length = 0 Then
' lines(2) = line
' Else if lines(3).Length = 0 Then
' lines(3) = line
' Else
' lines(0) = lines(1)
' lines(1) = lines(2)
' lines(2) = lines(3)
' lines(3) = line
' End If
'drawscreen(lines(0),lines(1),lines(2),lines(3))
Else
gcodeArr(gcodeLast) = bc.StringFromBytes(s0)
' If bc.IndexOf(s0,"P") > -1 Then
'lines(0) = bc.StringFromBytes(s0)
'drawscreen(lines(0),lines(1),lines(2),lines(3))
' Else
' If lines(1).Length = 0 Then
' lines(1) = bc.StringFromBytes(s0)
' else if lines(2).Length = 0 Then
' lines(2) = bc.StringFromBytes(s0)
' Else if lines(3).Length = 0 Then
' lines(3) = bc.StringFromBytes(s0)
' Else
' lines(0) = lines(1)
' lines(1) = lines(2)
' lines(2) = lines(3)
' lines(3) = bc.StringFromBytes(s0)
' End If
' drawscreen(lines(0),lines(1),lines(2),lines(3))
' End If
End If
gcodeLast = gcodeLast + 1
Next
Log("gcode length: ", gcodeLast)
' For i = 0 To gcodeLast
' Log(gcodeArr(i))
' Next
Log("finished")
End Sub
'Sub Step1(u As Byte)
' For i = 0 To StepsPerRevolution
' zMotor.Step(direction)
' aMotor.Step(direction)
' Next
' direction = direction * -1
' CallSubPlus("Step2", 1000, 0)
'End Sub
'
'Sub Step2(u As Byte)
' cMotor.Step((StepsPerRevolution/4)*direction)
' CallSubPlus("Step1", 1000, 0)
'End Sub
Sub Timer1_Tick
astream.Write("Millis here: ".GetBytes)
astream.Write(NumberFormat(Millis, 0, 0).GetBytes)
astream.Write(Array As Byte(10)) 'end of line character. AsyncStreamsText will cut the message here
End Sub
'
Sub astream_NewData (Buffer() As Byte)
Dim bc As ByteConverter
Dim value As String = bc.StringFromBytes(Buffer)
Select value
Case "AUP"
aMotor.Step(10)
Case "AD"
aMotor.Step(-10)
Case "ZUP"
zMotor.Step(10)
Case "ZD"
zMotor.Step(-10)
Case "CUP"
cMotor.Step(10)
Case "CD"
cMotor.Step(-10)
End Select
End Sub