2 el complemento solo funciona en una dirección con el LSM303DLHC

0

En java tengo el código

public void readAccel() 
{
  int l, h;

  l = i2c.read(0x28);
  h = i2c.read(0x29);

  int x = ((h) << 8) | (l);
  System.out.println(x);
}

en java. El acelerómetro que he conectado funciona y se comunica a través de i2c, el problema es que el número de complemento de los dos que se genera solo parece funcionar en una dirección; cuando giro el dispositivo hacia un lado, la escala de valores de 0-256, pero más allá de cero, el valor salta a 4096-3840. ¿Qué estoy haciendo mal?

    
pregunta AlexG

1 respuesta

1

¿Estás seguro de que salta a 4096 y no a 4095?

En cualquier caso, el problema es que no está convirtiendo correctamente el resultado de 12 bits al tipo nativo de Java int . Prueba esto:

int x = ((h) << 8) | (l);
if (x > 2047) {
    x = x - 4096;
}

Cualquier valor que tenga establecido el bit alto (bit 11) se convertirá correctamente en enteros negativos. 4095 se convierte en -1, 4094 se convierte en -2, etc.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas