0
import jssc.SerialPort;
import jssc.SerialPortException;
import org.jfree.ui.RefineryUtilities;

public class Main {

  public static int gyro_out_X, gyro_out_Y, gyro_out_Z, acc_out_X, acc_out_Y, acc_out_Z, adc_pressure, HMC_xo, HMC_yo, HMC_zo;

  public static void main(String[] args) {
    //In the constructor pass the name of the port with which we work
    SerialPort serialPort = new SerialPort("COM4");
    try {

        //Open port
        serialPort.openPort();
        //We expose the settings. You can also use this line - serialPort.setParams(9600, 8, 1, 0);
        serialPort.setParams(SerialPort.BAUDRATE_115200,
                SerialPort.DATABITS_8,
                SerialPort.STOPBITS_1,
                SerialPort.PARITY_NONE);
        while (1 == 1) {

            byte[] sensor_buffer = serialPort.readBytes(21);
            gyro_out_X = ((sensor_buffer[1] << 8) + sensor_buffer[2]);
            gyro_out_Y = ((sensor_buffer[3] << 8) + sensor_buffer[4]);
            gyro_out_Z = ((sensor_buffer[5] << 8) + sensor_buffer[6]);
            acc_out_X = ((sensor_buffer[7] << 8) + sensor_buffer[8]);
            acc_out_Y = ((sensor_buffer[9] << 8) + sensor_buffer[10]);
            acc_out_Z = ((sensor_buffer[11] << 8) + sensor_buffer[12]);
            HMC_xo = ((sensor_buffer[13] << 8) + sensor_buffer[14]);
            HMC_yo = ((sensor_buffer[15] << 8) + sensor_buffer[16]);
            HMC_zo = ((sensor_buffer[17] << 8) + sensor_buffer[18]);

            System.out.println("gyro_out_X: " + gyro_out_X );

            //Closing the port
            //  serialPort.closePort();
        }
    } catch (SerialPortException ex) {
        System.out.println(ex);
    }
  }
}

OK、この構成では、21バイトのコードを読み取り、1バイトは<< 8ビットになり、次に別のバイトを加えて、-255から255までの値を取得します。

しかし、出力には次のように表示されます。

 gyro_out_X: 14556
 gyro_out_X: 23857
 gyro_out_X: -15234
 gyro_out_X: -255
 gyro_out_X: 23295
 gyro_out_X: -13346
 gyro_out_X: -255
 gyro_out_X: 30813
 gyro_out_X: 12506
 gyro_out_X: -255
 gyro_out_X: 5104
 gyro_out_X: -10220
 gyro_out_X: 23807
 gyro_out_X: 5246
 gyro_out_X: -463
 gyro_out_X: -27536
 gyro_out_X: -511
 gyro_out_X: -8640
 gyro_out_X: 4306
 gyro_out_X: 16448
 gyro_out_X: 21075
 gyro_out_X: 16450
 gyro_out_X: 220
 gyro_out_X: 16448

データは10ミリ秒ごとに送信されます。

私は何を間違えますか?

4

2 に答える 2

1

2バイト(8ビット)の値を取得し、「短い」(16ビット)値を作成します。16ビットの符号付き値は-32768〜32767です。-255〜255の値を取得できる唯一の方法は、データを送信するプログラムが正しいビットを送信することです。

于 2012-09-13T10:18:57.643 に答える
0

これにより、2つの8ビット値から16ビット値が再構築されます。16ビットは[-255,255]以上を提供しますが。あなたの終わりに応じて、あなたは交換しなければならないでしょうub1そしてub2gyro_out_x = (ub1 << 8) + ub1;)。

int ub1 = outByte[1] & 0xFF;
int ub2 = outByte[2] & 0xFF;
gyro_out_x = (ub2 << 8) + ub1;

また、値がoutByte [1]で始まることを確認しますか?このようではありませんか:

  • outByte[0]およびoutByte[1]->gyro_out_x
  • outByte[2]およびoutByte[3]->gyro_out_y
  • 等?
于 2012-09-13T10:22:12.740 に答える