forever

Keep running part of a program in the background.

basic.forever(() => {
})

You can have part of a program continuously by placing it in an forever loop. The forever loop will yield to the other code in your program though, allowing that code to have time to run when needs to.

Event-based loops

Both the forever loop and the every loop are event-based loops where the code inside is run as part of a function. These are different from the for and while loops. Those are loops are part of the programming language and can have break and continue statements in them. You can NOT use break or continue in either a forever loop or an every loop.

Examples

Example: compass

The following example constantly checks the compass heading and updates the screen with the direction.

let degrees = 0
basic.forever(() => {
    degrees = input.compassHeading()
    if (degrees < 45) {
        basic.showString("N")
    } else if (degrees < 135) {
        basic.showString("E")
    } else if (degrees < 225) {
        basic.showString("S")
    } else if (degrees < 315) {
        basic.showString("W")
    } else {
        basic.showString("N")
    }
})

Example: counter

The following example keeps showing the number stored in a global variable. When you press button A, the number gets bigger. You can use a program like this to count things with your Calliope mini.

let num = 0
basic.forever(() => {
    basic.showNumber(num)
})
input.onButtonEvent(Button.A, input.buttonEventClick(), () => {
    num = num + 1
})

Competing for the LED screen

If different parts of a program are each trying to show something on the LED screen at the same time, you may get unexpected results. Try this on your Calliope mini:

basic.forever(() => {
    basic.showNumber(6789)
})
input.onButtonEvent(Button.A, input.buttonEventClick(), () => {
    basic.showNumber(2)
})

See also

while, in background, every