Hardware components | ||||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 3 | |||
CMI209 is a lightweight CNC‑control module designed to work through an Android mobile interface. It is not a full professional G‑code controller, but it can receive and execute standard G‑code, including:
Linear moves (G01)
- Linear moves (G01)
Arc moves (G02 / G03)
- Arc moves (G02 / G03)
Millimeter‑based coordinate standards
- Millimeter‑based coordinate standards
In addition to G‑code execution, the module also supports direct manual commands written by the user. This allows you to generate and run basic geometric shapes, including circular paths, without needing a full CAM workflow.
The mobile interface is provided through the Soifgo Android application, which acts as the control panel for sending commands and monitoring execution.
📱 A ndroid App (Soifgo) DownloadYou can download the Soifgo mobile interface here: https://soifgo.github.io/soifgo/index.html
📘 F ull Documentation & Project ResourcesComplete instructions, wiring details, usage guide, and downloadable files are available at: https://soifgo.github.io/soifgo/tutorials/server/cmi209/cmi209.html
cmi209_atmega328p
VB.NET'Cmi209
'SAEID MOGHADAM
'CNC Mobile Interface (CMI)
' mm/minute mm/second
'feed 60 mm/minute = 1 s > 1 mm MOVE
'feed 600 mm/minute = 1 s > 10 mm MOVE
'pulse for PS2 drive: 100 pulses for 1 mm move
'PS2 length = 40 mm => 40 * pulse = 4000 pulses
'PS2 CALCULATION:
'pulse = 100
'max_x = 40 mm (4 cm)
'max_y = 40 mm (4 cm)
'max_z = 30 mm (3 cm)
'Example:
'stepper motor needs 40 pulses for 1 mm move
'max travel for X = 40 cm
'max travel for Y = 40 cm
'max travel for Z = 30 cm
'new CNC CALCULATION:
'pulse = 40
'max_x = 40 (40 cm)
'max_y = 40 (40 cm)
'max_z = 30 (30 cm)
Start0:
$regfile = "m328pdef.dat"
$crystal = 2000000
$prog &HFF , &HFF , &HDF , &HFE ' generated. Take care that the chip supports all fuse bytes.
Dim Reset_all As Bit
Reset_all = 0
Start1:
Config Timer1 = Pwm , Pwm = 10 , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_up , Prescale = 8
Pwm1a = 0
Pwm1b = 0 'spindle speed
Config Portb.0 = Input 'xyz limit
Ddrb.0 = 0 : Portb.0 = 1
Limit Alias Pinb.0
Config Portc.0 = Input 'home x
Ddrc.0 = 0 : Portc.0 = 1
Xz Alias Pinc.0
Config Portc.1 = Input 'home y
Ddrc.1 = 0 : Portc.1 = 1
Yz Alias Pinc.1
Config Portc.2 = Input 'home z
Ddrc.2 = 0 : Portc.2 = 1
Zz Alias Pinc.2
Config Portd.5 = Output 'X enable
Xen Alias Portd.5
Config Portd.6 = Output
Xstep Alias Portd.6
Config Portd.7 = Output
Xdir Alias Portd.7
Config Portd.2 = Output 'Y enable
Yen Alias Portd.2
Config Portd.3 = Output
Ystep Alias Portd.3
Config Portd.4 = Output
Ydir Alias Portd.4
Config Portc.3 = Output 'Z enable
Zen Alias Portc.3
Config Portc.4 = Output
Zstep Alias Portc.4
Config Portc.5 = Output
Zdir Alias Portc.5
Dim Ii As Word
Xen = 1
Yen = 1
Zen = 1
'''''''''''''''''''''''''''''
Dim Max_x , Max_y , Max_z , Feedm , Pulse As Word
Dim Max_xx , Max_yy , Max_zz As Single
Dim Feeds As Single
Dim Send_xyz As Byte
Readeeprom Max_x , 1
Readeeprom Max_y , 3
Readeeprom Max_z , 5
Readeeprom Feedm , 7
Readeeprom Feeds , 9
Readeeprom Pulse , 14
Readeeprom Send_xyz , 16
If Max_x < 1 Or Max_x > 65000 Then Max_x = 40
Max_xx = Max_x
If Max_y < 1 Or Max_y > 65000 Then Max_y = 40
Max_yy = Max_y
If Max_z < 1 Or Max_z > 65000 Then Max_z = 30
Max_zz = -max_z
If Feedm < 10 Or Feedm > 4800 Then Feedm = 1400
If Feeds < 1 Or Feeds > 100 Then Feeds = 5.7
If Pulse < 1 Or Pulse > 20000 Then Pulse = 100
''''''''''''''''''''''''''''''
Dim X1 , X2 As Single
Dim Y1 , Y2 As Single
Dim Z1 , Z2 As Single
Dim Xs , Ys , Zs As Word
Dim Feed , Spindle , Resolation , Seco As Word
''''''''''''''''''''''''''''''''''
Dim Scal1 , Scal2 , Feedi As Single
Dim Scal As Dword , Sr As Dword
Dim Scalx , Scaly , Scalz As Dword
Dim Addx , Addy , Addz As Dword
''''''''''''''''''''''''''''''''
Dim N As Byte , S As Byte
Dim Trig , Trigf , Trigc As String * 10
Dim Vx , Vy , Vz , Vi , Vj , Xold , Cxc , Cyc , X0 , Y0 , Z0 , Move As Single
Dim Yold , Xnew , Ynew , Ds , De , R , X22 , Y22 As Single
Dim Vxb , Vyb , Vzb , Arc , Ccw , Arc_man As Bit
Dim Vxbc As Bit , Vybc As Bit , Vzbc As Bit , Nex As Bit
Dim Rr1 , Rr2 As Single
'''''''''''''''''''''''''''''
Const Nexte = "next"
Dim Dd As Dword
Dim Del As Word
Declare Sub Homee
Declare Sub Xyz
Declare Sub Xy
Declare Sub Xyzij
Declare Sub Arc_manual
Declare Sub Configs
Declare Sub Mainfeed
Declare Sub Memxy
Declare Sub Memz
Declare Sub Arcz
Call Mainfeed
$baud = 11520
'''''''''''''''''''serial
Dim Ina As Bit
Dim Text As String * 81
Enable Interrupts
Config Serialin = Buffered , Size = 80 , Bytematch = 13
Echo Off
Print "Cmi209"
Main:
If Ina = 1 And Limit = 1 Then Goto Red1
If Limit = 0 Then
Xen = 1
Yen = 1
Zen = 1
Pwm1a = 0
Pwm1b = 0
Reset_all = 1
End If
Goto Main
Sub Xyz
Scalx = 0 : Scaly = 0 : Scalz = 0
Scal1 = 0 : Scal2 = 0 : Scal = 0 : Sr = 0
'''''''''''''''''''''''max scal
'' pulse for ps2=1 4000 puls= 4cm move >>> 100 pulse for 1 mm
If Xs > Sr Then Sr = Xs
If Ys > Sr Then Sr = Ys
If Zs > Sr Then Sr = Zs
If Xs = Sr Then
Scalx = 10
Scal1 = Sr / Ys
Scaly = Scal1 * 10
Scal2 = Sr / Zs
Scalz = Scal2 * 10
End If
If Ys = Sr Then
Scaly = 10
Scal1 = Sr / Xs
Scalx = Scal1 * 10
Scal2 = Sr / Zs
Scalz = Scal2 * 10
End If
If Zs = Sr Then
Scalz = 10
Scal1 = Sr / Xs
Scalx = Scal1 * 10
Scal2 = Sr / Ys
Scaly = Scal2 * 10
End If
''''''''''''''''''''''''''''''''''''
Addx = 0 : Addy = 0 : Addz = 0
Sr = Sr * 10
For Dd = 1 To Sr
'Decr Sr
If Xs > 0 Then
Incr Addx
If Scalx = Addx Then
Xstep = 1
Xen = 0
Addx = 0
End If
End If
If Ys > 0 Then
Incr Addy
If Scaly = Addy Then
Ystep = 1
Yen = 0
Addy = 0
End If
End If
If Zs > 0 Then
Incr Addz
If Scalz = Addz Then
Zstep = 1
Zen = 0
Addz = 0
End If
End If
Xstep = 0
Ystep = 0
Zstep = 0
For Del = 1 To Feed
Next
If Limit = 0 Or Ina = 1 Then Exit For
Next
''''''''''''''''''''
Xen = 1 : Yen = 1 : Zen = 1
Xs = 0 : Ys = 0 : Sr = 0 : Zs = 0
If Arc = 0 And Arc_man = 0 Then
Print Nexte
Nex = 1
End If
End Sub
Sub Homee
Pwm1a = 0
Pwm1b = 0
Dim Homewait , Maxhx , Maxhy , Maxhz As Word
Maxhx = Max_x * Pulse
Maxhy = Max_y * Pulse
Maxhz = Max_z * Pulse
'''''''''''''''''''''''''''max_f to feed
Homewait = Feedm
If Homewait > 4800 Then Homewait = 4800
If Homewait < 10 Then Homewait = 10
Feedi = Homewait / 4800
Feedi = 1 / Feedi
Feedi = Feedi * Feeds
Homewait = Feedi * 100
''''''''''''''''''''''''''''''''''''''''''''''
Xen = 1
Yen = 1
Zen = 1
Pwm1a = 0
Pwm1b = 0
If Zz = 1 And Limit = 1 Then
For Ii = Maxhz To 0 Step -1
Zdir = 0
Zen = 0
Zstep = 1
Waitus Homewait
Zstep = 0
Waitus Homewait
If Zz = 0 Or Limit = 0 Or Ina = 1 Then Exit For
Next
End If
Zen = 1
If Xz = 1 And Limit = 1 Then
For Ii = Maxhx To 0 Step -1
Xdir = 0
Xen = 0
Xstep = 1
Waitus Homewait
Xstep = 0
Waitus Homewait
If Xz = 0 Or Limit = 0 Or Ina = 1 Then Exit For
Next
End If
Xen = 1
If Yz = 1 And Limit = 1 Then
For Ii = Maxhy To 0 Step -1
Ydir = 0
Yen = 0
Ystep = 1
Waitus Homewait
Ystep = 0
Waitus Homewait
If Yz = 0 Or Limit = 0 Or Ina = 1 Then Exit For
Next
End If
Xen = 1
Yen = 1
Zen = 1
Pwm1a = 0
Pwm1b = 0
X1 = 0
Y1 = 0
Z1 = 0
X2 = 0
Y2 = 0
Z2 = 0
Vx = 0
Vy = 0
Xs = 0
Ys = 0
Zs = 0
Xold = 0
Yold = 0
Xnew = 0
Ynew = 0
Print Nexte
Nex = 1
Call Mainfeed
End Sub
Red1:
Ina = 0
N = 0 : S = 0 : Trig = "" : Vx = 0 : Vy = 0 : Vz = 0 : Arc_man = 0
Vxb = 0 : Vyb = 0 : Vzb = 0 : Vxbc = 0 : Vybc = 0 : Vzbc = 0 : Arc = 0
Ccw = 0 : R = 0 : Spindle = 0
Text = Trim(text)
Text = Ltrim(text)
Trig = Mid(text , 1 , 2)
If Reset_all = 0 Then
'linear
If Instr(trig , "G2") > 0 Then
Arc = 1 'arc xyzij
Ccw = 0 'cw
Arc_man = 0
End If
If Instr(trig , "G3") > 0 Then
Arc = 1 'arc xyzij
Ccw = 1 'ccw
Arc_man = 0
End If
Trig = "" : Trigf = ""
N = 0 : S = 0
For N = 1 To 40 'find xyzijfw
S = N + 1
Trig = Mid(text , N , 1 )
''''''''''''''''''''''''''''''''''''''''''''X
Dim Xvis , Yvis As Bit
Xvis = 0
Yvis = 0
If Instr(trig , "X") > 0 Then
Trigf = Mid(text , S , 10)
If Trigf <> "" Then
Vx = Val(trigf)
If Vx <= Max_xx Then 'x limit 0 to 40 mm= 0 to 4 cm
Vxb = 1
Else
Vx = 0
Vxb = 1
End If
End If
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''x
'''''''''''''''''''''''''''''''''''''Y
If Instr(trig , "Y") > 0 Then
Trigf = Mid(text , S , 10)
If Trigf <> "" Then
Vy = Val(trigf)
If Vy <= Max_yy Then 'Y limit 0 to 40 mm= 0 to 4 cm
Vyb = 1
Else
Vy = 0
Vyb = 1
End If
End If
End If
''''''''''''''''''''''''''''''''''''''''''''''''y
'''''''''''''''''''''''''''''''''''Z
If Instr(trig , "Z") > 0 Then
Trigf = Mid(text , S , 10)
If Trigf <> "" Then
Vz = Val(trigf)
Z0 = Vz
If Vz > Max_zz Then 'z limit 0 to 40 mm= 0 to 4 cm
' 0 home -40 mm max deep
Vz = -vz
Vzb = 1
Else
Vz = 0
Vzb = 1
End If
End If
End If
''''''''''''''''''''''''''''''''''''''''''''''''''z
''''''''''''''''''''''''''''''''''''''''''''i
If Instr(trig , "I") > 0 Then
Trigf = Mid(text , S , 10)
If Trigf <> "" Then Vi = Val(trigf)
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''i
''''''''''''''''''''''''''''''''''''''''''''j
If Instr(trig , "J") > 0 Then
Trigf = Mid(text , S , 10)
If Trigf <> "" Then Vj = Val(trigf)
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''j
''''''''''''''''''''''''''''''''''''''''''''Q DS
If Instr(trig , "A") > 0 Then
Trigf = Mid(text , S , 10)
If Trigf <> "" Then
Ds = Val(trigf)
Arc = 0 'arc xyzij
Arc_man = 1
End If
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''DS
''''''''''''''''''''''''''''''''''''''''''''E DE
If Instr(trig , "B") > 0 Then
Trigf = Mid(text , S , 10)
If Trigf <> "" Then
De = Val(trigf)
Arc = 0 'arc xyzij
Arc_man = 1
End If
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''DE
''''''''''''''''''''''''''''''''''''''''''''R
If Instr(trig , "R") > 0 Then
Trigf = Mid(text , S , 10)
If Trigf <> "" Then R = Val(trigf)
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''R
''''''''''''''''''''''''''''''''''''F feed
If Instr(trig , "F") > 0 Then
Trigf = Mid(text , S , 10)
If Trigf <> "" Then
Feed = Val(trigf)
If Feed > 4800 Then Feed = Feedm
If Feed < 10 Then Feed = Feedm
Feedi = Feed / 4800
Feedi = 1 / Feedi
Feedi = Feedi * Feeds
Feed = Feedi
End If
End If
''''''''''''''''''''''''''''''''''''''''f
''''''''''''''''''''''''''''''''''''S spindle
If Instr(trig , "S") > 0 Then
Trigf = Mid(text , S , 10)
If Trigf <> "" Then
Spindle = Val(trigf)
If Spindle > 20000 Then Spindle = 20000
Spindle = Spindle / 19.55 'pwm1B 0 to 1024 10 bit 20000 = 1023
Pwm1b = Spindle
End If
End If
''''''''''''''''''''''''''''''''''''''''''''s
''''''''''''''''''''''''''''''''''''W pwm1a
If Instr(trig , "W") > 0 Then
Trigf = Mid(text , S , 10)
If Trigf <> "" Then
Dim Pw As Word
Pw = Val(trigf)
If Pw > 1023 Then Pw = 1023 'pwm1A 0 to 1023
Pwm1a = Pw
End If
End If
'''''''''''''''''''''''''''''''''''''''''''''''w
Next
If Vxb = 1 Or Vyb = 1 Or Vzb = 1 Then 'x or y or z input
If Vxb = 1 Then
X0 = Xold
Xold = Xnew
Xnew = Vx
Xvis = 1
X1 = Vx * Pulse '40 mm >> 40*100=4000 pulse for 4 cm move
If X1 >= X2 Then
Xdir = 1
Xs = X1 - X2
X2 = X1
Vxbc = 1
Else
If X1 < X2 Then
Xdir = 0
Xs = X2 - X1
X2 = X1
Vxbc = 1
End If
End If
If X1 = 0 Then X2 = 0
Else
Xs = 0
End If
If Vyb = 1 Then
Y0 = Yold
Yold = Ynew
Ynew = Vy
Yvis = 1
Y1 = Vy * Pulse '40 mm >> 40*100=4000 pulse for 4 cm move Y
If Y1 >= Y2 Then
Ydir = 1
Ys = Y1 - Y2
Y2 = Y1
Vybc = 1
Else
If Y1 < Y2 Then
Ydir = 0
Ys = Y2 - Y1
Y2 = Y1
Vybc = 1
End If
End If
If Y1 = 0 Then Y2 = 0
Else
Ys = 0
End If
If Vzb = 1 Then
Z1 = Vz * Pulse '40 mm >> 40*100=4000 pulse for 4 cm move Z
'
If Z1 >= Z2 Then
Zdir = 1
Zs = Z1 - Z2
Z2 = Z1
Vzbc = 1
Else
If Z1 < Z2 Then
Zdir = 0
Zs = Z2 - Z1
Z2 = Z1
Vzbc = 1
End If
End If
If Z1 = 0 Then Z2 = 0
Else
Zs = 0
End If
If Xvis = 1 And Yvis = 1 Then
Else
If Xvis = 1 And Yvis = 0 Then Yold = Ynew
If Xvis = 0 And Yvis = 1 Then Xold = Xnew
End If
Xvis = 0
Yvis = 0
If Seco > 0 Then
Dim Jj As Word
For Jj = 1 To Seco
Wait 10
If Limit = 0 Or Ina = 1 Then Exit For
Next
Seco = 0
End If
If Vxbc = 1 Or Vybc = 1 Or Vzbc = 1 Then
If Arc_man = 0 Then
If Arc = 0 Then
X22 = X2
Y22 = Y2
Call Xyz
Else
Call Xyzij
End If
Else
Cxc = Vx
Cyc = Vy
Call Arc_manual
X2 = X22
Y2 = Y22
Vx = Xold
Vy = Yold
Call Memxy
Call Xy
Vz = Z0
Call Arcz
Call Xyzij
End If
End If
End If
' ''''''''''''''''''''''''''''''''''''''''''''''''''''
If Send_xyz = 1 Then Print "x" ; Vx ; "y" ; Vy ; "z" ; Vz
End If
If Nex = 0 Then Call Configs
Nex = 0
Text = ""
Clear Serialin
Arc = 0
Goto Main
Sub Configs
'''''''''''''''''''''reset_all
If Instr(text , "RESETALL") > 0 Or Instr(text , "Resetall") > 0 Or _
Instr(text , "resetall") > 0 Then Goto Start0
If Instr(text , "STOP") > 0 Or Instr(text , "Stop") > 0 Or _
Instr(text , "stop") > 0 Then
Xen = 1
Yen = 1
Zen = 1
Pwm1a = 0
Pwm1b = 0
Reset_all = 1
End If
If Reset_all = 1 Then
Print "STOP ! Please Check ?"
Wait 10
End If
''''''''''''''''''''''''''''''''''''''''''''''''''
If Reset_all = 0 Then
If Instr(text , "M30") > 0 Then
Xen = 1
Yen = 1
Zen = 1
Pwm1a = 0
Pwm1b = 0
End If
If Instr(text , "HOME") > 0 Or Instr(text , "G28") > 0 Or _
Instr(text , "home") > 0 Or _
Instr(text , "Home") > 0 Then Call Homee
If Instr(text , "RESETZ") > 0 Or Instr(text , "Resetz") > 0 Or _
Instr(text , "resetz") > 0 Then
Z1 = 0
Z2 = 0
Zs = 0
Text = ""
End If
If Instr(text , "RESETX") > 0 Or Instr(text , "Resetx") > 0 Or _
Instr(text , "resetx") > 0 Then
X1 = 0
X2 = 0
Xs = 0
Xold = 0
Xnew = 0
Text = ""
End If
If Instr(text , "RESETY") > 0 Or Instr(text , "Resety") > 0 Or _
Instr(text , "resety") > 0 Then
Y1 = 0
Y2 = 0
Ys = 0
Yold = 0
Ynew = 0
Text = ""
End If
If Instr(text , "SENDON ") > 0 Or Instr(text , "Sendon") > 0 Or _
Instr(text , "sendon") > 0 Then
Send_xyz = 1
Writeeeprom Send_xyz , 16
Print "Ok sendon"
Text = ""
Wait 5
End If
If Instr(text , "SENDOFF ") > 0 Or Instr(text , "Sendoff") > 0 Or _
Instr(text , "sendoff") > 0 Then
Send_xyz = 0
Writeeeprom Send_xyz , 16
Text = ""
Print "Ok sendoff"
Wait 5
End If
'G00 Move at max speed
'G01 Linear interpolation
'G02 Circular interpolation CW
'G03 Circular interpolation CCW
'G17 Select XY plane
'G28 ALL XYZ=0 home
'M00 Program stop
'M03 Spindle rotation CW
'M04 Spindle rotation CCW
'M05 Stop spindle
'M08 Coolant ON
'M09 Coolant OFF
'M30 End program and rewind And RESET
'S SPINLE SPEED R.P.M
'F FEED RATE mm/minute
Print Nexte
Nex = 0
''''''''''''''''''''''''''''''''''''''''''''''config
Trig = Mid(text , 1 , 6)
''''''''''''''''''''''''''''''''''''max_x
If Instr(trig , "max_x=") > 0 Or Instr(trig , "Max_x=") > 0 Or _
Instr(trig , "MAX_X=") > 0 Then
Trigc = Mid(text , 7 , 10)
Max_x = Val(trigc)
If Max_x < 1 Or Max_x > 6500 Then
Max_x = 40
Print "ERR max_x 1 to 65000"
Else
Writeeeprom Max_x , 1
Print "OK " ; Text
End If
Trig = ""
End If
''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''max_y
If Instr(trig , "max_y=") > 0 Or Instr(trig , "Max_y=") > 0 Or _
Instr(trig , "MAX_F=") > 0 Then
Trigc = Mid(text , 7 , 10)
Max_y = Val(trigc)
If Max_y < 1 Or Max_y > 65000 Then
Max_y = 40
Print "ERR max_y 1 to 65000"
Else
Writeeeprom Max_y , 3
Print "OK " ; Text
End If
Trig = ""
End If
''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''max_z
If Instr(trig , "max_z=") > 0 Or Instr(trig , "Max_z=") > 0 Or _
Instr(trig , "MAX_Z=") > 0 Then
Trigc = Mid(text , 7 , 10)
Max_z = Val(trigc)
If Max_z < 1 Or Max_z > 6500 Then
Max_z = 40
Print "ERR max_z 1 to 65000"
Else
Writeeeprom Max_z , 5
Print "OK " ; Text
End If
Trig = ""
End If
''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''max_f
If Instr(trig , "Feedm=") > 0 Or Instr(trig , "feedm=") > 0 Or _
Instr(trig , "FEEDM=") > 0 Then
Trigc = Mid(text , 7 , 10)
Feedm = Val(trigc)
If Feedm < 1 Or Feedm > 4800 Then
Feedm = 1400
Print "ERR feedm 1 to 4800"
Else
Writeeeprom Feedm , 7
Print "OK " ; Text
End If
Trig = ""
End If
''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''feeds
If Instr(trig , "feeds=") > 0 Or Instr(trig , "Feeds=") > 0 Or _
Instr(trig , "FEEDS=") > 0 Then
Trigc = Mid(text , 7 , 10)
Feeds = Val(trigc)
If Feeds < 1 Or Feeds > 100 Then
Feeds = 5.7
Print "ERR feeds 1 to 100"
Else
Writeeeprom Feeds , 9
Print "OK " ; Feeds
End If
Trig = ""
End If
''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''pulse
If Instr(trig , "pulse=") > 0 Or Instr(trig , "Pulse=") > 0 Or _
Instr(trig , "PULSE=") > 0 Then
Trigc = Mid(text , 7 , 10)
Pulse = Val(trigc)
If Pulse < 1 Or Pulse > 20000 Then
Pulse = 100
Print "ERR pulse 1 to 20000"
Else
Writeeeprom Pulse , 14
Print "OK " ; Pulse
End If
Trig = ""
End If
''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''pulse
If Instr(trig , "RES") > 0 Or Instr(trig , "Res") > 0 Or _
Instr(trig , "res") > 0 Then
Trigc = Mid(text , 4 , 4)
Resolation = Val(trigc)
If Resolation < 4 Or Resolation > 100 Then
Resolation = 50
Print "ERR Res 4 to 100"
Else
Print "OK " ; Resolation
End If
Trig = ""
End If
''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''sec
If Instr(trig , "SEC") > 0 Or Instr(trig , "Sec") > 0 Or _
Instr(trig , "sec") > 0 Then
Trigc = Mid(text , 4 , 4)
Seco = Val(trigc)
If Seco < 1 Or Seco > 300 Then
Seco = 0
Print "ERR sec 1 to 300"
Else
Print "OK " ; Seco
End If
Trig = ""
End If
''''''''''''''''''''''''''''''''''''''''
Trig = Mid(text , 1 , 2)
''''''''''''''''''''''''''''''''''''+x
If Instr(trig , "+x") > 0 Then
Trigc = Mid(text , 3 , 4)
Move = Val(trigc)
If Move < 0.001 Or Move > 9999 Then
Print "ERR Move 0.001 to 9999"
Else
Vx = X2 / Pulse
Vx = Vx + Move
Print "OK " ; Move
If Vx < Max_xx Then
Call Memxy
Call Xyz
Else
Print "MAX OF X !"
End If
End If
Trig = ""
End If
''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''-x
If Instr(trig , "-x") > 0 Then
Trigc = Mid(text , 3 , 4)
Move = Val(trigc)
If Move < 0.001 Or Move > 9999 Then
Print "ERR Move 0.001 to 9999"
Else
Vx = X2 / Pulse
Vx = Vx - Move
Print "OK " ; Move
If Vx > 0 Then
Call Memxy
Call Xyz
Else
Print "Zero OF X !"
End If
End If
Trig = ""
End If
''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''+y
If Instr(trig , "+y") > 0 Then
Trigc = Mid(text , 3 , 4)
Move = Val(trigc)
If Move < 0.001 Or Move > 9999 Then
Print "ERR Move 0.001 to 9999"
Else
Vy = Y2 / Pulse
Vy = Vy + Move
Print "OK " ; Move
If Vy < Max_yy Then
Call Memxy
Call Xyz
Else
Print "MAX OF Y !"
End If
End If
Trig = ""
End If
''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''-y
If Instr(trig , "-y") > 0 Then
Trigc = Mid(text , 3 , 4)
Move = Val(trigc)
If Move < 0.001 Or Move > 9999 Then
Print "ERR Move 0.001 to 9999"
Else
Vy = Y2 / Pulse
Vy = Vy - Move
Print "OK " ; Move
If Vy > 0 Then
Call Memxy
Call Xyz
Else
Print "Zero OF Y !"
End If
End If
Trig = ""
End If
''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''+z
If Instr(trig , "+z") > 0 Then
Trigc = Mid(text , 3 , 6)
Move = Val(trigc)
Vz = Z0
Vz = Vz + Move
'Vz = -vz
Print "OK " ; Move
Call Memz
Call Xyz
End If
''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''-z
If Instr(trig , "-z") > 0 Then
Trigc = Mid(text , 3 , 6)
Move = Val(trigc)
Vz = Z0
Vz = Vz - Move
'Vz = -vz
Print "OK " ; Move
Call Memz
Call Xyz
End If
''''''''''''''''''''''''''''''''''''''''
End If
End Sub
Sub Mainfeed
'''''''''''''''''''''''''''max_f to feed
Feed = Feedm
If Feed > 4800 Then Feed = 4800
If Feed < 10 Then Feed = 10
Feedi = Feed / 4800
Feedi = 1 / Feedi
Feedi = Feedi * Feeds
Feed = Feedi
''''''''''''''''''''''''''''''''''''''''''''''
End Sub
Serial0charmatch:
Input Text
...
This file has been truncated, please download it to see its full contents.











_3u05Tpwasz.png?auto=compress%2Cformat&w=40&h=40&fit=fillmax&bg=fff&dpr=2)
Comments