The micro:bit has an onboard compass. This compass has to be calibrated the first time that it is used, so that the readings that it produces are accurate.
When you load a program into the micro:bit and your program tries to read from the compass, it will scroll the words TILT TO FILL SCREEN on the screen. Hold the micro:bit horizontally and tilt it on the spot trying to fill in the screen. After you have done this, your program will run.
The calibration routine runs in the background whilst the letters scroll across the screen, so it is possible to start tilting before the words finish scrolling. This speeds up the calibration routine.
Also, because the magnetometer is sensitive to magnetic fields, you should avoid attaching the micro:bit to any metal objects or rest it on a metal table, as this will affect both the calibration and the accuracy of the reading in normal use.
When flashing a hex from the MakeCode editor, the compass calibration is stored in memory, so next time you press the reset button or remove and replace the power to the micro:bit it will remember the calibration.
However, this memory is cleared when you flash a new program to your micro:bit, so you will have to re-calibrate it if you drag and drop a new program via USB. If you use direct flashing to update the micro:bit, you will only update the part of the program that changes, so you will not need to calibrate each time.
If you would like to initiate a calibration from your program, include the Calibrate Compass block
In the python.microbit.org and codewith.mu editors the compass calibration is not stored and you will have to perform the calibration procedure each time you reset or remove and replace the power to the micro:bit.
If you would like to initiate a calibration from your program include the code