Arduino Uno Strucks Randomly

sendBTOutput() is the last item in loop(), not at the start.

It's good to see you have some Serial.print statements. What do you see in the serial monitor?

You may need to add more to see which functions are being called.

You will need to provide lots of that information as not many people will have the hardware or libraries to test your project on their own.

I'm not sure you can declare btDataStartMillis like this

unsigned long btDataStartMillis = millis();

I would declare btDataStartMillis as a global, and in setup() execute the assignment btDataStartMillis = millis();. I know that will work.