魔术按钮活动

让我们学习如何检测micro:bit附近的磁铁吧!

  • Get started
  • MakeCode
  • Inputs
Print lesson
  • 年龄 8+
  • 30 分钟
  • MakeCode Editor

简介

这个项目使用micro:bit的指南针来检测磁铁的存在。

教学指南

打开 打开 teacher resources

课堂活动

6个步骤

This is a simple magic trick you can perform to amaze your friends by magically switching the A and B buttons on the micro:bit!

工作原理

不幸的是,这里唯一的魔法就在代码中。 这个把戏使用了一块磁铁。你把磁铁藏在手心里,告诉micro:bit来切换按钮。当磁铁靠近micro:bit,A 按钮开始像B 按钮一样工作,并且B按钮开始像 A 一样工作。

关于作者

这个项目由布莱恩和贾思明诺曼(又名@MicroMonstersUK)创作的。 你可以在 youtube的micro:bit 教学频道查看更多他们的项目。

你需要什么

这个游戏你唯一需要的是micro:bit和任意一块尽可能小的能够被你握在手中的磁铁,甚至是一块冰箱的磁铁也可以。

You'll need magnets to perform this trick

步骤1:让按钮显示A和B

在我们给这个把戏编程之前,我们需要让按钮像你期待的一样工作,因此按下按钮A显示“A”,按下按钮 B则显示“B” 。


input.onButtonPressed(Button.A, function () {
    basic.showString("A")
})
input.onButtonPressed(Button.B, function () {
    basic.showString("B")
})
          

步骤2:测试磁力

我们将使用micro:bit的指南针来检测磁铁。 A compass tells us which direction we are facing by detecting the Earth’s magnetic field, but they can also detect any other magnet nearby. 我们将用这个功能来检查我们的磁铁是否靠近micro:bit,并使用输入菜单中的“more”(更多)选项下面的“magnetic force”(磁力)积木块。 As we only want to measure the strength we change the drop down to select ‘strength’.

步骤3:检查附近是否有磁场

现在我们可以检测micro:bit附近的磁力,我们可以查看检测到的数值是否很大。数值很大就意味着附近有一个很强的磁场。

如果你曾经玩过磁铁,那么你肯定知道他们有2个端点,这2个端点通常被称为南极和北极。 根据micro:bit上的磁铁指向哪一端,测出来的磁力要么是一个负数,如:-100;要么是一个正数,如:100 。 我们只想要知道强度是否至少是100,不管它是正数还是负数。因此我们也使用了“maths”(数学)菜单中的“absolute value of”(绝对值)模块来告诉我们代码,以忽略负号,并将-100当作它的100 。

所以在下面的代码中,我们将查看我们磁场强度读书的绝对值是否大于100,并将检查结果保存在一个叫做“isSwitched”(被切换了)的新变量中。


let isSwitched = false
let force = 0

force = Math.abs(input.magneticForce(Dimension.Strength))
isSwitched = force > 100
          

步骤4:运行我们的“magnet nearby”(附近的磁场)始终保持检查

At the moment our code to detect the magnet being nearby will only run once so we need to put it into a forever block so that it keeps getting run again and again checking for the magnet to come near to the micro:bit. 我们也应该确保程序启动的时候,“isSwitched”是false(假的)。


let isSwitched = false
let force = 0
basic.forever(function () {
    force = Math.abs(input.magneticForce(Dimension.Strength))
    isSwitched = force > 100
})
          

步骤5:检测到附近的磁铁后,切换按钮

现在我们可以随时查看变量“isSwitched”的值。如果它的值是“true”(真的),那么我们知道磁铁就在附近。 让我们用它来改变按钮的工作方式,完成我们这个游戏的程序。 我们将添加一个“if else”积木块到每个按钮的代码中,并检查我们是否应该切换每个按钮的显示,因为“isSwitched”等于true(真的):


let isSwitched = false
let force = 0
input.onButtonPressed(Button.A, function () {
    if (isSwitched) {
        basic.showString("B")
    } else {
        basic.showString("A")
    }
})
input.onButtonPressed(Button.B, function () {
    if (isSwitched) {
        basic.showString("A")
    } else {
        basic.showString("B")
    }
})
          

步骤6:表演练习

Here is the finished code:


let isSwitched = false
let force = 0
input.onButtonPressed(Button.A, function () {
    if (isSwitched) {
        basic.showString("B")
    } else {
        basic.showString("A")
    }
})
input.onButtonPressed(Button.B, function () {
    if (isSwitched) {
        basic.showString("A")
    } else {
        basic.showString("B")
    }
})
basic.forever(function () {
    force = Math.abs(input.magneticForce(Dimension.Strength))
    isSwitched = force > 100
})
          

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.

挑战

试着添加下列功能:

  • 当超过了一定的磁力强度之后,添加一个动画。
  • 按下“A+B”按钮,出现了一个磁性读取选项。
Selecting this opens external content from our support system, which adheres to their privacy policy.