Dallas Touch Memory (DS1990A) получить номер ключа
- Войдите на сайт для отправки комментариев
Ср, 29/07/2015 - 07:48
Привет всем.
У меня считыватель карт доступа 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);
}
}
гугл говорит 944884 to hex =0x 0E 6A F4
прочитайте задом на перёд получится фрагмент вашего номера: F46AE0.
p.s. не надо создавать одинаковые темы в разных разделах форума
Да я это понял.
Только вот 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; }Serial.print(addr[i]);
Например