ACR122U Светодиодное управление

Кто-нибудь знает, как управлять двухцветным светодиодом ACR122U с помощью метода Reader.control() на андроид? (библиотека 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};

Эти вещи я не понимаю

  • Байт 3 (P2): я не могу понять, как это настроить.
  • Байт 5 (T1): продолжительность первого цикла, каким-то образом управляемая из байта 3?
  • Байт 6 (T2): Продолжительность состояния второго цикла, которая каким-то образом контролируется из байта 3?
  • Байт 7 (количество повторений): количество общих повторений состояний 1-го и 2-го цикла?

Некоторые объясненные примеры были бы потрясающими.

1 ответ

Решение

Команда для изменения состояния светодиода

+------+------+------+------+------+------+------+------+------+
| CLA  | INS  | P1   | P2   | Lc   | ДАННЫЕ |
+------+------+------+------+------+------+------+------+------+
| 0xFF | 0x00 | 0x40 | SC   | 0x04 | T1   | T2   | #R   | 0x00 |
+------+------+------+------+------+------+------+------+------+

где SC определяет состояние светодиодов (постоянно включается / выключается, мигает), T1/T2 определяет форму мигающей волны, а #R определяет количество повторений формы мигающей волны.

Таким образом, основным параметром, определяющим, как должны мигать светодиоды и как они должны выглядеть после окончания мигания, является SC. Это поле из 8 битов:

  • Бит 0: этот флаг определяет состояние красного светодиода после окончания мигания (см. Также бит 2).
  • Бит 1: этот флаг определяет состояние зеленого светодиода после окончания мигания (см. Также бит 3).
  • Бит 2: только если этот флаг установлен (1), состояние красного светодиода будет установлено на значение бита 0 после окончания мигания. Если этот флажок снят (0), красный светодиод вернется в состояние, в котором он находился до того, как была введена команда управления светодиодом.
  • Бит 3: только если этот флаг установлен (1), состояние зеленого светодиода будет установлено на значение бита 0 после завершения мигания. Если этот флажок снят (0), зеленый светодиод вернется в состояние, в котором он находился до того, как была введена команда управления светодиодом.
  • Бит 4: этот флаг определяет состояние, в котором красный светодиод должен быть установлен в начале выполнения команды управления светодиодом.
  • Бит 5: Этот флаг определяет состояние, в котором должен быть установлен зеленый светодиод в начале выполнения команды управления светодиодом.
  • Бит 6: этот флаг определяет, должен ли красный светодиод переключаться с мигающей формой волны.
  • Бит 7: этот флаг определяет, должен ли зеленый светодиод переключаться с мигающей формой волны.

Итак, давайте предположим, что вы установили биты 4 и 6 SC (и очистите остальные), то есть SC = 0x50. Кроме того, вы устанавливаете T1 = 5 (0x05), T2 = 10 (0x0A) и #R = 2 (0x02). Таким образом, у вас есть следующая команда:

+ ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ +
| 0xFF | 0x00 | 0x40 | 0x50 | 0x04 | 0x05 | 0x0A | 0x02 | 0x00 |
+ ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ +

Затем зеленый светодиод выключится, а красный светодиод мигнет два раза со следующей формой волны:

КРАСНЫЙ НА ----------\                    /----------\
                   |                    |          |                    
КРАСНЫЙ ВЫКЛЮЧЕНО \--------------------/          \-------------------- 

         \________/ \__________________/ \________/ \__________________/
         T1 = 500 мс T2 = 1000 мс T1 = 500 мс T2 = 1000 мс

         \_____________________________/ \_____________________________/
                  Повторение 1 Повторение 2

Теперь давайте предположим, что вы также хотите мигать зеленым светодиодом, но с его начальным состоянием, установленным в положение "выкл." (Так что мигание переключается между красным и зеленым вместо красного и без подсветки). Поэтому вы также устанавливаете бит 7 SC, то есть SC = 0xD0. Таким образом, у вас есть следующая команда:

+ ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ +
| 0xFF | 0x00 | 0x40 | 0xD0 | 0x04 | 0x05 | 0x0A | 0x02 | 0x00 |
+ ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ +

Тогда красный светодиод и зеленый светодиод будут попеременно мигать два раза со следующей формой волны:

КРАСНЫЙ НА ---------- \ / ---------- \
                     | | |                    
КРАСНЫЙ ВЫКЛЮЧЕНО \ -------------------- / \ --------------------

ЗЕЛЕНЫЙ ВКЛ /--------------------\          /--------------------
                     |                    |          |                    
ЗЕЛЕНЫЙ ВЫКЛ ----------/                    \----------/

           \________/ \__________________/ \________/ \__________________/
           T1 = 500 мс T2 = 1000 мс T1 = 500 мс T2 = 1000 мс

           \_____________________________/ \_____________________________/
                    Повторение 1 Повторение 2

Теперь давайте предположим, что после того, как мигание закончилось, вы хотите, чтобы красный светодиод был постоянно включен, а зеленый светодиод был постоянно выключен. Поэтому вам необходимо установить биты 2 и 3, чтобы можно было определить конечное состояние двух светодиодов. (Если вы не установите эти биты, то значения битов 0 и 1 будут просто игнорироваться.) Затем вы захотите определить конечное состояние: красный включен (бит 0 = 1) и выключен (бит 1 = 0). Следовательно, вы получаете SC = 0xDD. Таким образом, у вас есть следующая команда:

+ ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ + | 0xFF | 0x00 | 0x40 | 0xDD | 0x04 | 0x05 | 0x0A | 0x02 | 0x00 | + ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ +

Затем красный светодиод и зеленый светодиод будут попеременно мигать два раза, красный светодиод включится после мигания, а зеленый светодиод выключится. Вы получите следующую форму волны:

КРАСНЫЙ НА ----------\                    /----------\                    /--------------...
                     |                    |          |                    |
КРАСНЫЙ ВЫКЛЮЧЕНО \--------------------/          \--------------------/

ЗЕЛЕНЫЙ ВКЛ /--------------------\          /--------------------\
                     |                    |          |                    |
ЗЕЛЕНЫЙ ВЫКЛ ----------/                    \----------/                    \--------------...

           \________/ \__________________/ \________/ \__________________/
           T1 = 500 мс T2 = 1000 мс T1 = 500 мс T2 = 1000 мс

           \_____________________________/ \_____________________________/ \_____________...
                    Повторение 1 Повторение 2 Конечное состояние

Наконец, вы хотите уменьшить количество повторений до 1 (#R = 0x01) и инвертировать верхнюю и нижнюю фазы мигающей формы волны (T1 = 0x0A и T2 = 0x05). Таким образом, у вас есть следующая команда:

+ ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ +
| 0xFF | 0x00 | 0x40 | 0xDD | 0x04 | 0x0A | 0x05 | 0x01 | 0x00 |
+ ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ + ------ +

Вы получите следующую форму волны:

КРАСНЫЙ НА --------------------\          /--------------...
                               |          |
КРАСНЫЙ ВЫКЛ \ ---------- /

ЗЕЛЕНЫЙ ВКЛ / ---------- \
                               | |
ЗЕЛЕНЫЙ ВЫКЛ --------------------/          \--------------...

           \__________________/ \________/
               T1 = 1000 мс T2 = 500 мс

           \ _____________________________ / \ _____________...
                    Повторение 1 Конечное состояние
Другие вопросы по тегам