nodemcu-firmware/lua_examples/touch/touch_8pads_showlist.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