有没有人知道如何通过Android上的Reader.control()
方法控制ACR122U的双色LED? (图书馆acssmc-1.1.3)。
我正在阅读API并且不知道命令描述的含义:
示例:
byte[] command = {(byte) 0xFF, (byte) 0x00, (byte) 0x40, (byte) 0b01110111, (byte) 0x04, (byte) 20, (byte) 30, (byte) 3, (byte) 2};
这些我不明白的事情:
一些解释的例子很棒。
答案 0 :(得分:7)
更改LED状态的命令是
+------+------+------+------+------+------+------+------+------+ | CLA | INS | P1 | P2 | Lc | DATA | +------+------+------+------+------+------+------+------+------+ | 0xFF | 0x00 | 0x40 | SC | 0x04 | T1 | T2 | #R | 0x00 | +------+------+------+------+------+------+------+------+------+
其中SC定义LED的状态(连续开/关,闪烁),T1 / T2定义闪烁波形,#R定义闪烁波形的重复次数。
因此,定义LED应该如何闪烁以及它们在闪烁完成后应该如何看的主要参数是SC。这是一个8位的字段:
因此,假设您设置SC的第4位和第6位(并清除其余部分),即SC = 0x50。此外,设置T1 = 5(0x05),T2 = 10(0x0A)和#R = 2(0x02)。因此,您有以下命令:
+------+------+------+------+------+------+------+------+------+ | 0xFF | 0x00 | 0x40 | 0x50 | 0x04 | 0x05 | 0x0A | 0x02 | 0x00 | +------+------+------+------+------+------+------+------+------+
然后绿色LED将熄灭,红色LED将以下列波形闪烁两次:
RED ON ----------\ /----------\ | | | RED OFF \--------------------/ \-------------------- \________/ \__________________/ \________/ \__________________/ T1 = 500ms T2 = 1000ms T1 = 500ms T2 = 1000ms \_____________________________/ \_____________________________/ Repetition 1 Repetition 2
现在,让我们假设你也想要闪烁绿色LED,但是它的初始状态设置为关闭(这样闪烁在红色和绿色之间切换而不是红色和没有光)。因此,您还要设置SC的第7位,即SC = 0xD0。因此,您有以下命令:
+------+------+------+------+------+------+------+------+------+ | 0xFF | 0x00 | 0x40 | 0xD0 | 0x04 | 0x05 | 0x0A | 0x02 | 0x00 | +------+------+------+------+------+------+------+------+------+
然后红色LED和绿色LED将以下列波形交替闪烁两次:
RED ON ----------\ /----------\ | | | RED OFF \--------------------/ \-------------------- GREEN ON /--------------------\ /-------------------- | | | GREEN OFF ----------/ \----------/ \________/ \__________________/ \________/ \__________________/ T1 = 500ms T2 = 1000ms T1 = 500ms T2 = 1000ms \_____________________________/ \_____________________________/ Repetition 1 Repetition 2
现在,假设闪烁完成后,您希望红色LED持续亮起,绿色LED持续关闭。因此,您需要设置位2和3,以便能够定义两个LED的最终状态。 (如果不设置这些位,则将忽略位0和1的值。)然后,您需要定义红色的最终状态(位0 = 1)和绿色关闭(位1 = 0)。因此,您得到SC = 0xDD。因此,您有以下命令:
+------+------+------+------+------+------+------+------+------+ | 0xFF | 0x00 | 0x40 | 0xDD | 0x04 | 0x05 | 0x0A | 0x02 | 0x00 | +------+------+------+------+------+------+------+------+------+
然后红色LED和绿色LED交替闪烁两次,闪烁后红色LED将亮起,绿色LED将熄灭。您将获得以下波形:
RED ON ----------\ /----------\ /--------------... | | | | RED OFF \--------------------/ \--------------------/ GREEN ON /--------------------\ /--------------------\ | | | | GREEN OFF ----------/ \----------/ \--------------... \________/ \__________________/ \________/ \__________________/ T1 = 500ms T2 = 1000ms T1 = 500ms T2 = 1000ms \_____________________________/ \_____________________________/ \_____________... Repetition 1 Repetition 2 Final state
最后,您希望将重复次数减少到1(#R = 0x01),并且要反转闪烁波形的高低相位(T1 = 0x0A和T2 = 0x05)。因此,您有以下命令:
+------+------+------+------+------+------+------+------+------+ | 0xFF | 0x00 | 0x40 | 0xDD | 0x04 | 0x0A | 0x05 | 0x01 | 0x00 | +------+------+------+------+------+------+------+------+------+
您会收到以下wave格式:
RED ON --------------------\ /--------------... | | RED OFF \----------/ GREEN ON /----------\ | | GREEN OFF --------------------/ \--------------... \__________________/ \________/ T1 = 1000ms T2 = 500ms \_____________________________/ \_____________... Repetition 1 Final state