# 第六课 在WU-Link中使用电子罗盘——指南针来了

\[TOC]

“要是你在野外迷了路”是我们所熟知的一篇小学课文，课文中介绍了四种天然的“指南针”，除此之外，大自然还有一种更为重要的“指南针”——地球的磁场。本课我们将学习如何使用WU-Link内置的电子罗盘，利用地球磁场制作指南针，让WU-Link也有指示方向的功能。

## 模块与指令

**要制作本课的范例作品，需要认识以下这些新的硬件：**

### 电子罗盘

罗盘也叫做指南针、司南，是中国古代四大发明之一。它能够利用地球磁场来指示方向，在航海中的应用非常广泛，可以说哥伦布到达美洲大陆、麦哲伦环球航行成功都离不开罗盘的帮助。

传统的罗盘相对都比较大。随着电子技术的发展，使用磁阻传感器可以生产出非常小巧的电子罗盘，WU-Link内部的电路板上就集成了一块电子罗盘芯片（如下图所示），使得WU-Link也具有识别方向的功能。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LWt7So6g_gAEk9I5wgO%2F-LWt7YdryilqSGMhKxJb%2Fwulink6-1.png?generation=1548220526537229\&alt=media)

**要制作本课的范例作品，还需要使用以下新的指令：**

### “校准板载指南针”指令：

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LWt7So6g_gAEk9I5wgO%2F-LWt7YduZzvy1Rv1qbQr%2Fwulink6-a.png?generation=1548220524540930\&alt=media)

属于“点阵屏”类别指令；使用这个指令可以校准板载的电子罗盘。

由于地球磁场非常微弱，因此电子罗盘容易受到各种电子产品的干扰。为了提高数据准确性，电子罗盘在使用前一般都需要校准，让电子罗盘的数值更加准确。

### “读板载指南针角度”指令：

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LWt7So6g_gAEk9I5wgO%2F-LWt7YdwQvJNeGB6CDsb%2Fwulink6-b.png?generation=1548220513939888\&alt=media)

属于“点阵屏”类别指令；使用这个指令可以读取板载电子罗盘的角度值。所读取数值的范围是（0-360），将WU-Link正面向上摆放，所读取的角度值和方向之间的关系是：“0”度—正北方、“90”度—正东方、“180”度——正南方、“270”度——正西方。

## 作品制作

要制作指南针，需要先运行校准指令，校准板载的电子罗盘；然后可以在点阵屏上直接显示WU-Link所指示方向的角度值，也可以在点阵屏上显示表示方向的字母。

### 第一步：校准板载电子罗盘

电子罗盘使用之间必须先进行校准。由于校准程序只需要在程序一开始的时候运行一次，因此可以将“校准板载指南针”指令作为“初始化”指令。

电子罗盘的校准过程会自动完成，为了让校准过程操作更加明确，可以在“校准板载指南针”指令前面添加“点阵屏”清除指令和“点阵屏显示文本”指令，修改“点阵屏显示文本”指令的参数为“Go!”；在“校准板载指南针”指令后面再添加“点阵屏”清除指令和“点阵屏显示文本”指令，修改第二个“点阵屏显示文本”指令“的参数为“OK”。这样运行校准指令之前会有提示开始校准程序，完成后也有提示已经完成校准。

具体初始化程序代码如下图所示：

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LWt7So6g_gAEk9I5wgO%2F-LWt7YdyXWbExVODkcqN%2Fwulink6-2.png?generation=1548220522683618\&alt=media)

WU-Link电子罗盘校准操作可以按以下步骤操作：

1. 运行上图所示的校准程序。
2. 程序运行以后，点阵屏会显示“Go!”提示文本，这时让WU-Link在水平位置上旋转（比如放在桌面上旋转）。
3. 旋转一定时间以后（根据周围环境的不同，一般半分钟左右），当点阵屏显示“OK”时，表明电子罗盘校准完成。

#### 想一想：

除了以上介绍的校准提示方法，想一想，你还可以使用什么方法提示操作者开始校准、完成校准？

### 第二步：在点阵屏上显示方向角度值

电子罗盘校准完成后，就可以用它来指示方向。一般可以采用在点阵屏上显示方向角度值的形式指示方向。具体可以按以下步骤操作:

1. 将“点阵屏”类别中的“点阵屏清除”、“点阵屏显示数”指令拖动到编程区，与默认的“重复执行”指令组合，将“板载”类别中的“读板载指南针角度”指令拖动到“点阵屏显示数”指令的参数位置，作为它的参数。
2. 将“控制”类别中的“延时”指令拖动组合到“点阵屏显示数”指令的下方，修改它的参数值为“200”毫秒。

   具体的主程序代码如下图所示：

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LWt7So6g_gAEk9I5wgO%2F-LWt7Ye-HJjTRtanvm2R%2Fwulink6-3.png?generation=1548220513954979\&alt=media)

#### 试一试：

将WU-Link从北面开始，顺时针或者逆时针旋转，观察点阵屏上显示的角度值，你发现有什么规律？

### 第三步：在点阵屏上显示方向字母

WU-Link电子罗盘显示方向的角度值按顺时针方向从0度到360度依次递增。正北方是0度、正东方是90度、正南方是180度、正西方是270度（如下图所示）。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LWt7So6g_gAEk9I5wgO%2F-LWt7Ye1xK_SNiDMvJgr%2Fwulink6-4.png?generation=1548220514114055\&alt=media)

在WU-Link上显示方向的角度值并不直观，还可以采用显示四个方向英文字母的方式：E（东）、S（南）、W（西）、N（北）。

要在点阵屏上显示这些表示方向的字母，首先需要创建变量保存角度值，然后根据变量值进行判断、显示相应的字母。具体可以按以下步骤操作:

1.单击“变量”类别中的“创建变量”按钮，在打开的“新建变量”对话框中，输入需要创建的变量名称“角度”，最后单击“确定”按钮完成变量创建。

2.变量创建完成后，还需要初始化。将“变量”类别中的“声明变量类型并赋值”指令拖动到编程区，组合到原有初始化指令的下方。确认“声明变量类型并赋值”指令所声明的变量名称是“角度”，类型为“整数”。

3.将“数学与逻辑”类别中的“数值”指令拖动组合到“声明变量类型并赋值”指令右边，将所创建的变量"角度"赋值为“0”。 完整的初始化程序代码如下图所示：

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LWt7So6g_gAEk9I5wgO%2F-LWt7Ye3HwmwgxSs59cY%2Fwulink6-5.png?generation=1548220525877926\&alt=media)

4.将“变量”类别中的“赋值”指令拖动组合到默认的“重复执行”指令里，确认指令第一个参数是“角度”变量，再将“板载”类别中的“读板载指南针角度”指令拖动组合到“赋值”指令最后一个参数的位置，作为它的参数。

5.将“控制”类别中的“有条件执行”指令拖动组合到“赋值”指令的下方；单击指令左上角的“设置”按钮，在打开的设置窗口中，将左边的“否则如果”图标拖动两个组合到右边“如果”图标的下方，再拖动左边的“否则”图标、组合到右边“否则如果”图标的下方（如下图所示）；设置完成后，再次单击指令左上角的“设置”按钮关闭设置窗口。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LWt7So6g_gAEk9I5wgO%2F-LWt7Ye585jLd1B6P-ew%2Fwulink6-6.png?generation=1548220522612954\&alt=media)

6.将“数学与逻辑”类别中的“逻辑关系”指令作为“有条件执行”指令的条件，确认它是默认的“且”逻辑关系；再添加两个“逻辑比较”指令作为“逻辑关系”指令的两个参数，设置第一个“逻辑比较”指令为“角度”变量“”“45”，第二个“逻辑比较”指令为“角度”变量“≤”“135”。

7.将“点阵屏”类别中的“点阵屏显示文本”指令拖动组合到“有条件执行”指令的执行位置，修改这个指令的文本参数为“E”。

8.右键单击“有条件执行”指令的条件——“逻辑关系”指令，在打开的右键菜单中选择“复制”选项，将复制的“逻辑关系”指令拖动组合到“有条件执行”指令第一个“否则如果”的条件位置，修改这个指令第一个“逻辑比较”指令为“角度”变量“”“135”，第二个“逻辑比较”指令为“角度”变量“≤”“225”。

9.再次单击复制“逻辑关系”指令、添加到“有条件执行”指令第二个“否则如果”的条件位置，修改这个指令第一个“逻辑比较”指令为“角度”变量“”“225”，第二个“逻辑比较”指令为“角度”变量“≤”“315”。

10.复制三个“点阵屏显示文本”指令，添加到两个“否则如果”的执行位置，以及最后的“否则”的执行位置；依次修改这个三个指令的文本参数为“S”、“W”、“N”。 完整的主程序代码如下图所示：

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LWt7So6g_gAEk9I5wgO%2F-LWt7Ye7ENo8UXRLjRHi%2Fwulink6-7.png?generation=1548220522676061\&alt=media)

#### 试一试：

以上程序只能判断、显示四个方向；能不能修改程序，再增加“东南”、“西南”、“西北”、“东北”这四个方向的判断、显示？

## 拓展与思考

“用角度值指示方向”这种方法比较精确，可以准确得知方向的数值；“用字母指示方向”这个方法比较直观，能够马上知道当前的方向。能不能编写一个兼顾这两种方法的程序，用按键根据需要切换显示。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.haohaodada.cn/zai-xian-ru-men-ke-cheng/wulink-primer/lesson-6.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
