mirror of
https://github.com/Kiritow/OpenComputerScripts.git
synced 2024-03-22 13:10:46 +08:00
Update Station 2/3 Program
This commit is contained in:
parent
b3055f398f
commit
8b69b13d85
224
station_2_3.lua
224
station_2_3.lua
|
@ -1,61 +1,59 @@
|
|||
--[[
|
||||
Station 2/3 Schedule Program
|
||||
]]
|
||||
|
||||
require("util")
|
||||
local sides=require("sides")
|
||||
local event=require("event")
|
||||
local sides = require("sides")
|
||||
local event = require("event")
|
||||
--[[
|
||||
Redstone Signals
|
||||
Direction_[Type][Info]: number
|
||||
]]
|
||||
local ab_st,ab_sr,ab_lin,ab_lout
|
||||
local ba_st,ba_sr,ba_lin,ba_lout
|
||||
local ab_st, ab_sr, ab_lin, ab_lout
|
||||
local ba_st, ba_sr, ba_lin, ba_lout
|
||||
|
||||
local ab_ko,ab_m,ab_ks=0,0,0
|
||||
local ba_ko,ba_m,ba_ks=0,0,0
|
||||
local mid_ka,mid_kb=0,0
|
||||
local ab_ko, ab_m, ab_ks = 0, 0, 0
|
||||
local ba_ko, ba_m, ba_ks = 0, 0, 0
|
||||
local mid_ka, mid_kb = 0, 0
|
||||
|
||||
-- Config your update functions here (Do not change function name)
|
||||
local redin1=proxy("redstone","")
|
||||
local redin2=proxy("redstone","")
|
||||
local redout1=proxy("redstone","")
|
||||
local redout2=proxy("redstone","")
|
||||
local redin1 = proxy("redstone", "")
|
||||
local redin2 = proxy("redstone", "")
|
||||
local redout1 = proxy("redstone", "")
|
||||
local redout2 = proxy("redstone", "")
|
||||
|
||||
local function updateRedstoneInput()
|
||||
ab_st=redin1.getInput(sides.north)
|
||||
ab_sr=redin1.getInput(sides.east)
|
||||
ba_st=redin1.getInput(sides.south)
|
||||
ba_sr=redin1.getInput(sides.west)
|
||||
ab_lin=redin2.getInput(sides.north)
|
||||
ab_lout=redin2.getInput(sides.east)
|
||||
ba_lin=redin2.getInput(sides.south)
|
||||
ba_lout=redin2.getInput(sides.west)
|
||||
ab_st = redin1.getInput(sides.north)
|
||||
ab_sr = redin1.getInput(sides.east)
|
||||
ba_st = redin1.getInput(sides.south)
|
||||
ba_sr = redin1.getInput(sides.west)
|
||||
ab_lin = redin2.getInput(sides.north)
|
||||
ab_lout = redin2.getInput(sides.east)
|
||||
ba_lin = redin2.getInput(sides.south)
|
||||
ba_lout = redin2.getInput(sides.west)
|
||||
end
|
||||
|
||||
local function updateRedstoneOutput()
|
||||
redout1.setOutput(sides.north,ab_ko)
|
||||
redout1.setOutput(sides.east,ab_m)
|
||||
redout1.setOutput(sides.south,ab_ks)
|
||||
redout1.setOutput(sides.west,mid_ka)
|
||||
redout2.setOutput(sides.north,ba_ko)
|
||||
redout2.setOutput(sides.east,ba_m)
|
||||
redout2.setOutput(sides.south,ba_ks)
|
||||
redout2.setOutput(sides.west,mid_kb)
|
||||
redout1.setOutput(sides.north, ab_ko)
|
||||
redout1.setOutput(sides.east, ab_m)
|
||||
redout1.setOutput(sides.south, ab_ks)
|
||||
redout1.setOutput(sides.west, mid_ka)
|
||||
redout2.setOutput(sides.north, ba_ko)
|
||||
redout2.setOutput(sides.east, ba_m)
|
||||
redout2.setOutput(sides.south, ba_ks)
|
||||
redout2.setOutput(sides.west, mid_kb)
|
||||
end
|
||||
|
||||
-- Internal Schedule Status (Notice: Program must start without any trains in station)
|
||||
local mid_direction
|
||||
local ab_station_time=0
|
||||
local ba_station_time=0
|
||||
local mid_time=0
|
||||
local ab_exit_time=0
|
||||
local ba_exit_time=0
|
||||
local ab_station_time = 0
|
||||
local ba_station_time = 0
|
||||
local mid_time = 0
|
||||
local ab_exit_time = 0
|
||||
local ba_exit_time = 0
|
||||
|
||||
--[[
|
||||
Internal Functions
|
||||
]]
|
||||
|
||||
local function doInit()
|
||||
-- Flash output to zero.
|
||||
updateRedstoneOutput()
|
||||
|
@ -68,122 +66,120 @@ local function main()
|
|||
-- Flush input
|
||||
updateRedstoneInput()
|
||||
-- Update status
|
||||
if(ab_station_time>0) then
|
||||
ab_station_time=ab_station_time+1
|
||||
if (ab_station_time > 0) then
|
||||
ab_station_time = ab_station_time + 1
|
||||
end
|
||||
if(ba_station_time>0) then
|
||||
ba_station_time=ba_station_time+1
|
||||
if (ba_station_time > 0) then
|
||||
ba_station_time = ba_station_time + 1
|
||||
end
|
||||
if(mid_time>0) then
|
||||
mid_time=mid_time+1
|
||||
if (mid_time > 0) then
|
||||
mid_time = mid_time + 1
|
||||
end
|
||||
if(ab_exit_time>0) then
|
||||
ab_exit_time=ab_exit_time+1
|
||||
if(ab_exit_time>10) then -- Exit will reset in 10 loops (5seconds)
|
||||
ab_exit_time=0
|
||||
if (ab_exit_time > 0) then
|
||||
ab_exit_time = ab_exit_time + 1
|
||||
if (ab_exit_time > 10) then -- Exit will reset in 10 loops (5seconds)
|
||||
ab_exit_time = 0
|
||||
end
|
||||
end
|
||||
if(ba_exit_time>0) then
|
||||
ba_exit_time=ba_exit_time+1
|
||||
if(ba_exit_time>10) then -- Exit will reset in 10 loops (5seconds)
|
||||
ba_exit_time=0
|
||||
if (ba_exit_time > 0) then
|
||||
ba_exit_time = ba_exit_time + 1
|
||||
if (ba_exit_time > 10) then -- Exit will reset in 10 loops (5seconds)
|
||||
ba_exit_time = 0
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Judge Incoming bus.
|
||||
if(ab_st>0) then -- New incoming bus from A to B
|
||||
if(ab_sr>0) then -- This bus want to stop
|
||||
if(ab_station_time==0) then -- If AB Station is free
|
||||
ab_ko=15 -- enable to allow incoming
|
||||
ab_ks=0 -- disable to let it stop
|
||||
ab_m=0 -- disable to allow incoming to station
|
||||
ab_station_time=1 -- Start Time Counter
|
||||
if (ab_st > 0) then -- New incoming bus from A to B
|
||||
if (ab_sr > 0) then -- This bus want to stop
|
||||
if (ab_station_time == 0) then -- If AB Station is free
|
||||
ab_ko = 15 -- enable to allow incoming
|
||||
ab_ks = 0 -- disable to let it stop
|
||||
ab_m = 0 -- disable to allow incoming to station
|
||||
ab_station_time = 1 -- Start Time Counter
|
||||
else -- AB Station is not free
|
||||
-- This train should wait outside the station
|
||||
end
|
||||
else -- This bus want to pass by
|
||||
if(mid_time==0) then -- Mid is free
|
||||
ab_ko=15 -- enable to allow incoming
|
||||
ab_m=15 -- enable motor to let it pass.
|
||||
mid_ka=15 -- enable switch from A
|
||||
mid_kb=0 -- disable switch to B
|
||||
mid_direction="ab"
|
||||
mid_time=1 -- Start time counter
|
||||
if (mid_time == 0) then -- Mid is free
|
||||
ab_ko = 15 -- enable to allow incoming
|
||||
ab_m = 15 -- enable motor to let it pass.
|
||||
mid_ka = 15 -- enable switch from A
|
||||
mid_kb = 0 -- disable switch to B
|
||||
mid_direction = "ab"
|
||||
mid_time = 1 -- Start time counter
|
||||
else -- Mid is busy
|
||||
-- This train should wait outside the station
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if(ba_st>0) then -- New incoming bus from B to A
|
||||
if(ba_sr>0) then -- This bus want to stop
|
||||
if(ba_station_time==0) then -- If BA Station is free
|
||||
ba_ko=15 -- enable to allow incoming
|
||||
ba_ks=0 -- disable to let it stop
|
||||
ba_m=0 -- disable to allow incoming to station
|
||||
ba_station_time=1 -- Start Time Counter
|
||||
if (ba_st > 0) then -- New incoming bus from B to A
|
||||
if (ba_sr > 0) then -- This bus want to stop
|
||||
if (ba_station_time == 0) then -- If BA Station is free
|
||||
ba_ko = 15 -- enable to allow incoming
|
||||
ba_ks = 0 -- disable to let it stop
|
||||
ba_m = 0 -- disable to allow incoming to station
|
||||
ba_station_time = 1 -- Start Time Counter
|
||||
else -- BA Station is not free
|
||||
-- This train should wait outside the station
|
||||
end
|
||||
else -- This bus want to pass by
|
||||
if(mid_time==0) then -- Mid is free
|
||||
ba_ko=15 -- enable to allow incoming
|
||||
ba_m=15 -- enable motor to let it pass.
|
||||
mid_ka=0
|
||||
mid_kb=15
|
||||
mid_direction="ba"
|
||||
mid_time=1
|
||||
if (mid_time == 0) then -- Mid is free
|
||||
ba_ko = 15 -- enable to allow incoming
|
||||
ba_m = 15 -- enable motor to let it pass.
|
||||
mid_ka = 0
|
||||
mid_kb = 15
|
||||
mid_direction = "ba"
|
||||
mid_time = 1
|
||||
else -- Mid is busy
|
||||
-- This train should wait outside the station
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if(ab_lout>0 and ab_exit_time==0) then -- AB next free
|
||||
if (ab_lout > 0 and ab_exit_time == 0) then -- AB next free
|
||||
-- Judge which train should pass.
|
||||
if(ab_station_time>16 and (mid_time>0 and mid_direction=="ab") ) then -- Two Trains
|
||||
if(ab_station_time>mid_time) then -- StationTrain wait longer.
|
||||
ab_station_time=0 -- Stop counter
|
||||
ab_ks=15 -- enable swith to let it go
|
||||
ab_exit_time=1
|
||||
if (ab_station_time > 16 and (mid_time > 0 and mid_direction == "ab")) then -- Two Trains
|
||||
if (ab_station_time > mid_time) then -- StationTrain wait longer.
|
||||
ab_station_time = 0 -- Stop counter
|
||||
ab_ks = 15 -- enable swith to let it go
|
||||
ab_exit_time = 1
|
||||
else -- MidTrain wait longer
|
||||
mid_time=0 -- Stop Counter
|
||||
mid_kb=15
|
||||
ab_exit_time=1
|
||||
mid_time = 0 -- Stop Counter
|
||||
mid_kb = 15
|
||||
ab_exit_time = 1
|
||||
end
|
||||
elseif(ab_station_time>16) then --Only Station Train
|
||||
ab_station_time=0
|
||||
ab_ks=15
|
||||
ab_exit_time=1
|
||||
elseif(mid_time>0 and mid_direction=="ab") then -- Only Mid Train
|
||||
mid_time=0
|
||||
mid_kb=15
|
||||
ab_exit_time=1
|
||||
elseif (ab_station_time > 16) then --Only Station Train
|
||||
ab_station_time = 0
|
||||
ab_ks = 15
|
||||
ab_exit_time = 1
|
||||
elseif (mid_time > 0 and mid_direction == "ab") then -- Only Mid Train
|
||||
mid_time = 0
|
||||
mid_kb = 15
|
||||
ab_exit_time = 1
|
||||
end -- No train
|
||||
|
||||
end -- End of AB judge
|
||||
|
||||
if(ba_lout>0 and ba_exit_time==0) then -- BA next free
|
||||
if (ba_lout > 0 and ba_exit_time == 0) then -- BA next free
|
||||
-- Judge which train should pass.
|
||||
if(ba_station_time>16 and (mid_time>0 and mid_direction=="ba") ) then -- Two Trains
|
||||
if(ba_station_time>mid_time) then -- StationTrain wait longer.
|
||||
ba_station_time=0 -- Stop counter
|
||||
ba_ks=15 -- enable swith to let it go
|
||||
ba_exit_time=1
|
||||
if (ba_station_time > 16 and (mid_time > 0 and mid_direction == "ba")) then -- Two Trains
|
||||
if (ba_station_time > mid_time) then -- StationTrain wait longer.
|
||||
ba_station_time = 0 -- Stop counter
|
||||
ba_ks = 15 -- enable swith to let it go
|
||||
ba_exit_time = 1
|
||||
else -- MidTrain wait longer
|
||||
mid_time=0 -- Stop Counter
|
||||
mid_ka=15
|
||||
ba_exit_time=1
|
||||
mid_time = 0 -- Stop Counter
|
||||
mid_ka = 15
|
||||
ba_exit_time = 1
|
||||
end
|
||||
elseif(ba_station_time>16) then --Only Station Train
|
||||
ba_station_time=0
|
||||
ba_ks=15
|
||||
ba_exit_time=1
|
||||
elseif(mid_time>0 and mid_direction=="ba") then -- Only Mid Train
|
||||
mid_time=0
|
||||
mid_ka=15
|
||||
ba_exit_time=1
|
||||
elseif (ba_station_time > 16) then --Only Station Train
|
||||
ba_station_time = 0
|
||||
ba_ks = 15
|
||||
ba_exit_time = 1
|
||||
elseif (mid_time > 0 and mid_direction == "ba") then -- Only Mid Train
|
||||
mid_time = 0
|
||||
mid_ka = 15
|
||||
ba_exit_time = 1
|
||||
end -- No train
|
||||
end
|
||||
|
||||
|
@ -194,3 +190,7 @@ local function main()
|
|||
os.sleep(0.5)
|
||||
end
|
||||
end
|
||||
|
||||
print("Start!")
|
||||
main()
|
||||
print("Stop!")
|
Loading…
Reference in New Issue
Block a user