问题背景
现在有两个房间。在一个房间中,放置了一些开关;在另一个房间中,放置了一些灯泡。这些开关可以分别 控制灯泡的亮和灭。
在这两个房间中,有两个小朋友:阿果和小红。阿果在有开关的房间,小红在有灯泡的房间。阿果和小红不 能直接说话,也不能见面。
阿果想通过控制开关,向小红发送了一条文字信息,例如“你好”。这个文字内容不是定死的。阿果想发送其他信息也可以,比如 "today is a good day"。
小红在另一个房间中,只能看见灯泡不停的亮和灭,但是她能理解阿果传递的信息。
阿果和小红到底是怎么做到的?
项目目标
我们要设计一套系统,实现文字信息的发送和接收。
系统包含如下模块:
- 信息发送装置(一组开关)
- 信息接收装置(一组灯泡)
- 电源和控制电路(保证开关能点亮灯泡)
- 编码表(对信息进行编码)
完成的标准如下:
- 发送方能够自由发送文字信息(不是预设的信息)
- 接收方能根据规则正确地解读出信息
- 整个过程可以被完整解释
项目结构
我写了一个项目手册,其中设计了一些关键步骤,如下所示。
- 点亮一个灯泡。设计一个简单的电路,用一个开关控制灯泡的亮和灭。
- 发送一个信息。例如,用灯泡的亮和灭来传递一个“字符”。
- 点亮多个灯泡。把第一步的电路复制多份即可。
- 思考如何发送很多字,从而引出编码表。发现用拼音来编码比较方便。
- 灯泡数量如果太多,这个装置就太复杂了。要思考最少需要几个灯泡。发现引入二进制可以解决问题,最后得到我们需要的编码表。
- 利用编码表对文字进行编码和解码,从而实现信息的发送和接收。
注意,这个手册不是项目的说明书,你不需要严格按照它说的去实现。它的主要作用是启发思考。
关键思考
- 一个灯泡能表示两种状态:亮和灭。那么两个灯泡能表示几种状态?五个灯泡呢?
- 如何用方便的记号来表示灯泡的状态?
- 如何把灯泡的状态跟“信息”联系起来?
参考示例
下面这个东西,就是我实现的短信发送装置。
总的来说,这个项目非常有意思。我家小孩玩得很开心。做好这个装置后,我给他发了两个字。他对着编码表,开始查表,发现原来是 "sb"。他气得大叫,骂我臭爸爸。