Micro:bit timer and stopwatch

microbit timer and stopwatch

Timer and stopwatch

Every computer and microcontroller has a built-in clock. This clock is important because it is used to synchronize operations and data transmission. Computers have a built-in rechargeable battery that keeps a clock going when the computer is not powered. This clock is used to keep track of the date and regular time according you your timezone.

Each computer also has an internal timer that begins when the computer starts. The Micro:bit has an internal timer that begins when it is powered or restarted. The timer keeps track of events and coordinates the synchronization of operations and data transfer.

This lesson will use the internal timer to create a basic stopwatch program. The program in this lesson is based on the code provided by Micro:bit to learn the fundamentals. I’ve taken it and expanded on the explanations. The link to the Make Code micro:bit lesson is available below.

https://makecode.microbit.org/projects/stopwatch

Project previews

Use the links below to get a preview of the final project.

StopWatch Make Code:
https://makecode.microbit.org/_PuY8zVbzuXDd

StopWatch Github:
https://github.com/digitalmaestro/stopwatch

Stopwatch

Use the link below to access the Micro:bit development environment. You don’t need an account to begin creating projects for Micro:bit.

https://makecode.microbit.org

Click the Create new project button.

new project button

Use “stopWatch” for the project name; click the Create button.

project name

Every new project includes two code blocks on the coding workspace. These blocks include the [on start] section and [forever] loop.

default code blocks on start and forever

The [on start] section is used to run code as soon as the Micro:bit starts or is restarted. This is where we usually define variables. We will use plenty of variables in our project.

The [forever] loop runs code for as long as the Micro:bit is powered. Code inside this loop does not require any user interaction. We won’t be using the [forever] loop in this project.

Get the [forever] code block and drag it to the Codes Section. Release the code block when a Trash Can icon appears.

removing forever block

Go to the input section; find the [on button A pressed] code block.

Input code category selected

Place a copy of the code block on the workspace.

on button a pressed code added

The internal timer begins the moment the Micro:bit starts. There is no way to reset the timer once the Micro:bit has started. We need to capture a moment from the internal timer and save it for use later. That moment will be saved in a variable.

Go to the Variables section; click the ‘Make a Variable’ button.

make a variable button

Use ‘Start’ for the variable name; click the OK button.

variable name

Three blocks are created for each variable. The first block is the variable itself. The Set block is used to assign values to the variable. The values can be numbers, letters, or operations. The Change code block is used to change variables with numbers with some regular amount.

variable code blocks

Place the [set Start to] code block into the [on button A pressed] function.

set variable code block added

Select the Input code category and click the more option.

more option in input category selected

There are two runtime code options. One records time in milliseconds(ms), and the other in microseconds(micros). There are one-thousand milliseconds in one second. There are one million microseconds in one second.

We are going to use the millisecond option.

running time code options

Place the [running time (ms)] code into the set variable parameter.

running time code added to parameter

Let’s get an idea of what this timestamp in the [Start] variable looks like. Go to the Basic code category; find the [show number] code block.

show number code block in basic category

Place the code block into the [on button A pressed] function and below the set variable code.

show number code block added

Go to the Variables section; get the [Start] code. Place the code into the [show number] parameter.

start variable added to show number

Go over to the simulator and click on button A.

Micro:bit simulation

A number will scroll across the display. This is the elapsed time since the virtual Micro:bit started.

numbers scrolling across display

Click button A again; the number will be larger because more time has elapsed.

numbers scrolling across display

The variable has captured this moment in time from the Micro:bit. With this time saved, we will subtract a future time to give us the elapsed time.

We need another variable to save the elapsed time. Go to the Variables section; click the ‘Make a Variable’ button. Use ‘elapsed’ for the variable name.

variable added to variables section

The elapsed time will be calculated and saved when we press another button. Go to the Input section. Get the [on button A pressed] code block. Place it onto the workspace.

The second [on button A pressed] code block is green with hash marks. The code is inactive because we cannot have two code blocks that refer to the same button at once.

button block greyed out

Click the button selector; choose button B.

button selector and button B selected

Go to the Variables category; get the set elapsed code block. Place the code block into the [on button B pressed] function.

set variable code block added

We need to subtract the current run time from the one recorded and saved in the Start variable. Go to the Math code category; find the Subtraction operation.

math operations section

Place the code block into the Set Variable parameter for the button B function.

subtraction operation added

Go to the Input category and the more section. Get the [running time (ms)] code block. Place it into the left side of the subtraction operation.

running time code added

Go to the Variables section. Get the [Start] variable; place it into the right side of the subtraction operation.

variable added to operation

Go to the [on button A pressed] function. Right-click on the [show number] code block; select the duplicate option.

duplicate option selected

Get the duplicate code and place it into the [on button B pressed] code; place it after the set variable code.

show number code block

Click the variable selector; choose the [elapsed] variable.

variable selected

Elapsed time in milliseconds

Click button A in the simulator. A long string of numbers will scroll across the display. This is the time in milliseconds. Reading the time in milliseconds is not human-friendly. Let's get the Micro:bit to display the times in seconds.

Elapsed time in seconds

One-thousand milliseconds is one second. We need to divide the total milliseconds by 1000.

Go to the Math code category. Get a copy of the Division operation and place it on the workspace below the [on button A pressed] function. Don’t put it into the function yet.

division operation on workspace

Get the [Start] variable from the [show number] code; place it into the left side of the division operation.

variable added to division operation

Place the division operation into the [show number] code parameter.

operation added to show number code

Type 1000 into the right side of the division operation.

value added to operation

Repeat the process for the button B code.

code for button b pressed

Click button A in the simulator. Wait a second or two and click button B. The values scrolling across the display will begin with a whole number followed by a number rounded to two decimal places.

Press button A to get the latest running time. Press button B to get the updated running time and subtract it from the first. This is your basic stopwatch.

If you press button B again—without pressing button A first—you will see a longer elapsed time. This is like a stopwatch lapse function.

Click the Actions menu and select Download to Micro:bit.

download to Micro:bit option
Previous
Previous

Elapsed time, velocity and the Micro:bit

Next
Next

Micro:bit conductivity tester