Problema con variables de tipo char doble y sin signo

1

Estoy probando el código en esta hoja de datos en un Arduino mega2560 con mpu6050 IMU ,

He hecho algunos cambios en las variables y hasta ahora no recibo errores. y el código no da ningún resultado, ¿puede alguien mostrarme un lugar con código incorrecto?

Tengo el rango de mpu6050 accX y accy -2 ^ 15 a + 2 ^ 15. No publico código para mpu6050 ya que funciona. Necesito imprimir en serie y ver cómo cambia el desplazamiento en este código. en la función positionxy () quería imprimir

 Sample_X =  (unsigned char)accX/129;
 Sample_Y =  (unsigned char)accY/129;     
 Serial.print ( Sample_X );  Serial.print ("\t"); 
 Serial.println ( Sample_Y ); Serial.print ("\t"); 

y no da nada, Creo que el problema es con los tipos de variables y no puedo resolverlo. La parte del código de la siguiente manera,

//all varibles 
double accX, accY, accZ;
unsigned char  Sample_X;
unsigned char  Sample_Y;
unsigned char  Sample_Z;
unsigned char  Sensor_Data[8];
unsigned char  countx,county ;
signed int  accelerationx[2], accelerationy[2];
signed long  velocityx[2], velocityy[2];
signed long  positionX[2];
signed long  positionY[2];
signed long  positionZ[2]; 
unsigned char  directionxy;
unsigned long  sstatex,sstatey;


void setup(){
 *****mpu 6050 config is done here and works aacX and accY updates with 
 current accelration value  *****
}
void loop(){
do{
Calibrate();
movement_end_check();
positionxy();  
}while(1);
}

void Calibrate() 
{
************see datasheet **********   
}


void positionxy()  
{
unsigned char count2 ;
count2=0;

do{
Sample_X =  (unsigned char)accX/129; // this line is changed 
Sample_Y =  (unsigned char)accY/129; // this line is changed 

debajo de la impresión en serie siempre da cero

Serial.print ( Sample_X );  Serial.print ("\t"); 
Serial.println ( Sample_Y ); Serial.print ("\t"); 

accelerationx[1]=accelerationx[1] + Sample_X;  
accelerationy[1]=accelerationy[1] + Sample_Y;  


************see datasheet **********   
}
movement_end_check(){
************see datasheet **********   

}
    
pregunta oppo

1 respuesta

4

La conversión a caracteres sin signo tiene prioridad sobre la división. Así que primero se convierte y luego se divide. Use paréntesis para anular:

Sample_X = (unsigned char) (accX / 129)

    
respondido por el Szidor

Lea otras preguntas en las etiquetas