2012-09-13 55 views
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值255Java字節/位的麻煩

但在輸出我看到:

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毫秒。

我做錯了什麼?

+2

什麼是你的問題? –

+0

23857和-13346不在-255 +255組中。我做錯了什麼? – JohnDow

+0

您是否想將一個2字節值放入'[-255 .. + 255]範圍?你檢查過'sensor_buffer'內容嗎? –

回答

1

您正在取兩個字節(8位)值,並創建一個「short」(16位)值。一個16位有符號的值可以從-32768到32767.你可以得到一個介於-255到255之間的值的唯一方法是無論程序發送哪個數據發送正確的位。

0

這將重建兩個8位值中的一個16位值。雖然16bit會給你超過[-255,255]。根據你的性別,你將不得不交換ub1ub2gyro_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
  • 等?