pxt-calliope/docs/reference/basic/forever.md
Juri Wolf 5f7a8e5301
Updates for V4 (#197)
* update yotta defaults for 16kb devices

* refactor deprecated blocks

* updates for button events

* update button events

* update refference

* update docs

* update docs

* update button event blocks

* update docs

* update block id
2022-08-10 09:36:19 -07:00

2.3 KiB

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.

~ reminder

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 @boardname@.

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 @boardname@:

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

See also

while, in background, every