Digiline Jumpdrive controller

From Pandorabox
Revision as of 20:22, 12 December 2019 by BuckarooBanzai (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Overview

Simple digiline jumpdrive controller

Features:

  • Allows for step-jumping into all 6 directions
  • Sethome / go-home button
  • Lock button

Lua Controller

Version history:

-- version 1.1

mem.factor = mem.factor or 1

local function update_touch()
 digiline_send("touch", { command = "clear" })

 digiline_send("touch", {  command = "addbutton_exit",  name="xplus",  label="X+",  X=0, Y=0, W=4, H=1 })
 digiline_send("touch", {  command = "addbutton_exit",  name="xminus",  label="X-",  X=0, Y=1, W=4, H=1 })
 digiline_send("touch", {  command = "addbutton_exit",  name="yplus",  label="Y+",  X=0, Y=2, W=4, H=1 })
 digiline_send("touch", {  command = "addbutton_exit",  name="yminus",  label="Y-",  X=0, Y=3, W=4, H=1 })
 digiline_send("touch", {  command = "addbutton_exit",  name="zplus",  label="Z+",  X=0, Y=4, W=4, H=1 })
 digiline_send("touch", {  command = "addbutton_exit",  name="zminus",  label="Z-",  X=0, Y=5, W=4, H=1 })

 digiline_send("touch", {  command = "addbutton_exit",  name="factorplus",  label="Factor+",  X=0, Y=6, W=4, H=1 })
 digiline_send("touch", {  command = "addbutton_exit",  name="factorminus",  label="Factor-",  X=0, Y=7, W=4, H=1 })
 digiline_send("touch", {  command = "addlabel",  label="Factor: " .. mem.factor,  X=4, Y=6.5 })

 digiline_send("touch", {  command = "addbutton_exit",  name="sethome",  label="Set home",  X=4, Y=0, W=4, H=1 })
 digiline_send("touch", {  command = "addbutton_exit",  name="gohome",  label="Go home",  X=4, Y=1, W=4, H=1 })

 digiline_send("touch", {  command = "addbutton_exit",  name="lock",  label="Lock",  X=4, Y=5, W=4, H=1 })
end

if event.type == "program" then
 update_touch()
end

if event.type == "digiline" and event.channel == "touch" then
 mem.touch_event = event.msg
 digiline_send("jumpdrive",  {command="get"})
end

if event.type == "digiline" and event.channel == "jumpdrive" and event.msg.target then
 local jump = false
 local increment = ((event.msg.radius*2)+1)*mem.factor
 if mem.touch_event.lock then
  digiline_send("touch", { command = "clear" })

 elseif mem.touch_event.sethome then
  mem.home = event.msg.position

 elseif mem.touch_event.gohome and mem.home then
  digiline_send("jumpdrive", {command="set", key="x", value=mem.home.x})
  digiline_send("jumpdrive", {command="set", key="y", value=mem.home.y})
  digiline_send("jumpdrive", {command="set", key="z", value=mem.home.z})
  jump = true

 elseif mem.touch_event.yplus then
  digiline_send("jumpdrive", {command="set", key="y", value=event.msg.target.y+increment})
  jump = true

 elseif mem.touch_event.yminus then
  digiline_send("jumpdrive", {command="set", key="y", value=event.msg.target.y-increment})
  jump = true

 elseif mem.touch_event.xplus then
  digiline_send("jumpdrive", {command="set", key="x", value=event.msg.target.x+increment})
  jump = true

 elseif mem.touch_event.xminus then
  digiline_send("jumpdrive", {command="set", key="x", value=event.msg.target.x-increment})
  jump = true

 elseif mem.touch_event.zplus then
  digiline_send("jumpdrive", {command="set", key="z", value=event.msg.target.z+increment})
  jump = true

 elseif mem.touch_event.zminus then
  digiline_send("jumpdrive", {command="set", key="z", value=event.msg.target.z-increment})
  jump = true

 elseif mem.touch_event.factorplus then
  mem.factor = mem.factor + 1
  update_touch()

 elseif mem.touch_event.factorminus then
  mem.factor = mem.factor - 1
  if mem.factor < 1 then
   mem.factor = 1
  end
  update_touch()

 end

 if jump then
  digiline_send("jumpdrive", {command="jump"})
 end
end

Setup