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.