module App.Stepper
where
import Control.Monad
import STM32.API
import STM32.GPIO as GPIO
data Direction = CW | CCW deriving (Show,Eq)
runStepper:: Direction -> Int -> IO ()
runStepper = runStepperDelay 25000
runStepperDelay :: Int -> Direction -> Int -> IO ()
runStepperDelay pause dir steps = runMI $ do
let
port = GPIOB
dirWire = (port,Pin_2)
stepWire = (port,Pin_1)
initMI
resetHalt
peripheralClockOn port
pinMode dirWire $ GPOutPushPull MHz_2
pinMode stepWire $ GPOutPushPull MHz_2
case dir of
CW -> pinHigh dirWire
CCW -> pinLow dirWire
replicateM_ steps $ do
delay pause
pinHigh stepWire
delay pause
pinLow stepWire