Rieccomi qua dopo anni di latitanza... :o
I progetti sono andati avanti arduino mi ha accompagnato passo passo....e fortunatamente ho trovato risposte ai problemi senza dover rompere alla gente qui sul forum...oggi però sono bloccato e non trovo la soluzione...
Ho un accelerometro/giroscopio collegato ad Arduino, tramite i2c ed invio i valori letti tramit seriale a Matlab con il seguente codice
void loop()
{
if(Serial.available())
{
cmd = Serial.read();
if(cmd == 'r')
{
while(1)
{
accelgyro.read();
//acc
raw_values[0] = accelgyro.a.x;
raw_values[1] = accelgyro.a.y;
raw_values[2] = accelgyro.a.z;
//gyro
raw_values[3] = accelgyro.g.x;
raw_values[4] = accelgyro.g.y;
raw_values[5] = accelgyro.g.z;
Serial.write (115);
for (j=0; j<6; j++)
{
Serial.write (highByte(raw_values[j]));
Serial.write (lowByte(raw_values[j]));
}
delay(2);
}
}
}
Arduino sta in attesa di un carattere 'r', una volta ricevuto entra in loop ed invia i dati tramite seriale, come bytes. Da matlab si leggono i valori così:
Arduino = serial('COM6','BaudRate',115200);
fopen(Arduino);
flushinput(Arduino)
acqSize = 1000;
pause(2)
'start'
fwrite(Arduino,'r');
tStart = tic;
while( i <=acqSize)
if(Arduino.BytesAvailable>packetSize-1)
lastData = fread(Arduino,packetSize) ;
raw_matrix(:,i) = byteToInt(lastData);
raw_matrix(7,i) = toc(tStart);
tStart = tic;
i=i+1
end
pause(0.001);
end
dove packet size è 20, e la funzione byteToInt cerca il byte 115 nel paccketto di 20 byte, e poi prende i successivi 12 bytes e tira fuori 6 interi
il problema è che ho ciclicamente un tempo di lettura esagerato, come si vede dalla figura allegata.
Non capisco come mai....potrebbe essere un problema di buffer?
grazie mille
