In your start function, I'd consider user os.pullEvent directly, rather than read.
Eg:
while true do --#loop forever
local e, char = os.pullEvent( "char" ) --#wait for the user to press an alphanumeric / punctuation key
if char == "y" then --#if they pressed y
chestCheck()
break --#exit the loop here
elseif char == "n" then --#if they pressed n
mining()
break --#exit the loop here
end
--#if they didn't press y or n, the program will simply wait for another key to be pressed
end
Edit: Also, for getting numbers, there's a really nice repeat loop.
local n
repeat
print( "I need a number: " )
n = tonumber( read() )
until n
tonumber returns either a number (if possible) or nil (when not possible to get a number). The repeat loop waits until n is not nil. The print statement will keep bugging the user until they enter a valid number
Edit #2: You should really localize all your functions - it's good practice. It won't affect you much here, since the delay is negligible, but optimizing things like this is a good habit.