summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcheapie <no-email-for-you@example.com>2022-01-07 16:51:04 -0600
committercheapie <no-email-for-you@example.com>2022-01-07 16:51:04 -0600
commit32641893e75f11903489a38a201bd661c8f99b50 (patch)
tree2412538cad02594cf04f7952c8a751c54155fd99
parentee316f2325e26dc532ccaa09369e9d173b5ef411 (diff)
downloaddigistuff-master.tar
digistuff-master.tar.gz
digistuff-master.tar.bz2
digistuff-master.tar.xz
digistuff-master.zip
Add examples for a few devicesHEADmaster
-rw-r--r--init.lua1
-rw-r--r--lc_examples/button.lua18
-rw-r--r--lc_examples/ioexpander.lua14
-rw-r--r--lc_examples/light.lua24
-rw-r--r--lc_examples/memory.lua81
-rw-r--r--lc_examples/piston.lua19
-rw-r--r--lcdocs.lua15
-rw-r--r--mod.conf2
8 files changed, 173 insertions, 1 deletions
diff --git a/init.lua b/init.lua
index ee719ab..821ab57 100644
--- a/init.lua
+++ b/init.lua
@@ -21,6 +21,7 @@ local components = {
"sillystuff",
"movestone",
"lclibraries",
+ "lcdocs",
}
if minetest.get_modpath("mesecons_luacontroller") then table.insert(components,"ioexpander") end
diff --git a/lc_examples/button.lua b/lc_examples/button.lua
new file mode 100644
index 0000000..951d45a
--- /dev/null
+++ b/lc_examples/button.lua
@@ -0,0 +1,18 @@
+--Digilines Button Example
+
+--Connect a button on the channel "button" with any message.
+--When the button is pressed, pin A will toggle.
+--If manual light control is selected on the button, the button light will also be flashing.
+--If the button has a message set, it will be sent to an LCD on channel "lcd"
+
+if event.type == "program" then
+ mem.flash = false
+ interrupt(0,"flash")
+elseif event.iid == "flash" then
+ mem.flash = not mem.flash
+ digiline_send("button","light_"..(mem.flash and "on" or "off"))
+ interrupt(1,"flash",true)
+elseif event.channel == "button" then
+ port.a = not port.a
+ digiline_send("lcd",event.msg)
+end
diff --git a/lc_examples/ioexpander.lua b/lc_examples/ioexpander.lua
new file mode 100644
index 0000000..02a8fee
--- /dev/null
+++ b/lc_examples/ioexpander.lua
@@ -0,0 +1,14 @@
+--Digilines I/O Expander Example
+
+--Connect two I/O expanders, one on channel "expander1" and one on "expander2"
+--The pins on the second expander will follow the input states on the first one.
+--In addition, whenever an input on the first expander changes, a line will be logged to the terminal with the new state.
+
+local function iostr(pin)
+ return (pin and "1" or "0")
+end
+
+if event.channel == "expander1" then
+ digiline_send("expander2",event.msg)
+ print(string.format("A: %s B: %s C: %s D: %s",iostr(event.msg.a),iostr(event.msg.b),iostr(event.msg.c),iostr(event.msg.d)))
+end
diff --git a/lc_examples/light.lua b/lc_examples/light.lua
new file mode 100644
index 0000000..6914167
--- /dev/null
+++ b/lc_examples/light.lua
@@ -0,0 +1,24 @@
+--Digilines Dimmable Light Demo
+
+--Connect one or more lights on the channel "light"
+--Send pulses on:
+----Pin A to make the light brighter
+----Pin B to make the light dimmer
+----Pin C to set the light to full brightness
+----Pin D to turn the light off
+
+if event.type == "program" then
+ mem.light = 0
+elseif event.type == "on" then
+ if event.pin.name == "A" then
+ mem.light = math.min(14,mem.light+1)
+ elseif event.pin.name == "B" then
+ mem.light = math.max(0,mem.light-1)
+ elseif event.pin.name == "C" then
+ mem.light = 14
+ elseif event.pin.name == "D" then
+ mem.light = 0
+ end
+end
+
+digiline_send("light",mem.light)
diff --git a/lc_examples/memory.lua b/lc_examples/memory.lua
new file mode 100644
index 0000000..cf38121
--- /dev/null
+++ b/lc_examples/memory.lua
@@ -0,0 +1,81 @@
+--Digilines Memory Example
+
+--Connect an EEPROM or SRAM chip on channel "memory"
+--Enter "help" in the terminal for a command list
+
+local function runcmd(command)
+ if command ~= "" then
+ print(" "..command,true)
+ print()
+ end
+ if string.sub(command,1,4) == "read" then
+ local address = string.sub(command,6,7)
+ if string.sub(address,2,2) == " " then address = string.sub(address,1,1) end
+ address = tonumber(address)
+ if (not address) or address > 31 or address < 0 or math.floor(address) ~= address then
+ print("Invalid address - address must be an integer from 0 to 31")
+ else
+ digiline_send(mem.channel,{command = "read",address = address})
+ mem.readsuccess = false
+ interrupt(1,"readtimeout")
+ return --Suppress printing a new prompt
+ end
+ elseif string.sub(command,1,5) == "write" then
+ local address = string.sub(command,7,8)
+ local data = string.sub(command,10,-1)
+ if string.sub(address,2,2) == " " then
+ address = string.sub(command,7,7)
+ data = string.sub(command,9,-1)
+ end
+ address = tonumber(address)
+ if (not address) or address > 31 or address <0 or math.floor(address) ~= address then
+ print("Invalid address - address must be an integer from 0 to 31")
+ elseif data == "" then
+ print("No data specified")
+ else
+ print(string.format("Wrote to address %d",address))
+ digiline_send(mem.channel,{command = "write",address = address,data = data})
+ end
+ elseif string.sub(command,1,7) == "channel" then
+ local channel = string.sub(command,9,-1)
+ if channel and channel ~= "" then
+ mem.channel = channel
+ print("Channel changed")
+ else
+ print("No channel specified")
+ end
+ elseif command == "clear" then
+ clearterm()
+ print(">")
+ return --Suppress printing a new prompt - it was done already to omit the blank line
+ elseif command == "help" then
+ print("Available commands:")
+ print("channel <channel>: Changes the digilines channel the memory device is attached to, default is \"memory\"")
+ print("clear: Clears the screen")
+ print("read <address>: Reads from the specified address and displays the received data")
+ print("write <address> <data>: Writes the specified data to the specified address")
+ print("help: Shows this help message")
+ elseif command == "" then
+ --Do nothing
+ else
+ print("Unknown command - use \"help\" to see a list of valid commands.")
+ end
+ print()
+ print(">")
+end
+
+if event.type == "program" then
+ mem.channel = "memory"
+ runcmd("clear")
+elseif event.iid == "readtimeout" and not mem.readsuccess then
+ print("No response received. Is there a memory device connected on the channel \""..mem.channel.."\"?")
+ print()
+ print(">")
+elseif event.channel == mem.channel then
+ mem.readsuccess = true
+ print(event.msg)
+ print()
+ print(">")
+elseif event.type == "terminal" then
+ runcmd(event.text)
+end
diff --git a/lc_examples/piston.lua b/lc_examples/piston.lua
new file mode 100644
index 0000000..938acbb
--- /dev/null
+++ b/lc_examples/piston.lua
@@ -0,0 +1,19 @@
+--Digilines Piston Example
+
+--Connect the piston on the channel "piston"
+--Pulse pin A to extend the piston
+--Pulse pin B to retract the piston
+--Pulse pin C to retract the piston, pulling one node back
+--Pulse pin D to silently retract the piston, pulling up to 5 nodes back
+
+if event.type == "on" then
+ if event.pin.name == "A" then
+ digiline_send("piston","extend")
+ elseif event.pin.name == "B" then
+ digiline_send("piston","retract")
+ elseif event.pin.name == "C" then
+ digiline_send("piston","retract_sticky")
+ elseif event.pin.name == "D" then
+ digiline_send("piston",{action = "retract",allsticky = true,max = 5,sound = "none"})
+ end
+end
diff --git a/lcdocs.lua b/lcdocs.lua
new file mode 100644
index 0000000..6661af4
--- /dev/null
+++ b/lcdocs.lua
@@ -0,0 +1,15 @@
+if (not minetest.global_exists("mesecon")) or type(mesecon.lc_docs) ~= "table" then return end
+
+local examples = {
+ ["Digilines Piston"] = "piston.lua",
+ ["Digilines Button"] = "button.lua",
+ ["Digilines I/O Expander"] = "ioexpander.lua",
+ ["Digilines EEPROM/SRAM"] = "memory.lua",
+ ["Digilines Dimmable Light"] = "light.lua",
+}
+
+for k,v in pairs(examples) do
+ local f = io.open(minetest.get_modpath("digistuff")..DIR_DELIM.."lc_examples"..DIR_DELIM..v,"r")
+ mesecon.lc_docs.examples[k] = f:read("*all")
+ f:close()
+end
diff --git a/mod.conf b/mod.conf
index 15edfcf..dc49b4a 100644
--- a/mod.conf
+++ b/mod.conf
@@ -2,4 +2,4 @@ name = digistuff
title = digistuff
description = Random digilines devices for Minetest
depends = digilines
-optional_depends = default,mesecons,mesecons_mvps,screwdriver,pipeworks
+optional_depends = default,mesecons,mesecons_mvps,screwdriver,pipeworks,mesecons_luacontroller