Create Compass app in Sketchware

 To create a Compass app in Sketchware, follow the steps given below.

1. In View area add an ImageView imageview1. Set image of a Compass as it's image. Make sure that North is towards the top.


2. Create a Gyroscope component gyro and another Gyroscope component gyroMagnet.


3. Create a More block extra and put following code in it.

}

private float[] floatGravity = new float[3];

private float[] floatGeoMagnetic = new float[3];

private float[] floatOrientation = new float[3];

private float[] floatRotationMatrix = new float[9];

{


4. In onCreate event use blocks

Gyroscope gyro sensor stop,

and Gyroscope gyroMagnet sensor stop.

After that put following code in an add source directly block:

gyro.registerListener(_gyro_sensor_listener, gyro.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);

gyro.registerListener(_gyroMagnet_sensor_listener, gyro.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),SensorManager.SENSOR_DELAY_NORMAL);



5. In onPause event use blocks

Gyroscope gyro sensor stop,

and Gyroscope gyroMagnet sensor stop.


6. In onResume event put following code in an add source directly block:

gyro.registerListener(_gyro_sensor_listener, gyro.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);

gyro.registerListener(_gyroMagnet_sensor_listener, gyro.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),SensorManager.SENSOR_DELAY_NORMAL);


7. In gyro: onSensorChanged event use an add source directly block and put following code:

floatGravity = _param1.values;

SensorManager.getRotationMatrix(floatRotationMatrix, null, floatGravity, floatGeoMagnetic);

SensorManager.getOrientation(floatRotationMatrix, floatOrientation);

imageview1.setRotation((float) (-floatOrientation[0]*180/3.14159265359));



8. In gyroMagnet: onSensorChanged event use an add source directly block and put following code:

floatGeoMagnetic = _param1.values;

SensorManager.getRotationMatrix(floatRotationMatrix, null, floatGravity, floatGeoMagnetic);

SensorManager.getOrientation(floatRotationMatrix, floatOrientation);

imageview1.setRotation((float) (-floatOrientation[0]*180/3.14159265359));



9. Save and run the project. You will see the top of image rotate to the North direction.