Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Arduino. Wiegand to OneWire

Саша Дегтярев Ученик (147), закрыт 2 года назад
Имею 125 кГц RFID считыватель, с помощью библиотеки Wiegand возвращает номер rfid метки (ключа), который написан на самом ключе (без нулей в начале) в виде: 11603656 (номер на ключе: 0011603656). Так же есть считыватель от IronLogic CP-Z-2 (мод. Е Р) врезной, который подключается к Piranha Ultra с использованием библиотеки OneWire, он считывает побайтово и возвращает значения в виде: 1, C8, E, B1, 0, 35, 0, 6D. Вопрос состоит в том, как мне сделать из 11603656, которые я получаю от Wiegand'a, это: 1, C8, E, B1, 0, 35, 0, 6D (первая единица не обязательна, как я понял).
Лучший ответ
/bin/laden Искусственный Интеллект (122301) 2 года назад
если тебе надо составить пакет iButton, то последний байт - это CRC, т.е. ее еще надо посчитать на 56 предыдущих бит. 1 в начале - код семейства, всегда 01h. код CRC можно найти в 1-wire библиотеке. Длина данных метки 26 бит, у iButton 48 бит, соотв. присутствует заполнение, но почему оно 35h - в документации не написано, хотя это и не важно, ты же все равно ключи переписывать будешь.
вот, накидал пример
https://pastebin.com/8Xw0kHvY
Саша ДегтяревУченик (147) 2 года назад
Спасибо большое за код, сейчас одна проблема: нужно вывести его в Serial.print (в вывод порта), как можно это сделать?
Саша Дегтярев Ученик (147) Вместо использования printf*
Саша ДегтяревУченик (147) 2 года назад
Не совсем понимаю о чём вы(
/bin/laden Искусственный Интеллект (122301) Саша Дегтярев, если код как есть залить не будет печатать в порт? просто интересно ) Если не будет, разбей printf на отдельные байт данных и пробел, но я хз как в шестнадцатиричном формате выводить.
Саша ДегтяревУченик (147) 2 года назад
Если как есть, то не выводит в порт. Serial.print может сам переводить, типа Serial.print(122, HEX). Сейчас попробую побайтово. Но что такое %02X%lc?
/bin/laden Искусственный Интеллект (122301) Саша Дегтярев, это комбинированное - байт и сепаратор, наждый 16 байт заменяется на перевод строки (это я из другого проекта взял с большими буферами, тут это не нужно)
Саша ДегтяревУченик (147) 2 года назад
Подскажите пожалуйста, где именно?)
/bin/laden Искусственный Интеллект (122301) Саша Дегтярев, ты ведь код как есть залил с int num = 11603656;? вот int надо поменять на 32 битный тип
Саша ДегтяревУченик (147) 2 года назад
uint32_t идеально подходит (библеотека OneWire только их и использует). Спасибо огромное за помощь, всё получилось :3
Остальные ответы
Лаверна Маньяковна Просветленный (45613) 2 года назад
Взять второй-четвертый байты, поменять очередность 00 B1 0E C8 и преобразовать из hex в dec


Тьфу тебе же наоборот надо, значит просто 0011603656 преобразуй из dec в hex 00B10EC8 и поменяй очередность байт
Похожие вопросы