Arduino nano crashes - please advise

Since your application is not trivial, it's hard to spot the bug. Perhaps is just a typo somewhere or there a more serious issue (in the firmware on even in the hardware, like others said). It's an AVR, there is no such a "crash" like an exception trap. On the worst case the MCU will reset.

I'd suggest to do the following:

  1. add in the main loop a Serial.print(".") every second, like:
static unsigned long timeRef = 0;
if (millis() - timeRef > 1000)
{
    Serial.print(".");
    timeRef = millis();
}

in this way you can easily detect (especially together hint #2) if your application is stuck somewhere else the main loop.

  1. comment out, one by one, the calls in the main loop and check which one (if any) leads to the unexpected behavior. When you find (hopefully!) the offending one, go deeper and do the same with the instructions inside.