View difference between Paste ID: fCFbFqWc and Dnsr2Fwq
SHOW: | | - or go back to the newest paste.
1-
function upperLayers()
1+
local lastTurn = 1 -- direction of last turn (0=left, 1=right)
2-
  for i=1,13 do
2+
local size = 11 -- square size of farm
3-
    for j=1,12 do
3+
local woodSlot = 16 -- slot comparison wood is kept
4
local maxStack = 4 -- maximum number of items to keep in slots
5-
      turtle.dig()
5+
local sleepTimer = 300 -- time between farmings in seconds
6-
      turtle.digDown()
6+
local x,y,z = gps.locate(5) -- turtle position on startup
7-
      turtle.forward()
7+
local hx,hy,hz = 306, 49, 130 -- turtle home position
8
local debugMessages = true -- print debug messages
9-
    gimbal()
9+
local startTimer = 10 -- seconds to wait on startup before running
10
11
--debug print function
12
function db(mesg)
13
  if debugMessages then
14
    print(mesg)
15-
    turtle.turnRight()
15+
16-
    lastTurn=1
16+
17
18-
    turtle.turnLeft()
18+
--check where home log is and then face south
19-
    lastTurn=0
19+
function checkFacing()
20
  db("Checking facing")
21
  turtle.select(woodSlot)
22
  while not turtle.compare() do
23
    left()
24
  end
25
  db("Home log found")
26
  left()
27
end
28
29
function goHome()
30
  db("Going Home")
31
  x,y,z = gps.locate(5)
32
  db("hxyz="..hx..","..hy..","..hz)
33
  db(" xyz="..x..","..y..","..z)
34
  forward()
35
  nx,ny,nz = gps.locate(5)
36
  db("nxyz="..nx..","..ny..","..nz)
37
  --orient to west
38
  if nx > x then
39
    db("Looking east")
40
    left()
41
    left()
42
  elseif nz > z then
43
    db("Looking south")
44
    right()
45
  elseif nz < z then
46
    db("Looking north")
47
    left()
48
  end
49
  --go to home y level
50
  db("Going up")
51
  for i=1,hy-ny do
52
    up()
53
  end
54
  --go to home x position
55
  for i=1,nx-hx do
56
    forward()
57
  end
58
  right() --orient to north
59
  --go to home z position
60
  for i=1,nz-hz do
61
    forward()
62
  end
63
  --verify is home
64
  checkFacing()
65
end
66
67
function upperLayer()
68
  db("Running upperLayer")
69
  for i=1,size do
70
    for j=1,size-1 do
71
      forward()
72
      dig()
73
    end
74
    if i < size then
75
      gimbal()
76
    end
77
  end
78
  left()
79
  left()
80
  nextLayer()
81
end
82
83
function bottomLayer()
84
  db("Running bottomLayer")
85
  for i=1,size do
86
    for j=1,size-1 do
87
      forward()
88
      turtle.digUp()
89
      if turtle.compareDown() then
90
        plantSapling()
91
      end
92
    end
93
    if i < size then
94
      gimbal()
95
    end
96
  end
97
  dropExtras()
98
  --[[for i=1,6 do
99
    up()
100
  end
101
  right()
102
  for i=1,size-1 do
103
    forward()
104
    right()
105
    forward()
106
    left()
107
  end
108
  left()
109
  lastTurn = 1 ]]
110
  goHome()
111
end
112
113
-- turns the proper direction for next row
114
function gimbal()
115
  --db("Gimbaling")
116
  if lastTurn == 0 then
117
    right()
118
    forward()
119
    dig()
120
    right()
121
  else
122
    left()
123
    forward()
124
    dig()
125
    left()
126
  end
127
  lastTurn = math.abs(lastTurn-1)
128
  --db("Set lastTurn to "..lastTurn)
129
end
130
131
-- breaks the block below and places a random sapling
132
function plantSapling()
133
  db("Planting sapling")
134
  turtle.digDown()
135
  turtle.select(math.random(1,15))
136
  while turtle.placeDown() == false do 
137
    turtle.select(math.random(1,15))
138
  end
139
  turtle.select(woodSlot)
140
end
141
142
-- drops excess inventory
143
function dropExtras()
144
  db("dropping excess inventory")
145
  for i=1,16 do
146
    turtle.select(i)
147
    while turtle.getItemCount(i) > maxStack do
148
      turtle.dropDown(math.ceil(maxStack/4))
149
    end
150
  end
151
end
152
153
function nextLayer()
154
  db("Going down to next layer")
155
  for i=1,3 do
156
    down()
157
  end
158
end
159
160
function forward()
161
  turtle.dig()
162
  turtle.forward()
163
end
164
165
function down()
166
  turtle.digDown()
167
  turtle.down()
168
end
169
170
function up()
171
  turtle.digUp()
172
  turtle.up()
173
end
174
175
function dig()
176
  turtle.digUp()
177
  turtle.digDown()
178
end
179
180
function right()
181
  turtle.turnRight()
182
end
183
184
function left()
185
  turtle.turnLeft()
186
end
187
188
-- main program
189
db("Waiting "..startTimer.." seconds to start")
190
for i=startTimer,1,-1 do
191
  sleep(1)
192
  db(i)
193
end
194
-- checks if in home position then checks facing or goes home
195
if x==hx and y==hy and z==hz then
196
  checkFacing()
197
else
198
  goHome()
199
end
200
while true do
201
  print("Fuel level: "..turtle.getFuelLevel())
202
  turtle.select(woodSlot)
203
  for i=1,2 do
204
    upperLayer()
205
  end
206
  bottomLayer()
207
  db("Sleeping for "..sleepTimer.."s")
208
  for i=math.ceil(sleepTimer/30),1,-1 do
209
    db(i*30)
210
    sleep(30)
211
  end
212
end