86 lines
2.5 KiB
Lua
86 lines
2.5 KiB
Lua
-- Touch sensor for 8 pads
|
|
-- Set threshold to 30% of untouched state
|
|
-- Print padNum list per callback
|
|
|
|
-- To use:
|
|
-- tpad = require("touch_8pads_showlist")
|
|
-- tpad.init({isDebug=false})
|
|
-- tpad.config()
|
|
|
|
local m = {}
|
|
|
|
m.pad = {2,3,4,5,6,7,8,9} -- 2=GPIO2, 3=GPIO15, 4=GPIO13, 5=GPIO12, 6=GPIO14, 7=GPIO27, 8=GPIO33, 9=GPIO32
|
|
|
|
m._tp = nil -- will hold the touchpad obj
|
|
m._isDebug = true
|
|
|
|
-- We will get a callback every 8ms or so when touched
|
|
function m.onTouch(pads)
|
|
|
|
print(m.pconcat(pads))
|
|
|
|
end
|
|
|
|
function m.pconcat(tab)
|
|
local ctab = {}
|
|
local n = 1
|
|
for k, v in pairs(tab) do
|
|
ctab[n] = k
|
|
n = n + 1
|
|
end
|
|
return table.concat(ctab, ",")
|
|
end
|
|
|
|
function m.init(tbl)
|
|
|
|
if (tbl ~= nil) then
|
|
if (tbl.isDebug ~= nil) then m._isDebug = tbl.isDebug end
|
|
end
|
|
|
|
m._tp = touch.create({
|
|
pad = m.pad, -- pad = 0 || {0,1,2,3,4,5,6,7,8,9} 0=GPIO4, 1=GPIO0, 2=GPIO2, 3=GPIO15, 4=GPIO13, 5=GPIO12, 6=GPIO14, 7=GPIO27, 8=GPIO33, 9=GPIO32
|
|
cb = m.onTouch, -- Callback will get Lua table of pads/bool(true) that were touched.
|
|
intrInitAtStart = false, -- Turn on interrupt at start. Default to true. Set to false to config first. Turn on later with tp:intrEnable()
|
|
thresTrigger = touch.TOUCH_TRIGGER_BELOW, -- TOUCH_TRIGGER_BELOW or TOUCH_TRIGGER_ABOVE. Touch interrupt happens if counter is below or above.
|
|
lvolt = touch.TOUCH_LVOLT_0V5, -- Low ref voltage TOUCH_LVOLT_0V4, TOUCH_LVOLT_0V5, TOUCH_LVOLT_0V6, TOUCH_LVOLT_0V7
|
|
hvolt = touch.TOUCH_HVOLT_2V7, -- High ref voltage TOUCH_HVOLT_2V4, TOUCH_HVOLT_2V5, TOUCH_HVOLT_2V6, TOUCH_HVOLT_2V7
|
|
atten = touch.TOUCH_HVOLT_ATTEN_1V, -- TOUCH_HVOLT_ATTEN_0V, TOUCH_HVOLT_ATTEN_0V5, TOUCH_HVOLT_ATTEN_1V, TOUCH_HVOLT_ATTEN_1V5
|
|
isDebug = m._isDebug
|
|
})
|
|
|
|
end
|
|
|
|
function m.read()
|
|
local raw = m._tp:read()
|
|
print("Pad", "Val")
|
|
for key,value in pairs(raw) do
|
|
print(key,value)
|
|
end
|
|
end
|
|
|
|
function m.config()
|
|
local raw = m._tp:read()
|
|
|
|
if (m._isDebug) then
|
|
print("Configuring...")
|
|
print("Pad", "Base", "Thres")
|
|
end
|
|
|
|
for key,value in pairs(raw) do
|
|
if key ~= nil then
|
|
-- reduce by 30%
|
|
local thres = raw[key] - math.floor(raw[key] * 0.3)
|
|
m._tp:setThres(key, thres)
|
|
if (m._isDebug) then print(key, value, thres) end
|
|
end
|
|
end
|
|
m._tp:intrEnable()
|
|
if (m._isDebug) then print("You can now touch the sensors") end
|
|
end
|
|
|
|
-- m.init()
|
|
-- m.read()
|
|
-- m.config()
|
|
|
|
return m
|