summaryrefslogtreecommitdiff
path: root/lc_examples
diff options
context:
space:
mode:
Diffstat (limited to 'lc_examples')
-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
5 files changed, 156 insertions, 0 deletions
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