Range Selection

This example is the same as the first simple example but with added code to allow the left button to mute the beeping and the right button to change the maximum range. The on start block is introduced to initialise some variables include two arrays.

Description and Discussion

The three maximum range distances are stored in the rangelist array with some associated colours in huelist (0 is red, 85 is green, 170 is blue in this HSV model). rangeindex is used to select the current range from rangelist. The first element in an array in MakeCode is 0, in other languages this may be 1.

The loop is similar to the first example but with the addition of two if blocks to deal with buttons A (left) and B (right) and a more sophisticated condition for beeping which now uses the same range as graphing and constrains the frequency between 100Hz and 8kHz.

The check for button A uses a common subtraction technique to toggle between the two volume values, 0 and 128. button B looks more complicated but is only adding 1 (incrementing) the rangeindex and then returning to the first element if it has gone past the end of the array. The code flashes all the NeoPixels the pixelhue colour for 1 second to indicate to the user which range has been selected, e.g. green for 100cm.

There is a subtle but important difference between the code for the two buttons. The first uses was pressed and the second uses is pressed. was pressed checks for any press since the last check but is pressed only checks as the block is executed. In this case the code before the if blocks executes quickly hence everything loops frequently allowing the use of the instantaneous is pressed. Holding down either button for a few seconds will reveal a difference in behaviour relating to this.

MakeCode also has an on block which is an alternative method for coding for buttons. The volume mute could also have been implemented using a boolean value and controlled using set volume although the CPX default level sounds like 20 rather than 128. It is common in computer languages for there to be more than one way to achieve the same goal.

The set volume block does not work on all browsers in the simulator.
This guide was first published on Sep 17, 2018. It was last updated on Sep 17, 2018. This page (Range Selection) was last updated on May 18, 2019.