FFT no Matlab com dados vindo do Arduino

Estou desenvolvendo um analisador de vibrações com uso do acelerômetro ADXL 345, Arduino DUE e MatLab,

Venho tentando gerar um sinal senoidal no arduino e fazer uma FFT no Matlab com os dados obtidos.
Atualmente, tenho utilizado um código para gerar, então copio uma quantidade de dados da porta serial e coloco num .txt e o abro com o matlab. Mas a FFT está dando uma frequência incorreta.

Código no Matlab

load teste.txt
Fa=1000;
y=teste(:,1);
y=y-mean(y);
Y=fft(y);
Y=Y.*conj(Y);
%Y=abs(Y);
f=1:Fa/2;
f=f/max(f);
f=f*Fa/2;
plot(f,Y(1:length(f)))

Código no Arduino

float sinVal[3];
void setup() {
  Serial.begin(9600);
}
void loop() 
{
  for (int x = 0; x < 400; x++)
  {
    sinVal[0] = 20*sin(2 * 3.1415 *x *0.0025* 10); // convertegrausa radianos e obtém o valor do seno
    Serial.println(sinVal[0],4);
  
delay(10);
  }

Caso alguém possa me ajudar com este problema, e se possível, também com a possibilidade de leitura em tempo real.

Queres explicar o que está dentro da função seno?

sinVal[0] = 20*sin(2 * 3.1415 *x *0.0025* 10);

Pelo que sei, tu estás à procura de ter lá dentro algo como: 2pifT.
Como estás a multiplicar por 2
pi, a tua frequência deveria estar em Hertz... mas pelo que colocaste depois, acho que estarás a fazer alguma conversão.

Qual é a frequência que pretendes gerar? Digo isto porque tens de ter em atenção o teu tempo (ou seja, o parâmetro T)... se a frequência for alta e estiveres a calcular o estado da tua onda de segundo a segundo como estás a fazer agora, vais perder detalhe da onda.

Só para tirar de cima da mesa, viste se o Matlab está a ler o ficheiro TXT correctamente?

Por último, testaste o código do Matlab sem ser o Arduino a gerar os dados?

Leitura em tempo real é basicamente leres o sensor a uma frequência certa e enviares imediatamente.