2016-07-30 6 views
0

Есть ли у кого-нибудь ключи, как управлять двухцветным светодиодом ACR122U по методу Reader.control() на Android? (библиотека acssmc-1.1.3).ACR122U Управление светодиодами

Читаю 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 (количество повторений): количество повторений состояния первого и второго циклов?

Некоторые объясненные примеры были бы замечательными.

ответ

6

Команда, чтобы изменить состояние LED

 
+------+------+------+------+------+------+------+------+------+ 
| CLA | INS | P1 | P2 | Lc | DATA      | 
+------+------+------+------+------+------+------+------+------+ 
| 0xFF | 0x00 | 0x40 | SC | 0x04 | T1 | T2 | #R | 0x00 | 
+------+------+------+------+------+------+------+------+------+ 

, где СК определяет состояние светодиодов (непрерывно вкл/выкл, мигает), Т1/Т2 определяют мигающего форму волны, и #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 | 
+------+------+------+------+------+------+------+------+------+ 

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

 
RED ON ----------\     /----------\ 
        |     |   |      
RED OFF   \--------------------/   \-------------------- 

     \________/ \__________________/ \________/ \__________________/ 
     T1 = 500ms  T2 = 1000ms  T1 = 500ms  T2 = 1000ms 

     \_____________________________/ \_____________________________/ 
        Repetition 1     Repetition 2 

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

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

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

 
RED ON  ----------\     /----------\ 
        |     |   |      
RED OFF    \--------------------/   \-------------------- 

GREEN ON    /--------------------\   /-------------------- 
        |     |   |      
GREEN OFF ----------/     \----------/ 

      \________/ \__________________/ \________/ \__________________/ 
      T1 = 500ms  T2 = 1000ms  T1 = 500ms  T2 = 1000ms 

      \_____________________________/ \_____________________________/ 
        Repetition 1     Repetition 2 

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

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

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

 
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 | 
+------+------+------+------+------+------+------+------+------+ 

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

 
RED ON  --------------------\   /--------------... 
           |   | 
RED OFF      \----------/ 

GREEN ON      /----------\ 
           |   | 
GREEN OFF --------------------/   \--------------... 

      \__________________/ \________/ 
       T1 = 1000ms  T2 = 500ms 

      \_____________________________/ \_____________... 
        Repetition 1    Final state 
+1

хотел бы дать вам еще один +1 для вашего вопроса редактирования ... –

+0

ли вы на самом деле проверить это? Я не могу заставить состояние светодиода оставаться после завершения команды. Он прекрасно мигает, но, к сожалению, он возвращается к состоянию по умолчанию (красный) после завершения команды. Я использую ваш пример: '[0xFF, 0, 0x40, 0xDD, 0x04, 0x05, 0x0a, 0x02, 0x00]'. –

+0

@ AndréBorie Да, это работает на двух читателей ACR122U, которые у меня есть. –