11. EXT: Buttons and selection

11.1. Changing values with A and B-buttons

Use the A-button to increase a variable.
Use the B-button to decrease a variable.
In the code below, the delay_time variable is increased in steps of 10 by the A-button and decreased in steps of 10 by the B-button. Finally, text is scrolled with a delay of delay_time.
from microbit import *

delay_time = 80

while True:
    if button_a.is_pressed():
        delay_time += 10
    elif button_b.is_pressed():
        delay_time -= 10
    else:
        sleep(100)
    display.scroll("ABC", delay=delay_time)
The code above fails when the delay_time goes below 0.
The variable, delay_time, can be restricted to a set range of values using the min and max functions.
delay_time = min(400, delay_time + 10) prevents the delay_time from going above 400.
delay_time = max(50, delay_time - 10) prevents the delay_time from going below 50.
from microbit import *

delay_time = 80

while True:
    if button_a.is_pressed():
        delay_time = min(400, delay_time + 10)
    elif button_b.is_pressed():
        delay_time = max(50, delay_time - 10)
    else:
        sleep(100)
    display.scroll("ABC", delay=delay_time)

Tasks

  1. Edit the code to adjust the scroll delay in steps of 25.

  2. Write code to alter a guess_number variable in steps of 1 by the buttons. Use both buttons to set the number and show it. Start the number at 5 and limit it to a minimum of 1 and a maximum of 9.

Edit the code to adjust the scroll delay in steps of 25.

from microbit import *

delay_time = 80

while True:
    if button_a.is_pressed():
        delay_time += 25
    elif button_b.is_pressed():
        delay_time -= 25
    else:
        sleep(100)
    display.scroll("ABC", delay=delay_time)

Write code to alter a guess_number variable in steps of 1 by the buttons. Use both buttons to set the number and scroll it. Start the number at 5 and limit it to a minimum of 1 and a maximum of 9.

from microbit import *

guess_number = 5
while True:
    if button_a.is_pressed() and button_b.is_pressed():
        display.show(guess_number, delay=80)
        # now start again
        guess_number = 5
    if button_a.is_pressed():
        guess_number = min(9, guess_number + 1)
    elif button_b.is_pressed():
        guess_number = max(1, guess_number - 1)
    else:
        sleep(100)
    display.show(guess_number, delay=80)
    sleep(200)