From 3f1817037e50c260e1d08d480fc299ce127a0ecf Mon Sep 17 00:00:00 2001 From: gingemonster Date: Sun, 23 Oct 2016 03:53:48 +0100 Subject: [PATCH] Added a new project, the magic button trick (#284) * adding the 'magic button trick' project * tweaking text and fixing spelling mistakes * adding vscode temp files to gitignore * updated after feedback * removing vscode temp files * missed two vars * deleting vscode temp file --- .gitignore | 2 + docs/projects.md | 13 +++ docs/projects/magic-button-trick.md | 101 ++++++++++++++++++ .../static/mb/projects/magic-button-trick.png | Bin 0 -> 11356 bytes .../projects/magic-button-trick/magnets.jpg | Bin 0 -> 14906 bytes 5 files changed, 116 insertions(+) create mode 100644 docs/projects/magic-button-trick.md create mode 100644 docs/static/mb/projects/magic-button-trick.png create mode 100644 docs/static/mb/projects/magic-button-trick/magnets.jpg diff --git a/.gitignore b/.gitignore index e294893b..20b16cc9 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,5 @@ clients/electron/projects *.db *.suo *.log +.vscode/.BROWSE.VC.DB-shm +.vscode/.BROWSE.VC.DB-wal diff --git a/docs/projects.md b/docs/projects.md index 675717aa..3d98e3b9 100644 --- a/docs/projects.md +++ b/docs/projects.md @@ -70,6 +70,19 @@ Fun games to build with your micro:bit. }] ``` +## From the community + +Projects contributed by the micro:bit community + +```codecard +[{ + "name": "Magic Button Trick", + "url":"/projects/magic-button-trick", + "imageUrl":"/static/mb/projects/magic-button-trick.png" +}] +``` + + ### See Also [Flashing Heart](/projects/flashing-heart), [Smiley Buttons](/projects/smiley-buttons), [Love Meter](/projects/love-meter), [Rock Paper Scissors](/projects/rock-paper-scissors), [Compass](/projects/compass), [Hack your headphones](/projects/hack-your-headphones), [Banana keyboard](/projects/banana-keyboard), [Telegraph](/projects/telegraph), [Radio](/projects/radio), [Guitar](/projects/guitar), [Watch](/projects/the-watch) \ No newline at end of file diff --git a/docs/projects/magic-button-trick.md b/docs/projects/magic-button-trick.md new file mode 100644 index 00000000..b0d88bad --- /dev/null +++ b/docs/projects/magic-button-trick.md @@ -0,0 +1,101 @@ +# magic button trick + +Perform a magic trick where you appear to make the **A** and **B** button of your micro:bit swap over just by moving a sticky label. + +### ~avatar avatar + +Welcome! This activity will teach you how to use the micro:bit's compass to detect a nearby magnet + +### ~ +This is a simple magic trick you can perform to amaze your friends, where by moving the sticky labels on your micro:bit's **A** and **B** button you appear to make the buttons really switch over. To see the trick performed watch the video below. + +https://youtu.be/-9KvmPopov8 + +## how the trick works + +Unfortunately, the only magic here is in the code. This trick uses a magnet, hidden in your hand, to tell the micro:bit to swap over the buttons so that when the magnet is near the microbit the **A** button starts working like the **B** button and the **B** button starts working like the **A** button. + +## what you need + +The only things you need for this trick are your micro:bit and any magnet that is small enough to fit in your hand, even a fridge magnet will work. + +![](/static/mb/projects/magic-button-trick/magnets.jpg "Magnets") + + +## step 1: getting the buttons to display **A** and **B** + +Before we code the trick itself, we need to get the buttons working as you would expect them to so that pressing button **A** displays 'A' and pressing button **B** displays 'B': + +```blocks +input.onButtonPressed(Button.A, () => { + basic.showString("A") +}) +input.onButtonPressed(Button.B, () => { + basic.showString("B") +}) +``` + +## step 1: measuring magnetic force + +We will use the micro:bit's compass to detect the magnet. Compass's tell us what direction we are pointing by detecting the Earth's magnetic field but they can also detect any other magnet nearby. We will use that to check if our magnet is next to the micro:bit by using the [magnetic force](reference/input/magnetic-force) block found in the input menu's 'more' section. As we only want to measure the strength we change the drop down to select 'strength': + +```blocks +input.magneticForce(Dimension.Strength) +``` + +## step 2: checking if the magnetic is nearby + +Now we can measure the magnetic force near the microbit, we can check if the value we measure is so big that it means there must be a strong magnet nearby. + +If you have ever played with magnets you know they have two ends, often called a north and south 'pole'. Depending on which end of the magnet is pointing at the microbit the magnetic force measurement will either be a negative number like -100 or a positive number like 100. We just want to know if the strength is at least 100 we don't care if its negative or positive so we also use the 'absolute value of' block from the maths menu to tell our code to ignore the negative sign and just treat -100 as if its 100. + +So in the code below we will check if the absolute value of our magnetic field strength reading is more than 100 and save the result of that check in a new variable called 'isSwitched': + +```blocks +let isSwitched = Math.abs(input.magneticForce(Dimension.Strength)) > 100 +``` +## step 3: running our 'magnet nearby' check all the time + +At the moment our code to detect the magnet being nearby will only run once so we need to put it into a [foreever](/reference/basic/forever) block so that it keeps getting run again and again checking for the magnet to come near to the micro:bit. We should also make sure 'isSwitched' is false when our program starts. + +```blocks +let isSwitched = false; +basic.forever(() => { + let isSwitched = Math.abs(input.magneticForce(Dimension.Strength)) > 100 +}) +``` + +## step 4: swapping the buttons when we know the magnet is nearby + +Now we can check the value of our variable 'isSwitched' whenever we want and we will know that the magnet is nearby if it's value is 'true'. Let's use that to change how the buttons work and complete the code for our trick. We will add an 'if, else' block to each button's code and check if we should swap over what each button displays because 'isSwitched' is equal to true: + +```blocks + +let isSwitched = false; +basic.forever(() => { + isSwitched = Math.abs(input.magneticForce(Dimension.Strength)) > 100 +}) + +input.onButtonPressed(Button.A, () => { + if (isSwitched) { + basic.showString("B") + } else { + basic.showString("A") + } +}) +input.onButtonPressed(Button.B, () => { + if (isSwitched) { + basic.showString("A") + } else { + basic.showString("B") + } +}) + +``` + +## step 5: practice your performance +Now you just need to program your own micro:bit and practice the trick a few times before performing to friends. Try asking your friends to click the buttons after you have switched the labels and the trick won't work for them as they don't have a hidden magnet in their hand. + + +## about the authors +This project was contributed by Brian and Jasmine Norman, aka [@MicroMonstersUK](https://twitter.com/MicroMonstersUK). You can chekout their [micro:bit tutorials chanel on youtube](https://www.youtube.com/channel/UCK2DviDexh_Er2QYZerZyZQ) for more projects. \ No newline at end of file diff --git a/docs/static/mb/projects/magic-button-trick.png b/docs/static/mb/projects/magic-button-trick.png new file mode 100644 index 0000000000000000000000000000000000000000..6e19d321a2f74b2350b066eb6975e9daf7a9de55 GIT binary patch literal 11356 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 Df(&t^ literal 0 HcmV?d00001 diff --git a/docs/static/mb/projects/magic-button-trick/magnets.jpg b/docs/static/mb/projects/magic-button-trick/magnets.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b146befc1cd5c34113c0eecb1acdf1e667461bd GIT binary patch literal 14906 zcmbVycUV(d*Y7zA%}6IGAW9QSP!KQ_Q6Y$-gr0~c&L~BYU`4^g3>b7o%>V)h#RwQ7 zg`m8S3OYJ=MX_UuWw3YAQAC3Xh~BkNKdxV*? zL&8Ha9LKRR_+sB48|biB^HVV_DhhMOFw6im#_TX%XyI@j!c8y|-1Xo(ftwO-3bfDR zHs9x5!$*8?-@<7a8OCum6Za(Mo5BANa4(`wh4y=r#lRf+g^henhnSDyI-8sa+j`Tb zUc@_LOn0`V-YLBCweAlgpQu7c|fJd4(Y2Q6E+C3JrMV0 ziTov*?n_cK?HTSK?w%eP=H=n(Fe)3!Qaal!$z$W5AKDud|l=DcJ?O6 zAN$(mGSF_uuwqyQ{Em)?mzQTTd2o-Ub;Ua0+uKTT?Hrs$#!7MRdNGVtS4#T+{sX1t z@BK$hb-uUHlHfD9`EPv~HtZsh{1t}TjmI#fMtH?o3^R@zcqw`( z7cQ#)L*17KN?k94H|+T_(1`<=8^Q_(*MUw6=tXje`BGRZI?FUfN7((~92_V;&;|+6 z``*@p*+1qO5N8IwPxgo2fqpX!kfy;o7-mMCfiukEVASvZi2t#qWsCSLGCe$E%t)9U zJ`TQa@EwPb$K8p$JG4CU3AhhF5vSv0;p++%Y=%d5`XucQjLVTTZXPgG(9?*~4 zW8h1Jwi`Ygcf{@SQMeu4-Em)d(hmN&hyO;y99P@{#zx>aaM{5dec){lFy=&j(K|=M z*l^qu9|m_itjZ35iXF#JWA8CEYYaSR1!HK`3f@SA)^2PpeD`7KJ)@y_I8Md?!MZRT zVhyJFW^4>L8WUrqh*b=SaWhNqbNQ06xc-MAgB*Q^&Q3Ist z=<4Yk#HTJwT(Ba3W#Xc&l=zfoOOw-PXYv=PtVm8=lwyioVAzu(f+HoBrkMF8@g>Z_ zZ1_kgxAA`d+7}YSjGBm3|NRO4_N})S!^R>s2?fDe`R!X*2LP_C2P=4*r^m#JZhpaj z3^&G9&tSKyULHYio<6?89@G4Me7t;F#EXo9s(>08DH{Eý@eS{oD|4h`cLtq)| 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 qb{uqK4t