中文乐高

 找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 6984|回复: 15

【原创】NXT-G、EV3密码锁编程技巧

  [复制链接]
发表于 2014-5-14 18:42:28 | 显示全部楼层 |阅读模式
本帖最后由 jiangfz 于 2014-5-15 18:08 编辑

这些只是我的一点粗浅的经验,大神轻喷

最近社团里的同学想到要搭一个用乐高小球作钞票的ATM机,机器的编程任务自然也就落到了我的头上,也就是因为这件事,我才去构思了关于密码锁的编程,从而得出的一些经验,新手也可以把它当成教程看,我也会把我在思考时的思路写出来。

好了,废话也讲够了,那就让我们正式开始吧。

首先,我构思了三种密码锁的形式:插卡式,颜色密码式和按键密码式。

我个人认为插卡式的编程最容易理解,颜色密码式的也比较简单,而按键密码式的密码锁让我构思了很长时间。而实际应用到ATM机里的是插卡式和按键密码式的集合,也就是一张卡对应一个按键密码(当然,这是后话)。而且ATM机中需要很多的按键,也就是要通过蓝牙来传输信息,这个问题我还未解决。不过这些问题不是关键,所以这里也不再提了。

既然插卡式的最简单,那我们就从插卡式的先开始吧。

插卡式,就是在用梁做出来的一块板的前端或中央,接上不同颜色的梁(贴上纸也行),再让颜色传感器检测是否正确,和真正的银 行 卡是差不多的,只不过乐高似乎没有磁力传感器,所以没法刷真正的银 行 卡,不知道论坛的视频里的那个外国大神是怎么做出来的。(话说看了那个大神的作品瞬间自己就没信心了)

在这里引入一下逻辑电路中的东西,在NXT和EV3的编程软件里也有,就是逻辑运算。在做很多密码锁的时候,都需要用到与门(也就是逻辑运算里的and),很多人都应该知道,与门分输入端和输出端,输入端可以有很多个(当然在逻辑运算模块里只有两个输入端),但输出端只有一个,它的作用是,在输入端输入的信号都为“true”时,输出端才会输出“true”,否则就输出“false”。这在密码锁的编程中尤为有用,在编写多位密码时,只需要用逻辑变量,每一个传感器都用一个开关,当传感器接收到的条件符合时,将变量改为“true”,不符合时,输入“false”,再在最后用多个逻辑运算“and”判断条件是否完全符合。(在编写多位密码【n位】时,可以用数字变量,每次符合时都加1,再在最后比较变量中的数字与n的大小,当相等时说明条件完全符合,但逻辑运算比较简单易懂,而且用数字变量时需要在每次循环开始时重置,比较麻烦【其实也不麻烦】,所以这里还是主要讲逻辑运算)


我个人觉得插卡式的密码锁比较简单,因为是几个传感器在同一时间工作,所以不需要套多个循环,也不需要考虑在输入时的时间间隔问题,所以编起来比较方便,我就选了从这里入手。

因为同学硬要加一个触碰传感器,说要有安全措施,我觉得没什么必要,但是迫不得已还是加了上去。所以,我们先加一个等待模块,当触碰传感器按下时,执行后面的程序。(因为我很看不惯EV3的等待模块,所以我特地加了一个变量和一个循环,在触碰传感器按下时跳出循环,执行后面的程序)


NXT-G:
NXT-G_1.png
EV3:
EV3_1.png

之后决定你要用几个颜色传感器,然后再添加几个变量,再用开关,当条件符合时,在变量中输入“true”,最后用逻辑运算,当条件完全符合时,跳出循环,执行后面的程序。这里我分别用两个和三个演示。(其实可以发现,在有n个传感器时,会需要用【n-1】个逻辑运算模块,我是n为双数时每个都写出个数再来找规律,n为单数时把其中两个加一个逻辑运算模块,看成一个,再用双数的规律,大家可以找找看有没有更好的方法)

NXT-G:
NXT-G_2.png

NXT-G_3.png

EV3:
EV3_2.png
EV3_3.png

之后再编插卡后要执行的程序,我编的是发出声音+显示“Welcome!Please enter the password”。之后,插卡式密码锁的简单程序就编完了。

接下来我想到的是颜色密码式的密码锁,这个因为只有一个传感器,但有多次的输入,所以也不算难,只需要多加几个循环,再在每个循环中用不同的变量就可以了。下面我还是用两位的和三位的的颜色密码来演示。(话说在EV3里的颜色传感器的开关一直用不好,研究了好久才弄清楚是怎么用的)


NXT-G:
NXT-G_4.png
NXT-G_5.png
NXT-G_6.png
EV3:
EV3_4.png

EV3_5.png

但如果这么编的话,如果输入的是错误的,机器就不会有反应,这样密码就很容易被试出,所以要再添加一个变量,使程序即使检测到了错误的密码,也会跳出循环。

NXT-G:
NXT-G_7.png

EV3:
EV3_6.png

而且大家可能会遇到只是一次输入,传感器却认为是两次或三次这种情况,为了避免这类情况的发生,可以再在每次输入后放一个声音模块,既充当延时,有可以提示用户已经输入了。

NXT-G:
NXT-G_13.png

EV3:
EV3_12.png

我想到的三种密码锁中,我觉得按键式密码锁是最难的,很多按键式密码锁不仅按键很多,密码位数很多,而且还要考虑每次输入的时间差,以及怎么探测是否有输入等等,我在开始时也困惑了许久。

首先需要解决的是如何探测是否有输入,这个我想到了一个方法,就是每一位密码都设置一个变量,然后每一位密码都套一个循环,都检测一次,在最后用逻辑运算检测条件是否完全符合。这样既解决了探测是否有输入的问题,连时间差的问题也一并解决了。我光这样说可能很多人听不懂,还是直接上截图吧。这次我用四位的密码演示。

NXT-G:
NXT-G_8.png

NXT-G_9.png

NXT-G_10.png

NXT-G_11.png

NXT-G_12.png

EV3:
EV3_7.png

EV3_8.png

EV3_9.png

EV3_10.png

EV3_11.png

这样就能比较完美地解决这两个问题了,如果大家还有更好的方案或有什么建议,欢迎回复

以上就是我总结出的密码锁的编程技巧了,最后,献上程序以及截图打包,还有用上面提过的数字变量的方法做的密码锁。(截图就不截了)

版权所有:jiangfz

密码锁编程技巧.zip

2.83 MB, 下载次数: 545

评分

参与人数 2乐币 +20 人气 +20 收起 理由
韩启朝 + 10 + 10 支持原创!
Mr.wzy + 10 + 10 不错,学习了

查看全部评分

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
 楼主| 发表于 2014-5-14 18:47:50 | 显示全部楼层
自顶
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2014-5-14 21:27:15 | 显示全部楼层
好文!先顶后看。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2014-5-14 22:43:29 | 显示全部楼层
楼主厉害,谢楼主!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2014-5-15 08:11:31 | 显示全部楼层
很强大,学习中
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2014-5-15 09:55:59 | 显示全部楼层
强大,慢慢学习
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2014-5-15 10:32:25 | 显示全部楼层
学习中 谢谢分享
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2014-5-15 11:38:42 | 显示全部楼层
学习了,我之前做的密码是使用马达转到控制的数值,有点类似保险箱转动的。还是NXT的,原理都是一样的。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2014-5-15 16:02:28 | 显示全部楼层
顶!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2017-8-29 15:30:14 | 显示全部楼层
羡慕 我来学习一个
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2017-9-2 11:52:59 | 显示全部楼层
先赞在看
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2017-10-21 12:05:04 | 显示全部楼层
强大的干货,感谢分享,希望能多多的学习
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2017-11-1 19:10:04 | 显示全部楼层

倒数第二张图片,为什么我的程序和您的一样,但是无法中断循环呢?可以请教一下吗?老师
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2017-11-1 19:21:19 | 显示全部楼层
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2018-6-7 16:09:28 | 显示全部楼层
受教了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|中文乐高 ( 桂ICP备11003955号-1 )

GMT+8, 2019-3-25 09:30 , Processed in 0.030691 second(s), 25 queries .

快速回复 返回顶部 返回列表