# Light Sensor Tone control

Use the Light Sensor to the control tone for this Theremin inspired guitar

• Concepts:
• Inputs
• Light Intensity
• Tone/Frequency
• Ratio Mapping
• Forever Loop
• Math (multiplication) with code properties

## Duration: 30 - 45 minutes

playing tones with light sensor

## The micro:bit LEDs Light Sensors

• the micro:bit can detect external light level intensity reaching the LEDs
• the light level block reports a reading of values 0 (dark) to 255 (bright)
• a Forever Loop is required to continually measure the current light level and control the tone

## Forever Loop

The forever loop really does run forever. The forever loop is useful when there is a need to continually check for an event or use a changing value in code.

## Blocks

``````basic.forever(() => {})
input.lightLevel()
led.plotBarGraph(0, 255)
music.playTone(Note.C, music.beat(BeatFraction.Quarter))``````

## Step 1: Create a light level detector

``````basic.forever(() => {
led.plotBarGraph(input.lightLevel(), 255)
})``````

Build the blocks

• From Basic drag a forever loop block into the coding area
• From Led drag a plot bar graph block into the forever loop
• From Input drag a light level block into plot bar graph of

Set the plot bar graph value up to = 255

## Step 2: Test the light required to move the bar graph height

graphing light input

Experiment to see the effect on graph height when the plot bar graph value up to is changed

255 is the maximum light input reading, try numbers smaller than 255 Find a value that allows the graph to show 1 - 5 bars

## Frequency

Frequency measured in Hz which are cycles per second or vibrations per second

• A healthy human ear can detect frequencies in the range of 20Hz to 20,000Hz.
• The micro:bit + headphones reliably produce detectable output ~50Hz - 6,000Hz.

261Hz represents a C note

``music.playTone(261, music.beat(BeatFraction.Half))``

play tone blocks can specify a numeric Frequency by replacing the letter C note with a number block that has the value it represents

``music.playTone(261, music.beat(BeatFraction.Half))``

## Step 3: Multiply Frequency using Math blocks

``````input.onButtonPressed(Button.A, () => {
music.playTone(261 * 2, music.beat(BeatFraction.Half))
})``````

Create a play tone block using a Math section, multiplication block to set tone

## Next

Add a B button block that multiplies the 261 tone by a number other than 2 to set tone

Test the sound for multiples of the 261Hz C frequency

## Step 4: Control the Frequency with the light input

``````basic.forever(() => {
music.playTone(input.lightLevel() * 25, music.beat(BeatFraction.Quarter))
})``````

Create a forever loop containing a play tone block

Set tone, using Math multiplication block that multiplies light level input by 25 or experiment with multipliers larger and smaller than 25

Test light tone control on the guitar Cover the LEDs with your hand to vary light detected to control the tone

## Good work, this guitar is sounding good!

Challenge: Create a variable for the light level multiplier that you can change using buttons (optional)