Bien. Vamos por partes.
En primer lugar, al final del código puse el de la funciónn freeRam. Intenta hacer un seguimiento de la memoria libre, a ver si es muy escasa o va reduciéndose en cada ciclo.
En segundo lugar, vamos a intentar aislar el problema. Vamos a sacar del código la impresión en papel, dejando sólo la parte de la pantalla, a ver si se atasca la ejecución o no. Si no se atasca, podremos achacar el problema a la impresora. Si se sigue atascando, tal vez el problema venga por la SD.