Analog input pins cross-talking while using piezo buzzers as sensors

majenko:
What most people thing of as "crosstalk" is actually the S&H buffer of the ADC not emptying properly between sampling subsequent inputs.

Remember - the Arduino only has one ADC, and it switches the input that is routed to it.

When reading from more than one ADC channel you should always read one dummy result and throw it away after changing from one channel to another. Yes, it's a little slower, but it makes for better readings.

To put concrete figures in here, the internal ADC sample and hold circuitry can be modelled as some series resistance (value between 1k and 100k) leading to a sample/hold capacitor of 14pF. If driving from a resistive source 10k is the recommended max input impedance (this will have negligable affect on capacitor charge time, in fact 50k or so ought to work fine). If from a capacitive source (like a piezo transducer you need to have about 1000 times the drive capacitance to get 10bit accuracy, meaning 14nF. For cross talk of less than 1% between successive readings would mean needing 1.4nF or more (if I've got my maths right). Piezo transducers are highly capacitive, I've just measured one of mine as 46nF.

That would suggest that for directly connected piezo sensors this won't be an issue.