本帖最后由 weixingl888 于 2012-8-29 18:43 编辑

存档在这里:
http://pan.baidu.com/share/link?shareid=7709&uk=3204872590
说明下,存档中有两种设备,一种是利用活塞的,一种是本教程做的利用RS锁存器的,大家喜欢哪个可以慢慢研究。

我用黄金、钻石、青金石方块标记出了装置的输入输出接口。
黄金下面的红石线是输出,会在投入物品正确的时候输出一个长度在1s左右的信号。
钻石下面是投入物品用的水流。
青金石下面的红石线是状态输出,会在投入物品后,未完成识别之前输出1,待命状态输出0。

如果想调整装置识别的物品类型,把那个发射器里放满你需要识别的物品就可以。

==========================下面是教程==========================
昨天在MCBBS一直传不好图,就一直没发,现在补上。(卤蛋说用图床,可是图很多诶!)

其实这贴只是在
http://www.mcbbs.net/forum.php?mod=viewthread&tid=47615
的基础上解答很多人提出的一个问题:

这个只能识别不对的物品丫,完全跟我需要的反着啊!

对于这个问题,我首先要回复的是:
浑淡!你学红石是为啥啊?!装B么?为毛不会自己稍微动一动脑子呢?!很容易就能想出解决方案的啊!!
不过既然这么多人问了,我也不好地图炮攻击,就再发一个帖子解答你们的这个问题吧。

-------------------------------------------------------
如果想自己思考的,不要继续看了,我不希望大家受到我思路的限制
-------------------------------------------------------

先说下思路:当物品通过1号踏板的时候,记录一下,一段时间(自己定义)之后,如果物品一直没有通过2号踏板,就是识别成功,如果物品通过了2号踏板,就是识别失败。


哦对了,为了方便回收物品和复位,我们把2号踏板改造一下,见下图:


恩,下面就请出记录通过1号踏板状态的主人公----RS锁存器
在这里我为了方便整合到电路中,我采用了这种设计方案:

首先讲解下,RS锁存器有两个输入端,就是你图上看到的红石线,任何一个输入端被激活之后,另一个都会熄灭,然后保持住这个状态,见下图:



好了,现在我们就把RS锁存器整合到我们的电路中吧(为了压缩体积,我稍微改造了下,相信大家能看懂)!


然后把1号踏板和RS锁存器的上端连起来,这样一旦1号踏板被激活,都会使RS锁存器的上端保持激活。


然后把2号踏板和RS锁存器的下端连起来,这样2号踏板被激活之后,物品鉴定失败,就会把RS锁存器重置到图中的状态,我们就知道物品识别失败了(刚才LZ忘记把1号踏板和发射器连起来了)。


然后引出RS锁存器的识别状态输出:


这次我们还是识别红石:


投入红石



可以看到,最终RS的输出端是激活状态(因为2号踏板没被激活):

相信看到这里,已经很多人都知道该怎么继续了,不过我还是继续造完吧。

下面我们扔一个错误物品试试:

可以看到首先1号踏板被激活了,RS锁存器的输出端同样被激活,发射器射出了红石。


然后很快物品碰到了2号踏板,于是RS锁存器被复位,输出端熄灭,说明识别失败。

恩,工作很正常,正如我们预料的。
不过有个问题,既然错误物品也会激活一次输出端,那我要是做个商店的话,岂不是即使即使物品错误还是会激活发射器?

恩,于是我们加入了第二个系统:延时状态判断。
思路是当1号踏板被激活后,延迟一段时间之后再读取RS锁存器的值,这样就可以绕过错误物品激活1号踏板造成的误判了。

下面加入延时部分:


这几个中继器的延迟设定就是用来绕过误判的延迟了。

RS的输出端可以拆掉了,我们将用新的输出。

这里我们用了9个中继器,是考虑到有些时候可以比较卡,需要把延时调长一些,用9个的话相信什么情况都可以适用了(LZ比较喜欢图中的延迟设定)。

然后我们加入读取输出的部分:
这里采用了一个非门,因为RS的输出,就是上面那个红石火把的反值。至于为什么采用中继器,你们自己用红石线试试就知道了。


然后这里就是我们的新输出端了,可以拆掉之前那个了。

接着我们把延时系统的输出与读取RS输出的部分连起来,这样就可以做到只有延时系统的信号传递到这里时,读取RS输出的部分才可以读出RS锁存器的值(看不懂的可以问)。

接着我们就扔进去一个红石看看效果吧:
可以看到延时系统的信号传递到了读取RS输出的部分,此时电路输出为1(左边)。


RS的状态不变,但是延时系统的信号传递完成,可以看到电路输出为0(因为读取输出的部分没有收到延时系统的信号,关掉了)。

正符合我们的预期!

下面这张图就是错误物品的情况了:
可以看到,此时延时系统的信号并未到达,2号踏板已经被激活了,RS状态被复位。

所以这样我们就可以实现物品是否正确的判断了。

有些人可能会接着问:如果我想加入工作状态指示灯功能怎么办?
我再次解答你的疑问!

下面这张图中,我指着的这条红石线,就是状态指示了,当物品碰到1号踏板时,说明装置已经开始工作,此时这条红石线应该为1,当物品碰到2号踏板,或是延时系统信号到达,都说明工作结束,此时这条红石为0。

细心的人就会发现,不对!如果物品正确的话,这条线会一直为1,但是装置已经停止工作了!
没错,所以接下来我要加入的,就是自动复位功能了,这样即使物品是正确的,我们也会在系统输出1之后将整个系统复位到初始状态。
具体方法如下图:
这样当输出1之后,RS锁存器会自我复位。


接下来我们就投入一个物品试试吧!(左下角可以看出,LZ一直在服务器里制作,所以大家不用担心这套系统能否在服务器正常工作)
此时物品碰到了1号踏板,RS锁存器记录"正在工作"状态(上面的红石线亮了)。

延时系统脉冲到达(其实已经过了,我截图晚了一点点),系统输出为1(左侧)


输出同时自我复位,RS锁存器记录"待命状态"(上面的红石线熄灭了)。

这样,指示工作状态部分也完成了。

然后,就是最后的部分了,加入回收物品功能,方法如下:
把粘性活塞放置在这个位置(为了压缩空间,所以我采用推冰块来使物品掉落,而不是拉)


然后把延迟系统输出连上,这样整个系统输出的同时,活塞就会清掉物品。


然后把2号踏板连上活塞(其实这里不连也无所谓)。


然后我们来看一下效果,已经扔进了一个红石,此时延时系统还没输出。


输出的同时,活塞推出,红石掉落到下面。

下面这张图是延时系统还没输出,物品激活2号踏板时的情形。


好了,一切都完成了,我们来搭建一个真实的投币口看看效果吧!

这个活塞会和工作指示部分相连,一旦开始工作,就会封住投币口。(大家也可以采用红石灯指示工作状态,不封闭投币口)


然后和工作指示部分连上。


然后把发射器和最终输出连起来,这样投币正确就会吐出东西。(有人乱入)


放上钻石




投入一个红石试试。


可以看到,投币口封闭了,表示正在工作。


投币正确,发射器吐出钻石!

工作很正常!

下面这张图是我之前没有采用RS锁存器,用活塞造的另一个版本,看起来似乎复杂了一些。


两个版本对比。


乱入的人:


稍后放出存档。
PS:直接传论坛之后图好小啊!