Fixes to a couple of projects (#573)
* local commit * Fixes to a couple of projects
This commit is contained in:
parent
5d4e27ce2e
commit
350a98b429
@ -1,4 +1,4 @@
|
|||||||
# banana keyboard
|
# Banana keyboard
|
||||||
|
|
||||||
## @description A beginner maker activity, building a piano from bananas.
|
## @description A beginner maker activity, building a piano from bananas.
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ Build your own @boardname@ piano using bananas!
|
|||||||
## Materials
|
## Materials
|
||||||
|
|
||||||
* @boardname@, battery holder and 2 AAA batteries
|
* @boardname@, battery holder and 2 AAA batteries
|
||||||
* Bananas
|
* Banana
|
||||||
* Orange
|
* Orange
|
||||||
* Crocodile clips
|
* Crocodile clips
|
||||||
|
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
# Code
|
# Code
|
||||||
|
|
||||||
Have you ever tried to making beat box sounds? Let's try making a beatbox with code!
|
Have you ever tried making beat box sounds? Let's try making a beatbox with code and, yes, a banana!
|
||||||
|
|
||||||
We will register an event handler on the fruit that will execute when two things occur: first, the alligator clip attaches to GND and the other side of the alligator clip is inserted into a banana. Let's start by adding a variable where you can store data. Then rename the variable to "sound". Then set the value of the variable to the note block `A` from the Music drawer. Modify your code so that your code looks like this.
|
## Code the banana key
|
||||||
|
|
||||||
|
Start by adding a variable to store a musical note. Rename the variable to `sound`. Set the value of the variable to the note block `Middle A` from the **Music** drawer.
|
||||||
|
|
||||||
```blocks
|
```blocks
|
||||||
let sound = music.noteFrequency(Note.A);
|
let sound = music.noteFrequency(Note.A);
|
||||||
```
|
```
|
||||||
|
|
||||||
We want to play music on pin pressed in order to register an event handler that will execute whenever when you run a script and click pin 1 on the simulator. We must start by opening the Input drawer and adding `on pin pressed` P1. Modify your code so that your code looks like this.
|
We want to play music when the fruit connected to a pin pressed. So, we register an event handler that executes whenever pin **1** is pressed. Pin **1** is, of course, connected to the banana. Add a ``||input:on pin pressed||`` block from the **Input** drawer.
|
||||||
|
|
||||||
```blocks
|
```blocks
|
||||||
let sound = music.noteFrequency(Note.A);
|
let sound = music.noteFrequency(Note.A);
|
||||||
@ -17,38 +19,59 @@ input.onPinPressed(TouchPin.P1, () => {
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
We want to code the notes that will be played `on pin pressed`. We click on the Input drawer then insert a `for loop` that will increment by *i*. Click on the Variables drawer. Add `set item` block. Rename the variable block to "sound." Then add a Maths block to increase the variable sound from the note frequency of block `A` to `A` plus 25.Modify your code so that your code looks like this
|
Now, let's create some notes to play when the banana is pressed. Click on the **Loops** drawer then insert a ``||loops:repeat||`` loop into the ``||input:on pin pressed||`` block. Click on the **Variables** drawer and pull out a ``||variables:change item by||`` block and put it into the loop. Rename the variable to `sound`. Change the value from `1` to `25`. This will increase the variable `sound` from the note frequency of block `Middle A` to `Middle A` plus 25 and so on. Put a ``||variables:set to||`` block for `sound` right after the loop. Set it to `Middle A` a in order to reset the sound after a banana press.
|
||||||
|
|
||||||
```blocks
|
|
||||||
let sound = music.noteFrequency(Note.A);
|
|
||||||
input.onPinPressed(TouchPin.P1, () => {
|
|
||||||
for (let i = 0; i < 4; i++) {
|
|
||||||
sound = sound + 25
|
|
||||||
}
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
* click *Download* to see if the code works as expected.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Let's include a second sound `on pin pressed` *P2*. To do this, you need to add the same blocks as the banana keyboard activity. However, you must change alter `on pin pressed` from P1 to P2. Additionally, you must *decrease* the frequency of the variable "sound" by 25. Modify your code so that your code looks like this. You will need to include a second banana to a alligator (spring) clip in the same procedure as the first activity.
|
|
||||||
|
|
||||||
```blocks
|
```blocks
|
||||||
let sound = music.noteFrequency(Note.A);
|
let sound = music.noteFrequency(Note.A);
|
||||||
|
|
||||||
input.onPinPressed(TouchPin.P1, () => {
|
input.onPinPressed(TouchPin.P1, () => {
|
||||||
for (let i = 0; i < 4; i++) {
|
for (let i = 0; i < 4; i++) {
|
||||||
sound = sound + 25
|
sound += 25;
|
||||||
}
|
}
|
||||||
})
|
sound = music.noteFrequency(Note.A);
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, insert a ``||music:play tone||`` above the ``||variables:change by||``. Pull out the ``sound`` variable block and drop it in the note slot of ``||music:play tone||``. Change the beat fraction from `1` to `1/4`.
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
let sound = music.noteFrequency(Note.A);
|
||||||
|
|
||||||
|
input.onPinPressed(TouchPin.P1, () => {
|
||||||
|
for (let i = 0; i < 4; i++) {
|
||||||
|
music.playTone(sound, music.beat(BeatFraction.Quarter));
|
||||||
|
sound += 25;
|
||||||
|
}
|
||||||
|
sound = music.noteFrequency(Note.A);
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
Click `|Download|` and try a banana press. Did you hear 4 notes play?
|
||||||
|
|
||||||
|
|
||||||
|
## Add another banana key
|
||||||
|
Go back to **[Make](/projects/banana-keyboard/make)** and repeat steps 7 and 8 with another banana but this time connect the crocodile clip to pin **3**.
|
||||||
|
|
||||||
|
Duplicate the ``||input:on pin pressed||`` event handler to make a second one. For the new ``||input:on pin pressed||``, change the pin name to **P2**. In the pin **P2** event, let's have the the frequency in the variable `sound` decrease by 25 instead of having it increase. Change the `25` in the ``||variables:change by||`` block to `-25`. OK, your code now looks like this:
|
||||||
|
|
||||||
|
```blocks
|
||||||
|
let sound = music.noteFrequency(Note.A);
|
||||||
|
|
||||||
|
input.onPinPressed(TouchPin.P1, () => {
|
||||||
|
for (let i = 0; i < 4; i++) {
|
||||||
|
music.playTone(sound, music.beat(BeatFraction.Quarter));
|
||||||
|
sound += 25;
|
||||||
|
}
|
||||||
|
sound = music.noteFrequency(Note.A);
|
||||||
|
});
|
||||||
|
|
||||||
input.onPinPressed(TouchPin.P2, () => {
|
input.onPinPressed(TouchPin.P2, () => {
|
||||||
for (let i = 0; i < 4; i++) {
|
for (let i = 0; i < 4; i++) {
|
||||||
sound = sound - 25
|
music.playTone(sound, music.beat(BeatFraction.Quarter));
|
||||||
|
sound += -25;
|
||||||
}
|
}
|
||||||
})
|
sound = music.noteFrequency(Note.A);
|
||||||
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
* click *Download* to see if the code works as expected.
|
Click `|Download|` again and play both bananas. It's a fruit jam session!
|
||||||
|
@ -3,73 +3,73 @@
|
|||||||
## Materials
|
## Materials
|
||||||
|
|
||||||
* @boardname@, battery holder and 2 AAA batteries
|
* @boardname@, battery holder and 2 AAA batteries
|
||||||
* Bananas
|
* Banana
|
||||||
* Orange
|
* Orange
|
||||||
* Crocodile clips
|
* 4 Crocodile clips
|
||||||
|
|
||||||
## Steps
|
## Steps
|
||||||
|
|
||||||
## Step 1
|
### ``|Step 1|`` - Connect the ground lead
|
||||||
|
|
||||||
![](/static/mb/lessons/banana-keyboard-1.png)
|
![](/static/mb/lessons/banana-keyboard-1.png)
|
||||||
|
|
||||||
Using the 1st crocodile clip, connect the end of the crocodile clip onto GND pin on the @boardname@.
|
Using the **1st** crocodile clip, connect the end of the crocodile clip onto **GND** pin of the @boardname@.
|
||||||
|
|
||||||
## Step 2
|
### ``|Step 2|`` - Connect the sound lead
|
||||||
|
|
||||||
![](/static/mb/lessons/banana-keyboard-2.png)
|
![](/static/mb/lessons/banana-keyboard-2.png)
|
||||||
|
|
||||||
![](/static/mb/lessons/banana-keyboard-3.png)
|
![](/static/mb/lessons/banana-keyboard-3.png)
|
||||||
|
|
||||||
Using the 2nd crocodile clip, connect the end of the crocodile clip onto the 0 pin on the @boardname@.
|
Using the **2nd** crocodile clip, connect the end of the crocodile clip onto pin **0** of the @boardname@.
|
||||||
|
|
||||||
## Step 3
|
### ``|Step 3|`` - Connect the headphone to ground
|
||||||
|
|
||||||
![](/static/mb/lessons/banana-keyboard-4.png)
|
![](/static/mb/lessons/banana-keyboard-4.png)
|
||||||
|
|
||||||
Using the 1st crocodile clip, connect the second end of the crocodile clip onto based of the headphone jack.
|
Using the **1st** crocodile clip, connect the second end of the crocodile clip onto based of the headphone jack.
|
||||||
|
|
||||||
## Step 4
|
### ``|Step 4|`` - Connect the headphone sound contact
|
||||||
|
|
||||||
![](/static/mb/lessons/banana-keyboard-5.png)
|
![](/static/mb/lessons/banana-keyboard-5.png)
|
||||||
|
|
||||||
![](/static/mb/lessons/banana-keyboard-6.png)
|
![](/static/mb/lessons/banana-keyboard-6.png)
|
||||||
|
|
||||||
Using the 2nd crocodile clip, connect the second end of the crocodile clip onto tip of the headphone jack.
|
Using the **2nd** crocodile clip, connect the second end of the crocodile clip onto tip of the headphone jack.
|
||||||
|
|
||||||
## Step 5
|
### ``|Step 5|`` - Connect a fruit lead
|
||||||
|
|
||||||
![](/static/mb/lessons/banana-keyboard-7.png)
|
![](/static/mb/lessons/banana-keyboard-7.png)
|
||||||
|
|
||||||
Using the 3rd crocodile clip, connect the end of the crocodile clip onto the 1st crocodile clip already clipped onto GND.
|
Using the **3rd** crocodile clip, connect the end of the crocodile clip onto the **1st** crocodile clip already clipped onto **GND**.
|
||||||
|
|
||||||
## Step 6
|
### ``|Step 6|`` - Connect the orange to ground
|
||||||
|
|
||||||
![](/static/mb/lessons/banana-keyboard-8.png)
|
![](/static/mb/lessons/banana-keyboard-8.png)
|
||||||
|
|
||||||
![](/static/mb/lessons/banana-keyboard-9.png)
|
![](/static/mb/lessons/banana-keyboard-9.png)
|
||||||
|
|
||||||
Using the 3rd crocodile clip, connect the unattached end of the crocodile clip onto the orange.
|
Using the **3rd** crocodile clip, connect the unattached end of the crocodile clip onto the orange.
|
||||||
|
|
||||||
## Step 7
|
### ``|Step 7|`` - Connect a second fruit lead
|
||||||
|
|
||||||
![](/static/mb/lessons/banana-keyboard-10.png)
|
![](/static/mb/lessons/banana-keyboard-10.png)
|
||||||
|
|
||||||
Using the 4th crocodile clip, connect the end of the crocodile clip onto pin 1 on the @boardname@.
|
Using the **4th** crocodile clip, connect the end of the crocodile clip onto pin **1** on the @boardname@.
|
||||||
|
|
||||||
## Step 8
|
### ``|Step 8|`` - Connect the banana
|
||||||
|
|
||||||
![](/static/mb/lessons/banana-keyboard-11.png)
|
![](/static/mb/lessons/banana-keyboard-11.png)
|
||||||
|
|
||||||
Using the 4th crocodile clip, connect the unattached end of the crocodile clip onto the banana.
|
Using the **4th** crocodile clip, connect the unattached end of the crocodile clip onto the banana.
|
||||||
|
|
||||||
## Step 9
|
### ``|Step 9|`` - Complete banana keyboard
|
||||||
|
|
||||||
![](/static/mb/lessons/banana-keyboard-12.png)
|
![](/static/mb/lessons/banana-keyboard-12.png)
|
||||||
|
|
||||||
Your banana keyboard is ready!
|
Your banana keyboard is ready!
|
||||||
|
|
||||||
## Step 10
|
### ``|Step 10|`` - Test the keyboard
|
||||||
|
|
||||||
Connect your @boardname@ to your computer using your USB cable and run this script:
|
Connect your @boardname@ to your computer using your USB cable and run this script:
|
||||||
```blocks
|
```blocks
|
||||||
@ -78,7 +78,7 @@ input.onPinPressed(TouchPin.P1, () => {
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
Tap your banana instrument to play sound against... the fruit!
|
Grab a the orange with one hand. With the fingers of your other hand, tap the banana to play sound. Your banana keyboard is ready!
|
||||||
|
|
||||||
## ~button /projects/banana-keyboard/code
|
## ~button /projects/banana-keyboard/code
|
||||||
NEXT: beat box
|
NEXT: beat box
|
||||||
|
@ -10,63 +10,94 @@ Help Karel make LED art!
|
|||||||
|
|
||||||
![](/static/mb/projects/karel/hi.png "Hi")
|
![](/static/mb/projects/karel/hi.png "Hi")
|
||||||
|
|
||||||
The goal of this activity is to download the JavaScript code given below onto a board,
|
The goal of this activity is to download the JavaScript code given below onto a @boardname@.
|
||||||
then USE the program to introduce new students to the @boardname@.
|
Then USE the program to introduce new students to the @boardname@.
|
||||||
Students will not do the coding this time. They will be users to get familiar with the board.
|
Students will not do the coding this time. They will be the users who get familiar with the board.
|
||||||
|
|
||||||
## How to play
|
## How to play
|
||||||
|
|
||||||
* ``A button`` **Turn Left**
|
* ``A button`` **Turn Left**
|
||||||
Does not draw anything just changes the direction Karel (the flashing led) is facing
|
>Does not draw anything just changes the direction Karel (the flashing led) is facing
|
||||||
* ``B button`` **Move Forward**
|
* ``B button`` **Move Forward**
|
||||||
Moves Karel forward one step and leaves the LED on behind him
|
>Moves Karel forward one step and leaves the LED on behind him
|
||||||
* ``shake`` **Jump**
|
* ``shake`` **Jump**
|
||||||
Moves Karel forward one step without leaving the LED on behind him
|
>Moves Karel forward one step without leaving the LED on behind him
|
||||||
* ``A+B button`` **Hide Karel**
|
* ``A+B button`` **Hide Karel**
|
||||||
Shows or hides Karel (the flashing LED), to be used once your artwork is complete
|
>Shows or hides Karel (the flashing LED), to be used once your artwork is complete
|
||||||
* ``Reset button`` **Clear the board and restart**
|
* ``Reset button`` **Clear the board and restart**
|
||||||
Restart the program and clear the board
|
>Restart the program and clear the board
|
||||||
|
|
||||||
Note, that there is no way to erase, other than restarting.
|
**Note:** There is no way to erase, except by restarting.
|
||||||
|
|
||||||
## ~
|
## Try drawing some patterns
|
||||||
|
|
||||||
See if you can make each pattern below using A, B, and shake. Once you have completed a challenge press A and B at the same time to hide Karel.
|
See if you can make each pattern below using **A**, **B**, and **shake**. Once you have completed a challenge press **A** and **B** at the same time to hide Karel.
|
||||||
For patterns that you design decide which LEDs you want to turn on and then make that design with Karel.
|
For patterns that you design, decide which LEDs you want to turn on and then make that design with Karel.
|
||||||
|
|
||||||
## Spiral
|
### Spiral
|
||||||
![](/static/mb/projects/karel/spiral.png "Spiral")
|
![](/static/mb/projects/karel/spiral.png "Spiral")
|
||||||
|
|
||||||
## Right turn
|
### Right turn
|
||||||
![](/static/mb/projects/karel/right-turn.png "Right turn")
|
![](/static/mb/projects/karel/right-turn.png "Right turn")
|
||||||
|
|
||||||
## Eyes
|
### Eyes
|
||||||
![](/static/mb/projects/karel/eyes.png "Eyes")
|
![](/static/mb/projects/karel/eyes.png "Eyes")
|
||||||
|
|
||||||
## Smile
|
### Smile
|
||||||
|
|
||||||
![](/static/mb/projects/karel/smile.png "Smile")
|
![](/static/mb/projects/karel/smile.png "Smile")
|
||||||
|
|
||||||
## Check
|
### Check
|
||||||
|
|
||||||
![](/static/mb/projects/karel/check.png "Check")
|
![](/static/mb/projects/karel/check.png "Check")
|
||||||
|
|
||||||
## First letter of your name
|
### First letter of your name
|
||||||
Figure out how to make the first letter of your name with the LEDs.
|
|
||||||
![](/static/mb/projects/karel/blank.png "Blank")
|
Figure out how to make the first letter of your name with the LEDs.
|
||||||
|
|
||||||
|
```sim
|
||||||
|
basic.forever(() => {
|
||||||
|
basic.showAnimation(`
|
||||||
|
# # # . . # # # . . # # # . . # # # . .
|
||||||
|
. . . . . # . . . . # . . . . # . . # .
|
||||||
|
. . . . . # . . . . # . . . . # . . # .
|
||||||
|
. . . . . # . . . . # . . . . # . . # .
|
||||||
|
. . . . . # . . . . # # # . . # # # . .
|
||||||
|
`)
|
||||||
|
basic.pause(1000)
|
||||||
|
basic.clearScreen()
|
||||||
|
basic.pause(1000)
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Your design!
|
||||||
|
|
||||||
## Your design!
|
|
||||||
Make something fun!
|
Make something fun!
|
||||||
![](/static/mb/projects/karel/blank.png "Blank")
|
|
||||||
|
```sim
|
||||||
|
basic.forever(() => {
|
||||||
|
basic.showAnimation(`
|
||||||
|
# . . . . # . . . . # . . . . # . . . . # . . . . # . . . .
|
||||||
|
. . . . . # . . . . # . . . . # . . . . # . . . # # . # # #
|
||||||
|
. . . . . # . . . . # . . . . # . . . . # . . . # # . # . #
|
||||||
|
. . . . . # . . . . # . . . . # . . . . # . . . # # . . . #
|
||||||
|
. . . . . # . . . . # # # # # # # # # # # # # # # # # # # #
|
||||||
|
`)
|
||||||
|
basic.pause(1000)
|
||||||
|
basic.clearScreen()
|
||||||
|
basic.pause(1000)
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
Thanks for playing with Karel the LED!
|
Thanks for playing with Karel the LED!
|
||||||
|
|
||||||
## ~
|
## Coding Karel the LED
|
||||||
|
|
||||||
|
Copy this code into the JavaScript editor and then download it to the board.
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
/**
|
/**
|
||||||
* Karel the LED
|
* Karel the LED
|
||||||
*
|
|
||||||
* Copy this code into the JavaScript editor and program the board.
|
|
||||||
* Use the instructions above to complete the challenges.
|
|
||||||
*/
|
*/
|
||||||
basic.forever(() => {
|
basic.forever(() => {
|
||||||
if (board.isKarelActive) {
|
if (board.isKarelActive) {
|
||||||
@ -180,11 +211,9 @@ class Board {
|
|||||||
pressedAB() {
|
pressedAB() {
|
||||||
this.isKarelActive = !this.isKarelActive;
|
this.isKarelActive = !this.isKarelActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## About the authors
|
||||||
|
|
||||||
|
This project was contributed by Dr. David Fisher a professor at [Rose-Hulman Institute of Technology](https://www.rose-hulman.edu/academics/faculty/fisher-david-fisherds.html). Dr. Fisher loves educational robotics and runs various outreach programming activities, including a summer camp, called [Connecting with Code](https://connectingwithcode.org), which gives a @boardname@ to each participant.
|
||||||
## about the authors
|
|
||||||
This project was contributed by Dr. David Fisher a professor at [Rose-Hulman Institute of Technology](http://www.rose-hulman.edu/). Dr. Fisher loves educational robotics and runs various outreach programming activities, including a summar camp, called [Connecting with Code](https://connectingwithcode.org), which gives a @boardname@ to each participant.
|
|
@ -77,7 +77,7 @@ basic.forever(() => {
|
|||||||
Your Milky Monster is ready!
|
Your Milky Monster is ready!
|
||||||
|
|
||||||
https://youtu.be/egl3fNAYylk
|
https://youtu.be/egl3fNAYylk
|
||||||
|
<br/>
|
||||||
## ~button /projects/milky-monster/connect
|
## ~button /projects/milky-monster/connect
|
||||||
NEXT: Connect
|
NEXT: Connect
|
||||||
## ~
|
## ~
|
Loading…
Reference in New Issue
Block a user