Add examples for a few devices

master
cheapie 2022-01-07 16:51:04 -06:00
parent ee316f2325
commit 32641893e7
8 changed files with 173 additions and 1 deletions

View File

@ -21,6 +21,7 @@ local components = {
"sillystuff",
"movestone",
"lclibraries",
"lcdocs",
}
if minetest.get_modpath("mesecons_luacontroller") then table.insert(components,"ioexpander") end

18
lc_examples/button.lua Normal file
View File

@ -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

View File

@ -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

24
lc_examples/light.lua Normal file
View File

@ -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)

81
lc_examples/memory.lua Normal file
View File

@ -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

19
lc_examples/piston.lua Normal file
View File

@ -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

15
lcdocs.lua Normal file
View File

@ -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

View File

@ -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