Found 
this: 
https://trandi.wordpress.com/2011/08/07/android-ioio-wii-motion-plus-gyros/

If I get my version running with the L3G4200D using that link as a 
reference I'll can share that as well.


On Wednesday, June 4, 2014 4:50:17 AM UTC-7, Brad E wrote:
>
> Same problem for me. :( 
>
> Anyone know of any code / can share any experience successfully reading a 
> L3G4200D on Android ?
>
> On Sunday, September 8, 2013 12:47:15 PM UTC-7, Jorge Sánchez Briantes 
> wrote:
>>
>> Hello. I have a 10DOF IMU connected to IOIO with I2C:
>>
>> TwiMaster twi = ioio_.openTwiMaster(1, TwiMaster.Rate.RATE_1MHz, false);.
>>
>>
>> The GY-80 Inertial Measurement Unit contains the following sensors:
>> I2C Address 0x69 is the L3G4200D - 3axis 16bit gyro with ±250, 500, 
>> 2000°/sec ranges
>> I2C Address 0x53 is the ADXL345 - 3 axis 10-13bit Accelerometer with ±2g, 
>> 4g, 8g, 16g ranges
>> I2C Address 0x1E is the HMC5883L - 3 Axis, 12bit Magnetometer with ±0.88, 
>> 1.3, 1.9, 2.5, 4.0, 4.7, 5.6, 8.1 gauss ranges
>> I2C Address 0x77 is the BMP085 - 300-1100hPa Barometer (16-19bits) + 
>> Temperature (16bits)
>>
>> I receive data from all sensor but I only BMP085 is working good 
>> (temperature and presure).
>> All other sensor sends me data but I only properly interpret BMP085.
>> I read about thouse sensor and examples for arduino in bildr pages: 
>> http://bildr.org/2011/06/l3g4200d-arduino/
>> This is my code for the other (simplified):
>>
>> ...
>>
>> // Initialization
>>
>> byte whatever[] = new byte[3];
>>
>> //ADXL345 3-AXIS DIGITAL ACCELEROMETER 
>>
>> boolean success = twi.writeRead(0x53, false, new byte[] {0x2D,0x08}, 
>> 2, whatever, 0);
>>
>> success = twi.writeRead(0x53, false, new byte[] {0x31,0x08}, 2, whatever, 
>> 0);
>>
>> Thread.sleep(1);
>>
>> //HMC5883L 3-AXIS DIGITAL COMPASS 
>>
>> success = twi.writeRead(0x1E, false, new byte[] {0x02,0x00}, 2, whatever, 
>> 0); 
>>
>> Thread.sleep(5);
>>
>>
>> // L3G4200D
>>
>> // Enable x, y, z and turn off power down:
>>
>> success = twi.writeRead(L3G4200D_Address, false, new byte[] {0x20,0x0F}, 
>> 2, whatever, 0);
>>
>> success = twi.writeRead(L3G4200D_Address, false, new byte[] {0x21,0x00}, 
>> 2, whatever, 0); 
>>
>> success = twi.writeRead(L3G4200D_Address, false, new byte[] {0x22,0x00}, 
>> 2, whatever, 0);  
>>
>> success = twi.writeRead(L3G4200D_Address, false, new byte[] {0x23,0x00}, 
>> 2, whatever, 0);
>>
>> success = twi.writeRead(L3G4200D_Address, false, new byte[] {0x24,0x00}, 
>> 2, whatever, 0);
>>
>> ...
>>
>>
>> After this. Read data on the loop:
>>
>> // accelerometer samples
>>
>> byte [] acc = new byte [6];  
>>
>> boolean success2 = twi.writeRead(0x53, false, new byte[]{0x32}, 1, acc, 
>> 6); 
>>
>> int dataX = (acc[0]) + ((acc[1]) << 8);
>>
>> int dataY = (acc[2]) + ((acc[3]) << 8);
>>
>> int dataZ = (acc[4]) + ((acc[5]) << 8);
>>
>>
>> label1.setText("Acel X:"+String.valueOf(dataX)+" 
>> "+Integer.toHexString(dataX)+" "+Integer.toHexString(acc[0])+" 
>> "+Integer.toHexString(acc[1]));
>>
>> label2.setText("Acel Y:"+String.valueOf(dataY)+" 
>> "+Integer.toHexString(dataY)+" "+Integer.toHexString(acc[2])+" 
>> "+Integer.toHexString(acc[3]));
>>
>> label3.setText("Acel Z:"+String.valueOf(dataZ)+" 
>> "+Integer.toHexString(dataZ)+" "+Integer.toHexString(acc[4])+" 
>> "+Integer.toHexString(acc[5]));
>>
>>
>> Thread.sleep(5);
>>
>>
>> // digital compass
>>
>> success2 = twi.writeRead(0x1E, false, new byte[]{0x03}, 1, acc, 6); 
>>
>> dataX = (acc[0]) + ((acc[1]) << 8);
>>
>> dataY = (acc[2]) + ((acc[3]) << 8);
>>
>> dataZ = (acc[4]) + ((acc[5]) << 8);
>>
>> label4.setText("Mag X:"+String.valueOf(dataX));
>>
>> label5.setText("Mag Y:"+String.valueOf(dataY));
>>
>> label6.setText("Mag Z:"+String.valueOf(dataZ));
>>
>>
>> // Calculate heading when the magnetometer is level, then correct for 
>> signs of axis.
>>
>> double heading = Math.atan2(dataY, dataX);
>>
>> double declinationAngle = -0.0301;
>>
>> heading += declinationAngle;
>>
>>  
>>
>> // Correct for when signs are reversed.
>>
>> if(heading < 0)
>>
>>   heading += 2*Math.PI;
>>
>>   
>>
>> // Check for wrap due to addition of declination.
>>
>> if(heading > 2*Math.PI)
>>
>>   heading -= 2*Math.PI;
>>
>> // Convert radians to degrees for readability.
>>
>> double headingDegrees = heading * 180/Math.PI;  
>>
>>
>> label4.setText(label4.getText().toString()+ "  HDG: 
>> "+String.valueOf(headingDegrees));
>>
>> Thread.sleep(5);
>>
>>
>> // gyro
>>
>> byte [] xMSB = new byte [1]; 
>>
>> byte [] xLSB = new byte [1];
>>
>> success2 = twi.writeRead(L3G4200D_Address, false, new byte[]{0x29}, 1, 
>> xMSB, 1); 
>>
>> success2 = twi.writeRead(L3G4200D_Address, false, new byte[]{0x28}, 1, 
>> xLSB, 1);
>>
>> dataX = xLSB[0] + ((xMSB[0]) << 8);
>>
>>
>> success2 = twi.writeRead(L3G4200D_Address, false, new byte[]{0x2B}, 1, 
>> xMSB, 1); 
>>
>> success2 = twi.writeRead(L3G4200D_Address, false, new byte[]{0x2A}, 1, 
>> xLSB, 1);
>>
>> dataY = xLSB[0] + ((xMSB[0]) << 8);
>>
>>
>> success2 = twi.writeRead(L3G4200D_Address, false, new byte[]{0x2D}, 1, 
>> xMSB, 1); 
>>
>> success2 = twi.writeRead(L3G4200D_Address, false, new byte[]{0x2C}, 1, 
>> xLSB, 1);
>>
>> dataZ = xLSB[0] + ((xMSB[0]) << 8);
>>
>>
>> label11.setText("Gyro X:"+String.valueOf(dataX));
>>
>> label12.setText("Gyro Y:"+String.valueOf(dataY));
>>
>> label13.setText("Gyro Z:"+String.valueOf(dataZ));
>>
>>
>> As I said, the problems is I think the receive data isn't correct.
>> I know It isn't a IOIO problem, but I haven't found examples for IOIO 
>> using this sensor.
>> I was wondering If someone has used some of this sensor and could share 
>> his code with us, or someone could help me about get correct values.
>>
>> Thanks in advance.
>>
>

-- 
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/d/optout.

Reply via email to