Hi Ytai I am using IOIO V2 to read MPU9150, a 9DOF motion sensor: https://www.sparkfun.com/products/11486
The problem I encountered is that I can not read out the register by I2C. I modified the code base on https://github.com/twyatt/ioio-adxl345, from SPI to I2C, it works for ADXL345 I list down the code: ////////////////////////////////////code from here//////////////////////////////////////////////// *public* *byte* getDeviceId() *throws* ConnectionLostException, InterruptedException { read(*WHO_AM_I*, 1, readBuffer); *return* readBuffer[0]; } *private* *void* setupDevice() *throws* InterruptedException, ConnectionLostException { write(*PWR_MGMT_1*, (*byte*) 0x80); // reset Thread.*sleep*(*REGISTER_WRITE_DELAY*); write(*PWR_MGMT_1*, (*byte*) 0x00); Thread.*sleep*(*REGISTER_WRITE_DELAY*); read(*WHO_AM_I*, 1, readBuffer); System.*out*.println("device ID is "+readBuffer[0]); *byte* id = readBuffer[0]; Thread.*sleep*(*REGISTER_WRITE_DELAY*); /* write(SMPLRT_DIV, (byte) 0x00); Thread.sleep(REGISTER_WRITE_DELAY); read(SMPLRT_DIV, 1, readBuffer); Thread.sleep(REGISTER_WRITE_DELAY); System.out.println("The first SMPLRT_DIV is "+readBuffer[0]); */ write(*SMPLRT_DIV*, (*byte*) 0x07); // *Gyro* sample rate, 0x07=125Hz Thread.*sleep*(*REGISTER_WRITE_DELAY*); read(*SMPLRT_DIV*, 1, readBuffer); Thread.*sleep*(*REGISTER_WRITE_DELAY*); System.*out*.println("The second SMPLRT_DIV is "+readBuffer[0]); write(*CONFIG*, (*byte*) 0x06); //0x06=5Hz Thread.*sleep*(*REGISTER_WRITE_DELAY*); write(*GYRO_CONFIG*, (*byte*) 0x18); //2000degree/s Thread.*sleep*(*REGISTER_WRITE_DELAY*); write(*ACCEL_CONFIG*, (*byte*) 0x01); // 2G, 5Hz Thread.*sleep*(*REGISTER_WRITE_DELAY*); *if* (id == *WHO_AM_I_default*) { deviceId = id; System.*out*.println("afjskldfjklasdjfklasfjaklsdfjsdklf The id is "+id); } *else* { onError("Invalid device ID, expected " + (*WHO_AM_I_default* & 0xFF) + " but got " + (id & 0xFF)); System.*out*.println("afjskldfjklasdjfklasfjaklsdfjsdklf The id is wrong " +id); } *if* (listener != *null*) { listener.onDeviceId(deviceId); } //setRange(2); // +/- 16 G } *protected* *void* write(*byte* register, *byte* value) *throws*ConnectionLostException, InterruptedException { writeBuffer[0] = register; writeBuffer[1] = value; flush(2); } *protected* *void* write(*byte* register, *byte*[] values) *throws*ConnectionLostException, InterruptedException { writeBuffer[0] = register; System.*arraycopy*(values, 0, writeBuffer, 1, values.length); flush(1 + values.length); } /** * Writes the write buffer to the I2C. * * *@param* length Number of bytes of the buffer to write. * *@throws* ConnectionLostException * *@throws* InterruptedException */ *protected* *void* flush(*int* length) *throws* ConnectionLostException, InterruptedException { *boolean* tenBitAddr = *false*; *int* readSize = 0; i2c.writeRead(*ADDRESS_AD0_LOW*, tenBitAddr, writeBuffer, length, readBuffer, readSize); *if* (*REGISTER_WRITE_DELAY* > 0) Thread.*sleep*(*REGISTER_WRITE_DELAY*); } *protected* *void* read(*byte* register, *int* length, *byte*[] values) *throws* ConnectionLostException, InterruptedException { *boolean* tenBitAddr = *false*; writeBuffer[0] = register; i2c.writeRead(*ADDRESS_AD0_LOW*, tenBitAddr, writeBuffer, 1, readBuffer, length); } *private* *void* onError(String message) { *if* (listener != *null*) { listener.onError(message); } } /* * IOIOLooper interface methods. */ @Override *public* *void* setup(IOIO ioio) *throws* ConnectionLostException, InterruptedException { i2c = ioio.openTwiMaster(twiNum, rate, *false* /* *smbus* */); setupDevice(); } @Override *public* *void* loop() *throws* ConnectionLostException, InterruptedException { *if* (listener != *null*) { read(*GYRO_XOUT_H*, 6, readBuffer); x = (readBuffer[0] << 8) | readBuffer[1]; y = (readBuffer[2] << 8) | readBuffer[3]; z = (readBuffer[4] << 8) | readBuffer[5]; listener.onData(x, y, z); } } -- You received this message because you are subscribed to the Google Groups "ioio-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/ioio-users. For more options, visit https://groups.google.com/groups/opt_out.
