Uno R3 + 20x4 I2C LCD - screen freezes / garbage

This is a pretty large project. Very few will have the time (and hardware you have) to look through and test your code. I'm just going to try my best before reading all your code:

  1. When your code was less complex, say weeks ago, did the screen freeze up at all, freeze up less often etc?
  2. About the 800 bytes of free memory, where in the code did you get that number? Sometimes when you make very deep function calls with long list of parameters, your stack fills up quickly so it is more accurate to look at free memory in the deepest possible function call.