pxt-calliope/docs/projects/guitar/lightsensor.md
Abhijith Chatra be7858cbed
Cherry picked fixes from v0 to v1 (#1476)
* Fix example and do a few edits (#850)

* Small fixes to the Karel project text (#862)

* fix missing shadow type

* add calibration info (#897)

microbit-support:6348 User reported bug, but didn't realie micro:bit compass had to be calibrated on first run of the program.

* Cherry pick adding various cross-editor compat APIs (#863)

* fix nudge

* Fix a typo ("screent") in the documentation (#1012)

* Fix a typo
"screent" -> "the LED screen"

* Update showArrow doc string for consistency with other methods

* Doc bugs found by xlators (#899)

* Update rotation.md (#998)

reflects actual behaviour of the board

* fixed layout corruption (#1073)

* Updating the new bug filer with the right link

* Update challenges.md (#1325)

For what I'm taught in school, 2 follows 1 😉😉.

* Update simulator.md (#1209)

* Update plant watering.md (#1264)

the connection to servo are male not female

* support for MIDI simulator in v0 (#1331)

* Doc improvements (#1337)

* update grammar in radio-dashboard sample code

* Chanllenge 2 follows 1

I open all challenges.md without "Challenge 2" and review the file
`grep -r "Challenge 2" -L | grep challenge | xargs -I@ code @`

Changes to be committed:
	modified:   docs/lessons/counter/challenges.md
	modified:   docs/lessons/game-counter/challenges.md
	modified:   docs/lessons/night-light/challenges.md
	modified:   docs/lessons/snowflake-fall/challenges.md

* Revert "support for MIDI simulator in v0 (#1331)"

This reverts commit 30a9c411fb80762656e7a636feff8e77b7fd9e67.

* Revert "Cherry pick adding various cross-editor compat APIs (#863)"

This reverts commit 7308dbef23e9ee402bebb7e721d7014d8252c9e5.

* Fixed pin needed to replace button A (#1385)

* Cherry pick part of the signature update in in2cWriteBuffer (#863): 7308dbe
2018-10-22 10:00:57 -07:00

3.6 KiB

Light Sensor Tone control

@description @boardname@ guitar: using light sensor to control tone

~avatar avatar

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 https://youtu.be/2cKg9pokVC4

The @boardname@ LEDs Light Sensors

  • the @boardname@ 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 https://youtu.be/pqU7bTcfQ_s 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

~hint

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

Download the code to the @boardname@

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)

~button /projects/guitar/accelerometer

NEXT: Accelerometer Beat control

~