Dallas Touch Memory (DS1990A) получить номер ключа

kristow
kristow аватар
Offline
Зарегистрирован: 08.08.2013

Привет всем.

У меня считыватель карт доступа Matrix 2. Он умеет работать как эмулятор (DS1990A).

С помощью кода я получаю некий набор символов при чтении карты, а хочу получать приведенный к нормальному виду номер карты, который написан на самой карте...

При чтении карты с реальным номером 944884 я получаю вот такой код: 1F46AE010EE.

Подскажите пожалуйста, как можно преобразовать полученный код в номер карты?

Сам скетч:

#include <OneWire.h>

OneWire ds(8); // выход считывателя на 7 пин

byte addr[8];// буфер приема

void setup() {// стартовая инициализация
  Serial.begin(9600);
  delay(100);
  Serial.println("Start...");
  
}

void loop() {  
  if(ds.reset()){ // если обнаружено устройттво
    ds.write(0x33); // отправляем команду "считать ROM"
    delay(50); // на всякий случай ждем
    for(int i=0;i<8;i++){
      addr[i] = ds.read(); // считываем
    }
    
    Serial.print("ROM ="); // выводим
  for(int i = 0; i < 8; i++) {
    //Serial.write(' ');
    Serial.print(addr[i], HEX);
  }
  
  Serial.println();
    
    delay(500);
  }
  
}

 

toc
Offline
Зарегистрирован: 09.02.2013

гугл говорит 944884 to hex =0x 0E 6A F4
прочитайте задом на перёд получится фрагмент вашего номера: F46AE0.

p.s. не надо создавать одинаковые темы в разных разделах форума

kristow
kristow аватар
Offline
Зарегистрирован: 08.08.2013

Да я это понял.

Только вот HEX не могу перевести в DEC.

Нашел вот такую функцию, но она почему-то дает ответ 27380 на подставленную строку E6AF4.

Подскажите как грамотно преобразовать HEX в DEC! В калькуляторе считает верно.

unsigned int hexToDec(String hexString) {
  
  unsigned int decValue = 0;
  int nextInt;
  
  for (int i = 0; i < hexString.length(); i++) {
    
    nextInt = int(hexString.charAt(i));
    if (nextInt >= 48 && nextInt <= 57) nextInt = map(nextInt, 48, 57, 0, 9);
    if (nextInt >= 65 && nextInt <= 70) nextInt = map(nextInt, 65, 70, 10, 15);
    if (nextInt >= 97 && nextInt <= 102) nextInt = map(nextInt, 97, 102, 10, 15);
    nextInt = constrain(nextInt, 0, 15);
    
    decValue = (decValue * 16) + nextInt;
  }
  
  return decValue;
}

 

Radjah
Offline
Зарегистрирован: 06.08.2014

Serial.print(addr[i]);

 

Например