Add dropper controller to handle dispense commands and trigger redstone pulses

This commit is contained in:
MayaTheShy
2026-03-15 16:08:15 -04:00
parent b0f262dcea
commit b4c2916739

64
dropperController.lua Normal file
View File

@@ -0,0 +1,64 @@
-- Dropper Controller: Runs on Computer 1 (next to dropper_0)
-- Listens for rednet "dispense" messages and fires redstone to the back.
local REDSTONE_SIDE = "back" -- side facing dropper_0
local PULSE_TIME = 0.3 -- redstone pulse duration in seconds
local PROTOCOL = "inventory"
-------------------------------------------------
-- Setup
-------------------------------------------------
-- Open any available modem
local function setupModem()
for _, side in ipairs({"top","bottom","left","right","front","back"}) do
if peripheral.getType(side) == "modem" then
rednet.open(side)
print("[OK] Modem opened on: " .. side)
return true
end
end
print("[ERR] No modem found!")
return false
end
-- Send a redstone pulse to trigger the dropper
local function pulseRedstone()
redstone.setOutput(REDSTONE_SIDE, true)
sleep(PULSE_TIME)
redstone.setOutput(REDSTONE_SIDE, false)
end
-------------------------------------------------
-- Main
-------------------------------------------------
print("=================================")
print(" Dropper Controller (ID " .. os.getComputerID() .. ")")
print("=================================")
print("")
print("Dropper side: " .. REDSTONE_SIDE)
print("Listening for dispense commands...")
print("")
if not setupModem() then
print("Cannot continue without a modem.")
return
end
while true do
local senderID, message, protocol = rednet.receive(PROTOCOL)
if message == "dispense" then
print(string.format("[RX] Dispense from computer %d", senderID))
-- Pulse once per item slot in the dropper to eject everything
-- A dropper has 9 slots; pulse enough times to empty it
for i = 1, 9 do
pulseRedstone()
sleep(0.1)
end
print("[OK] Dropper fired (9 pulses)")
end
end