Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local periList = peripheral.getNames()
- modem = false
- for i = 1, #periList do
- if peripheral.getType(periList[i])=="modem" then
- modem = peripheral.wrap(periList[i])
- rednet.open(periList[i])
- end
- end
- if not(modem) then
- error("No modem found")
- end
- function SaveToFile(filename, value)
- fs.delete(filename)
- local file = fs.open(filename, "w")
- file.writeLine(value .. "")
- file.close()
- return 0
- end
- function LoadFromFile(filename)
- local file = fs.open(filename, "r")
- local data = file.readLine()
- file.close()
- return data
- end
- function get_realtime()
- s, d, p = rednet.receive()
- return d
- end
- function math_round(num, idp)
- return tonumber(string.format("%." .. (idp or 0) .. "f", num))
- end
- if fs.exists("counter.dat") then
- temp = LoadFromFile("counter.dat")
- counter = tonumber(temp)
- else
- counter = 0
- SaveToFile("counter.dat", counter)
- end
- if fs.exists("last.dat") then
- temp = LoadFromFile("last.dat")
- last_passage = tonumber(temp)
- else
- last_passage = -1
- SaveToFile("last.dat", last_passage)
- end
- if fs.exists("name.dat") then
- name = LoadFromFile("name.dat")
- else
- print("Enter route name:")
- name = read()
- SaveToFile("name.dat", name)
- end
- pulse_counted = false
- if fs.exists("timings.dat") then
- timings = textutils.unserialize(LoadFromFile("timings.dat"))
- else
- timings = {}
- SaveToFile("timings.dat", textutils.serialize(timings))
- end
- function checktrain()
- while true do
- os.pullEvent("redstone")
- if rs.getInput("bottom") and not(pulse_counted) then
- pulse_counted = true
- counter = counter + 1;
- passage = get_realtime()
- if last_passage and last_passage>1 then
- diff = passage - last_passage
- average = get_average()
- if average and average * 2 > diff then
- table.insert(timings, diff)
- end
- SaveToFile("timings.dat", textutils.serialize(timings))
- end
- last_passage = passage
- SaveToFile("last.dat", last_passage)
- SaveToFile("counter.dat", counter)
- end
- if not(rs.getInput("bottom")) and pulse_counted then
- pulse_counted = false
- end
- end
- end
- function get_average ()
- average = false
- if #timings > 0 then
- sum = 0
- for i=1,#timings do
- sum = sum + timings[i]
- end
- average = math_round(sum/#timings,0)
- end
- return average
- end
- function showStat()
- while true do
- term.clear()
- term.setCursorPos(1,1)
- print("Current route: "..name)
- print("Current counter:"..counter)
- if last_passage then
- if last_passage and last_passage > 1 then
- rtime = get_realtime()
- from_last_passage = (rtime - last_passage) .. " seconds from last train"
- else
- from_last_passage = "No trains passed"
- end
- print(from_last_passage)
- end
- if #timings > 0 then
- sum = 0
- for i=1,#timings do
- sum = sum + timings[i]
- end
- average = math_round(sum/#timings,0)
- print("Average route time:"..average)
- end
- os.sleep(1)
- end
- end
- parallel.waitForAny(showStat,checktrain)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement