Hola de nuevo.
He intentado aplicar las formulas trigonometricas en la funcion que hace que muestre por el display la aceleracion.
Estoy intentando capturar cada vez que pulso el boton B3,los valores de los 3 ejes,para luego guardarlos y poder trabajar con las reglas trigonometricas.
Estoy trabajando con un MSP430 en lenguaje C.
No consigo que capture bien las variables,para luego mostrarlas en el display una vez hemos pulsado las 3 veces.
Me podeis ayudar a encontrar el error,llevo ya un par de dias locos!
void sensor_test()
{
draw_array32_to_lcd(" ");
//Endlosschleife
int acc_x;
int acc_y;
int acc_z;
double acc_x_g;
double acc_y_g;
double acc_z_g;
char char_array[]=".01 1.23 4.56";
double ini_x = 0, end_x = 0, dif_x = 0;
double ini_y = 0, end_y = 0, dif_y = 0 ;
double ini_z = 0, end_z = 0, dif_z = 0;
double root_pitch = 0, root_roll = 0, root_theta = 0;
unsigned int status_reg_val = 0;
while(1)
{
status_reg_val = Sensor_RX(STATUS_REG);
if(status_reg_val && BIT3)
{
if(status_reg_val && BIT7)
{
acc_x = Acc_RX('x');
acc_y = Acc_RX('y');
acc_z = Acc_RX('z');
acc_x_g = (double)acc_x/ 1024;
acc_y_g = (double)acc_y/ 1024;
acc_z_g = (double)acc_z/ 1024;
}
}
// sprintf(char_array, "X:%1.4f Y:%1.4f Z:%1.4f
sprintf(char_array, "%1.4f %1.4f %1.4f ", acc_x_g, acc_y_g, acc_z_g);
draw_array32_to_lcd(char_array);
// write_value_to_display('x', DD_RAM_ADDR, acc_z);
// write_value_to_display('y', DD_RAM_ADDR, acc_y);
// write_value_to_display('z', DD_RAM_ADDR, acc_x);
for(i=0; i<4;i++) Delayx100us(250);//.
//----------BUTTON 1
if ((B1) == 0 && b1_flag == 0) //if B1 pressed
{
b1_flag = 1;
}
if ((B1) != 0 && b1_flag != 0) //if B1 released
{
b1_flag = 0;
return;
}
//----------BUTTON 3
if ((B3) == 0 && b3_flag==0) //if B3 is pressed
{
b3_flag = 1;
}
if ((B3) != 0 && b3_flag != 0) //if B3 is released
{
b3_flag = 0;
ini_x=acc_x_g;
ini_y=acc_y_g;
ini_z=acc_z_g;
}
if ((B3) == 0 && b3_flag==0) //if B3 is pressed
{
b3_flag = 1;
}
if ((B3) != 0 && b3_flag != 0) //if B3 is released
{
b3_flag = 0;
end_x=acc_x_g;
end_y=acc_y_g;
end_z=acc_z_g;
dif_x=end_x - ini_x;
dif_y=end_y - ini_y;
dif_z=end_z - ini_z;
root_pitch = sqrt ((dif_y*dif_y)+(dif_z*dif_z));
root_roll = sqrt ((dif_x*dif_x)+(dif_z*dif_z));
root_theta = sqrt ((dif_y*dif_y)+(dif_x*dif_x));
}
if ((B3) == 0 && b3_flag==0) //if B3 show results
{
b3_flag = 1;
}
if ((B3) != 0 && b3_flag != 0) //if B3 is released
{
b3_flag = 0;
sprintf(char_array,"atan2( %f, %f ) = %f\n", dif_x, root_pitch, atan2(ini_x,root_pitch));
draw_array32_to_lcd(char_array);
sprintf(char_array,"atan2( %f, %f ) = %f\n", dif_x, root_roll, atan2(end_x,root_roll));
draw_array32_to_lcd(char_array);
sprintf(char_array,"atan2( %f, %f ) = %f\n", root_theta, dif_z, atan2(root_theta,dif_z));
draw_array32_to_lcd(char_array);
}
}
};