Storing calibration tables on an SD card

This declares an array of zero length:

float responseArray[] = {};

Which explains your point two. It also explains point one - you're stepping on memory that's being used for other things and when other code writes on them too, your results are lost. Try:

float responseArray[30];