IIR filter with circular buffer - Arduino
First of all :

have you initialized all the previous data to 0 ? The x and y buffer should be initialized to 0. Otherwise, you could get some unexplained transients at the beginning. Maybe this is the offset that you see at the beginning. Maybe the compiler will set the initial data in the data at 0, but you should not rely on the compiler, it should be explicitely reset to 0.

Secondly : I think you have mixed up the c and d coefficients. I think the d coefficients should be used with the output (y) and the c coefficients for the input (x). I say that because d[0] = 1 which makes me think that this the a0 coefficient.  Usually the a0 coefficient is 1 in an IIR. It can be different than 1, but usually we try to normalize the coefficients by setting a0 to 1. https://en.wikipedia.org/wiki/Infinite_impulse_response

Third : Have you tried the coefficients in Octave/Matlab/Python ? Use freqz or Bode in Octave/Matlab. Do you get the expected frequency response?

Finally : This is not related to the matter at hand, but I notice that you use the modulo function. The modulo function is slow unless you're using powers of 2. You should consider having a circular buffer with a size of 4 instead of 10. You don't need more since you only go 4 samples in the past.