Made signal read, zero-crossing detection, and output signal asynchronous to correct for "plateaus" in the output signal from LCD updates tying up the processor for ~0.2 seconds at a time.