Help with Design: Using processor time efficiently when dealing with serial

It might be worth breaking your project up into multiple chips. For e.g., reading 1-wire digital thermometer ICs is a blocking event, so your code stops running while that's happening. It's long enough to make the UI feel sluggish and unresponsive.

You could use an ATtiny or something to poll your sensor and send the temp back to your main controller. The rest of what you want to do is all fairly cooperative. For instance, serial I/O takes some time, but not that much. You're not going to miss the (less than a) millisecond it takes to transfer some data over serial before a touch is registered. Your PID routine probably won't miss the stolen ticks either.

Some code is forgiving of being interrupted, some isn't. If you do schedule events on interrupts, make sure your ISR doesn't affect critical timing loops or change the contents of any variables or ports that might need to be consistent during some other unrelated operation that could be happening concurrently.