-- Touch Jog Example
-- Shows how to jog a stepper motor (DRV8825) using 5 touch pads
-- where each touch pad jogs at a difference frequency, slow to fast,
-- when touching the pads. When you release from the pads the jogging
-- is stopped.

-- File hierarchy:
-- touchjog_main.lua
-- - touchjog_touch.lua
-- - touchjog_jog.lua
--     - touchjog_jog_drv8825.lua

-- You need to connect the following pins:
-- Touch pads use pins 2, 12, 13, 14, 15, 27, 33, 32
-- Stepper motor uses pins:
    -- m.pinStep = 4
    -- m.pinDir = 0 
    -- m.pinSleep = 16 
    -- -- Loopback pulse in from m.pinStep (use wire to connect)
    -- m.pinPulseIn = 36 -- 36 (sens_vp)

m = {}
m.jog = require("touchjog_jog")
m.touch = require("touchjog_touch")

m.testFreq = 100
m._isJogging = false

function m.init()

    -- Init jog
    m.jog.init()
    
    -- Init touch pads
    m.touch.init({
    cb=m.onTouch, -- our callback on interrupt
    })
    m.touch.config()
    m.touch.read()
    
    -- Setup the tmr for the callback process
    m._tmr = tmr.create()
    m._tmr:register(150, tmr.ALARM_SEMI, m.onTmr)


end

m._padState = 0 -- 0 means untouched
m._tmr = nil -- will hold the tmr obj

-- We will get a callback every 5ms or so when touched
-- We will reset the tmr each time and after 20ms we will throw
-- untouched event
function m.onTouch(pads)
    
    -- print("state:", m._padState)
    
    if m._padState == 0 then
    -- we just got touched
    m._padState = 1 -- 1 means touched
    m._tmr:start()
    print("Got touch")
    m.jog.jogStart(100)
    else -- m._padState == 1
    -- we will get here on successive callbacks while touched
    -- we get them about every 8ms
    -- so reset the tmr so it doesn't timeout yet
    m._tmr:stop()
    m._tmr:start()
    end
    
    -- pads {2,3,4,5,6}
    local runfreq = 100
    if pads[6] then runfreq = 20
    elseif pads[5] then runfreq = 70
    elseif pads[4] then runfreq = 150
    elseif pads[3] then runfreq = 300
    elseif pads[2] then runfreq = 450
    end
    
    m.jog.setfreq(runfreq,false)
    
end

function m.onTmr()
    -- if we get the timer triggered, it means that we timed out
    -- from touch callbacks, so we presume the touch ended
    m._padState = 0
    print("Got untouch")
    m.jog.jogStop()
end

m.init()