module Data.GCode.Generate.Examples where
import Data.GCode
import Data.GCode.Generate
import Data.GCode.RS274
allExamples :: [(String, GCode)]
allExamples = [
("encoder_wheel_drilling", fst $ encoderWheel)
, ("encoder_wheel_milling", snd $ encoderWheel)
, ("rectangle10x20", rectangle10mm20mm)
]
preamble :: [Code]
preamble = [
unitsPerMinute
, absolute
, millimeters
, g <#> 0 & param F 3000
, s <#> 12000
, spindleCW
, dwell & param P 10
]
postamble :: [Code]
postamble = [
spindleStop
, coolantStop
, programEnd
]
returnZ :: Double
returnZ = 1
safeZ :: Double
safeZ = 2
workZ :: Double
workZ = (-2)
rapidFeedrate :: Double
rapidFeedrate = 250
downFeedrate :: Double
downFeedrate = 150
up :: Code
up = rapid & z safeZ & feed rapidFeedrate
down :: Code
down = move & z workZ & feed downFeedrate
program :: [Code] -> [Code]
program code = preamble ++ code ++ postamble
rectangle10mm20mm :: GCode
rectangle10mm20mm = program $ map (uncurry movexy) (rectangle 10 20)
encoderWheel :: (GCode, GCode)
encoderWheel =
let encoderRadius = 50
encoderSteps = 100
drillRadius = 0.6
endmillRadius = 3.175
innerOffset = 4
encoderRadiusInner = encoderRadius - (2*drillRadius) - innerOffset
drillPoints = circle encoderRadius encoderSteps
drillPointsInner = circle' (2*pi/360 * (360 / 200) * 1.5) encoderRadiusInner encoderSteps
drill xv yv = drillingCycle & xyz xv yv workZ & feed 250 & param R returnZ
drillBlocks = [ map (uncurry drill) drillPoints
, map (uncurry drill) drillPointsInner ]
anchor = circle (5.3 - endmillRadius) 360
anchorPositions = circle (30) 4
anchors = travelCat up down $ map (\(xc, yc) ->
map (\(xv, yv) -> movexy (xc + xv) (yc + yv)) anchor)
anchorPositions
encInner = circle (10.4 - endmillRadius) 360
encOuter = circle (encoderRadius + innerOffset + endmillRadius) 3600
cut = map (uncurry movexy)
inner = cut encInner
outer = cut encOuter
in ( program $ travelCatDrill up drillBlocks
, program $ travelCat up down [inner, anchors, outer]
)