- Home /
Rotating object based on USB Tilt Sensor
I'm trying to rotate an object based on an object with a tilt sensor connected via USB.
The accelerometer outputs a signed 16 bits for x,y,z, which I then convert to an angle.
fAngleX = (float) (atan2(nAccelY, nAccelZ)+M_PI)*RAD_TO_DEG;
fAngleY = (float) (atan2(nAccelZ, nAccelX)+M_PI)*RAD_TO_DEG;
I've searched and tried different ways of doing it*, but the object (.STEP) never rotates consistently, instead it quickly jumps all over the place as I rotate the device. As a test, I drew it in Processing and superman tracks the physical object fine.
Maybe its better to use the raw value (not my computed angle) but not sure how else to do it.
*
float Angle = 30f;
vector3 Axis = vector3.cross(MoveDirection.normalized, PlayerShip.transform.up);
Playership.transform.Rotate(Axis, Angle);
myTransform.rotation = Quaternion.Slerp(myTransform.rotation, targetRotation, slerpSpeedValue);
and
*
dir.y = Input.acceleration.y;
if (dir.y > .2)
transform.Rotate(Vector3.up * (-rotSpeed * Time.deltaTime), Space.World);
else if (dir.y < -.2)
transform.Rotate(Vector3.up * (rotSpeed * Time.deltaTime), Space.World);
and
*
accel = Vector3.Lerp(accel, Input.acceleration, filter * Time.deltaTime); // smooth filter
var dir = Vector3(-accel.y, accel.x, 0); // map accel -Y and X to game X and Y directions
if (dir.sqrMagnitude > 1) dir.Normalize(); // limit dir vector to magnitude 1
transform.Translate(dir * speed * Time.deltaTime); // move the object at the velocity defined in speed
h = Input.GetAxis("Horizontal")*multiplier;
v = Input.GetAxis("Vertical")*multiplier;
transform.rotation = Quaternion.EulerAngles(new Vector3(h,0f,v));
Your answer
Follow this Question
Related Questions
Moving object with tilting the device. 1 Answer
Using accelerometer-tilt to control a flying orb 2 Answers
Rotate object with accelerometer? 0 Answers
roll ball in two axis using devices accelerometer. 1 Answer
tilt not working 0 Answers