View difference between Paste ID: Uf6bpEMA and 8bgXSFn0
SHOW: | | - or go back to the newest paste.
1-
local bio = peripheral.wrap("back")
1+
-- Biowatch Program
2-
local modem = peripheral.wrap("bottom")
2+
-- Watches 2 Bioreactors and turns them on/off depending on how many items are in the reactor
3-
local machine = "tile_mfr_machine_bioreactor_name_0"
3+
-- The first reactor will only try to keep one stack of each type of item in its buffer, it will push all
4
--  duplicate stacks into the second reactor.
5
-- The first reactor will only turn on when a certain number of items are being processed (default 8)
6
7
-- The Second reactor will only turn on if there are 8 (defatult) or more items being processed, or if there are 
8
--  6 or more item stacks in the inventory buffer
9
10
11
-- In the way it is configured now, the first reactor is behind the computer,
12
-- The second reactor is directly to the north of the first reactor, and is connected to
13
--   the computer via a modem cable. The modem is on the bottom face of the computer
14
-- Connected to the top of the computer is a rednet cable which connects to the two reactors
15
--   The first reactor's connection is colored orange, the second is magenta
16
17-
  bio.pushItem("north",slot)
17+
-- Note: in order to connect a modem to the second reactor, a Peripheral Proxy is required
18
19
20
21
local bio = peripheral.wrap("back") -- Location of first reactor
22
local modem = peripheral.wrap("bottom") -- Location of modem for second reactor
23
local machine = "tile_mfr_machine_bioreactor_name_0" -- Network name of second reactor (this is the default)
24
local CableSide = "top" -- location of rednet cable
25
26
local pushDirection = "north" -- Location of the second reactor relative to the first
27
28
local firstReactorColor = colors.orange -- rednet cable color for first reactor
29
local secondReactorColor = colors.magenta -- rednet cable color for first reactor
30
31
local FirstReactorVariety = 8 -- number of items required in first reactor to turn on
32
local SecondReactorVariety = 8 -- number of items required in second reactor to turn on
33
34
35-
end 
35+
36
function getSecondStack(stack)
37
   return modem.callRemote(machine,"getStackInSlot",stack)
38
end
39
 
40
function isIn(var,tab)
41
 for i,v in ipairs(tab) do
42-
--  print("wee")
42+
43
 end
44
 return false
45
end
46
 
47
function PushItem(slot)
48
  bio.pushItem(pushDirection,slot)
49
end
50
 
51
 
52
-- Checks if it should turn on the second reactor
53
function checkSecond()
54
  local count = 0
55
 
56
  for i = 1,9 do
57
    if ( getSecondStack(i) ~= nil ) then count = count + 1 end
58
  end
59
  if ( count >= 6 ) then return false end
60
  count = 0
61-
  local first = true
61+
62
  for i=10,18 do
63
    if ( getSecondStack(i) ~= nil ) then count = count + 1 end
64-
  if ( numOfTypes >= 8 ) then
64+
65
  if ( count >= 8 ) then return false end  
66-
    --rs.setAnalogOutput("right",true)
66+
67
  return true
68
end
69-
    --rs.setOutput("right",false)
69+
70
71
 
72-
  if ( first ) then color = color + colors.orange end
72+
-- Main Loop
73-
  if ( second ) then color = color + colors.magenta end
73+
74-
  rs.setBundledOutput("top",color)
74+
75
  local idList = {}
76
  local numOfTypes = 0
77
78
  -- Check the inventory of the first reactor, push duplicate stacks to the second reactor.
79
  for i=1,9 do
80
    local item = bio.getStackInSlot(i)
81
    if (  item ~= nil ) then
82
      local code = item.id .. "." .. item.dmg
83
      if ( isIn(code,idList) ) then
84
    --    print("Pushing " .. i .. " " .. item.id)
85
        PushItem(i)
86
      else
87
  --      print("Adding " .. i .. " ".. item.id)
88
        table.insert(idList,code)
89
       
90
      end
91
    end
92
  end  
93
  
94
  -- Count number of types being processed
95
  for i=10,18 do
96
    local item = bio.getStackInSlot(i)
97
    if ( item ~= nil ) then numOfTypes = numOfTypes + 1 end
98
  end
99
  
100
  -- Now determine if reactor should be on or off
101
  local first = true 
102
  local second = checkSecond()
103
  if ( numOfTypes >= FirstReactorVariety ) then
104
    first = false
105
  else
106
    first = true
107
  end
108
  
109
  -- set the color outputs for the rednet cable
110
  local color = 0
111
  if ( first ) then color = color + firstReactorColor end
112
  if ( second ) then color = color + secondReactorColor end
113
  rs.setBundledOutput(CableSide,color)
114
 
115
 
116
  os.sleep(10)
117
end