Добрый день! Очередной дубликатор домофонных ключей (iButton) на Arduino Uno с энергонезависимой памятью. Небольшое техническое задание.
Итак, что должно уметь:
1. Копировать ключи, iButton -> iButton;
2. Сохранять ключи, iButton -> Внутренняя память (99 ключей);
3. Записывать ключи, Внутренняя память -> iButton;
4. Восстанавливать «программно убитые» ключи.
Для сборки понадобится Arduino Uno R3, LCD Keypad Shield, считыватель iButton, два резистора 330 Ом. Arduino Uno R3 — известный герой многих обзоров.
LCD Keypad Shield — «франкенштейн» из этого обзора.
Считыватель iButton — покупал тут. Если в двух словах, то брать стоит. Качественный считыватель.
Распиновка считывателя:
Чёрный провод — GND.
Белый провод — Data.
Красный и зелёный провода — двухцветный светодиод. При протекании тока в «прямом» направлении — светится красным, в «обратном» — зелёным.
Два резистора 330 Ом, первый для «подтяжки» Data-линии считывателя к +5В, резистор припаиваем между выводом D11 и +5В Arduino Uno.
Второй для ограничения тока протекающего через двухцветный светодиод считывателя. Режем красный или зелёный провод считывателя и в разрыв припаиваем резистор.
Гребёнка на 4 пина.
Прошиваем Arduino Uno.
Прошивку в виде hex — файла берём тут. Так же прошивка и исходник есть на гитхабе: github.com/kvolk2git/IButton-Duplicator-With-Mem-LCD
Программное обеспечение для прошивки Arduino Uno берём тут, или на гугл-диске вместе с прошивкой.
Инструкция по прошивке
— подключаем Arduino в USB-порт
— выбираем Hex файл
— выбираем тип Uno
— выбираем COM порт, который создался при подключении Arduino к USB
— скорость 57600 (115200).
— нажимаем Upload
Если Вы предпочитаете исходные коды, скетч лежит там же, недостающие библиотеки берём на просторах интернета.
Приступим к сборке, схему рисовать не вижу смысла, всё собирается за 5 минут.
Припаиваем резисторы, первый.
Теперь второй.
Припаиваем гребёнку, предварительно согнутую под углом 30-45 градусов, на пины D11, D12, D13, GND.
Подключаем считыватель, предварительно завязал провода в узел и продел между пинами VIN и A0 Arduino Uno.
Далее соединяем модуль-франкенштейн LCD Keypad Shield с Arduino Uno.
Подключаем питание.
Сборка закончена.
Как этим пользоваться?!
Кнопка RST — аппаратная перезагрузка устройства.
Кнопки UP и DOWN отвечают за переход по ячейкам памяти для хранения/записи ключей.
Основное меню:
Кнопка SELECT — запись iButton ключа, если до нажатия был приложен ключ, то запишется в болванку код ранее считанного ключа, иначе в болванку запишется ключ из текущей (выбранной) ячейки памяти.
Кнопка RIGHT — меню записи ключа в память устройства.
Кнопка LEFT — включение/отключение подсветки дисплея.
Меню записи ключа в память устройства:
Кнопка RIGHT — отмена записи.
Кнопка LEFT — подтверждение записи.
Кнопка SELECT — выбор действия.
Индикация считывателя:
Красный свет — ожидание записи ID в iButton, приложите ключ для записи.
Зелёный свет — ID считан с iButton.
Консольные команды вводятся в мониторе порта Arduino IDE
Команды управления не чувствительны к регистру:
Memtest — тест энергонезависимой памяти устройства, все сохранённые ключи будут стёрты.
KeyForceSave — Запись ключа в память устройства.
Пример команды:
KeyForceSave:2#aabbccddeeff1234
Синтаксис команды:
KeyForceSave — команда
: — разделитель
2 — записать во вторую ячейку памяти
# — разделитель
AABBCCDDEEFF1234 — ключ который будет сохранён во вторую ячейку памяти устройства.
KeySave — Запись «корректного» ключа в память устройства, в отличие от команды KeyForceSave перед записью в память устройства для вводимого ключа будет подсчитана правильная контрольная сумма и family code ключа будет заменён на «01».
Пример команды:
KeySave:3#aabbccddeeff1234
Синтаксис команды:
KeySave — команда
: — разделитель
3 — записать в третью ячейку памяти
# — разделитель
01BBCCDDEEFF12CE — ключ который будет сохранён во вторую ячейку памяти устройства.
Ключи с family code равным «00» перестают считываться дубликатором. Для их восстановления необходимо приложить ключ к считывателю устройства, нажать и отпустить кнопку RST (перезагрузить устройство), не снимая ключ дождаться загрузки основного меню устройства.
Работа ключа будет восстановлена, в него будет запрограммирован ID 01:FF:FF:FF:FF:FF:FF:2F.
Копирует. В комплекте с библиотекой для него идут примеры. Там и чтение, и запись карточки, и смена её ID.
Карточка и брелок, которые идут в комплекте, не позволяют перезаписывать ID. Надо покупать отдельно.
Я брал такие aliexpress.com/item//32788592746.html
Есть два стандарта беспроводных карточек/брелков, 125КГц и 13.56МГц
Что там в ваших ключах — не знаю, но проверяли вы их только на 13.56МГц. Попробуйте поискать считыватели (домофоны, офисные двери) на 125КГц, большинство из них на чужой ключ своего стандарта пикают (но не открывают).
есть еще интересный вариант эмуляция таблеток, запихать все в маленькую коробочку, чтобы не таскать охапку таблеток может сам копировать ключи
проверял на cyfral и dallas, полет нормальный:) метаком-ов у нас увы нет
Кому как. Были случаи когда люди дружили с паяльником, могли подключить ардуину к компу, но были сложности с библиотеками, компиляцией, версиями библиотек. С прошивкой хекс файлом таких «затыков» не бывает, подключил, выбрал файл, выбрал порт, нажал кнопку — прошито. Пруфы.
Ну здесь совсем не тот случай, да и onewire — вроде как стандартная библиотека в ардуино иде. Так что просто открыл скетч, залил одной кнопкой в ардуинку и пользуйся…
Это именно тот случай, когда обновление версии ПО повлияло на компиляцию скетча. Учитывайте тот факт, что обзор висит не день и не месяц, через пол года, год, пару лет, когда обновится и ардуино иде, и библиотеки, скетч с большой долей вероятности перестанет компилироваться, уже сталкивался с подобным, поверьте. А с бинарником таких проблем нет — тоже кстати одной кнопкой шьётся.
Но можно выложить и то, и то… Кто хочет «залить одной кнопкой» — возьмёт бинарник, кто хочет что-то подправить (адаптировать для другого железа) — тот возьмёт исходник (поправит, плюнет и зальёт бинарник)…
aliexpress.com/item/10pcs-lot-rewritable-RFID-Touch-Memory-Key-RW1990-iButton-Copy-Card-Sauna-Key/32788142164.html,searchweb201602_2_5130011_10152_10065_10151_10344_10068_10345_10342_10343_10340_10341_10543_5000011_10541_10084_10083_10307_10301_5080011_10539_5690011_10312_10059_10313_10314_10534_100031_10604_10603_10103_10605_10594_10596_5060011_10142_10107,searchweb201603_33,ppcSwitch_5&algo_expid=3bf3dcd9-acde-4276-9600-51cab9eaade9-0&algo_pvid=3bf3dcd9-acde-4276-9600-51cab9eaade9&rmStoreLevelAB=2 ключи здесь брал
Зачем такие сложности?
Достаточно одной Ардуины с USB разъемом, одного резистора на 2200Ом, четырех (если консольно) или пяти (если автономно) проводов и паяльника.
Какие сложности? О чём речь? Мне кажется всё «проще некуда».
Проще некуда — это воткнуть в макетку Ардуину, резистор и провода. Экран здесь лишний, как и 99 ячеек памяти. Или Вы записываете в блокнот что-то вроде:
01 02 03 04 05 06 07 ХХ это подъезд Васи Пупкина, который по ночам таксует, а жена у него молодая
01 08 09 0A 0B 0C 0D ХХ это улица Войтика, д. 39, п. 4
и т. д.
А если отвязаться от домофона, совсем. Вы можете представить что iButton используется не только для открывания дверей подъезда? Или например тупо надо забэкапить ключи, не один, и не два...? Задачи бывают разные. И если отдать человеку который с ардуиной дел не имел резистор и провода, будет толк? Или это устройство — чем проще пользоваться?
Очень интересный подход: я умею — все могут, мне не нужно — никому не нужно.
Да, вполне, те кто работают с ключами — могут сказать.
И угадают? Даже учитывая, что первый байт — 01, а последний — контрольная сумма, остается 12 символов, которые нужно запомнить с привязкой к конкретному месту.
Сколько ключей эти Джонни Мнемоники осилят?
Поймите простую вещь, тупой пример. Сидит ключник на рынке, продаёт комплекты «универсальных» ключей, которые сам же и штампует. Проще из памяти записать 10 — 20 ключей чем сделать дубликаты. Другой пример. А если болванки закончились, но считать ключ надо сегодня, а дубликат сделать когда болванки появятся.
Вариантов много, но вы почему-то думаете только об адресах, домофонах и листочках с записями.
Сидит ключник на рынке, продаёт комплекты «универсальных» ключей
Вариантов много, но вы почему-то думаете только об адресах, домофонах
Вариант один, и не один я так думаю.
А если болванки закончились, но считать ключ надо сегодня
Если ключник не предусмотрел запас расходников, он — плохой ключник. Ведь если в больнице закончатся бинты, Вас запишут на потом, когда бинты появятся. Это если Вас довезут до больницы, если бензин не закончится. Не принимайте на свой счет., это просто тупой пример.
Вы невнимательно читаете. Ключник на рынке это один пример, а бэкап ключа с последующей записью — другой. Причём тут ключник и запас расходников? Вы меня утомили, честное слово.
Сдается мне, для коммерческого применения полно нормального оборудования и софта. Кому тут нужен колхоз на ардуине и одном резисторе? Только тем, кто хочет 1-2 ключа скопировать или с мастер-ключами поиграться…
Надежнее в том плане — что вы приобретаете готовое устройство с блоком питания, нужной прошивкой, аккуратно собранное, и которое может работать как от ноутбука так и автономно (батарейка Крона)
Который будет работать не только с ключами формата Dallas, так же форматы Cyfral, Metakom, Em-marin, Техком.
Простота, возможность сразу делать финализацию ключа, без доп. обвязки
Дешевле — если сравнить стоимость готового прибора, и конструктора (прибор на Ардуино и Шилд + доп. обвес) то цена будет не чуть не меньше.
Про начальные знания работы с Ардуино, и умения паять упущу — это уже индивидуально.
если сравнить стоимость готового прибора, и конструктора (прибор на Ардуино и Шилд + доп. обвес) то цена будет не чуть не меньше.
Дайте ссылку, покажите пример, вот тут железа на 8 баксов, покажите мне аналог, просто автономное устройство для бэкапа ключей которое будет дешевле. Не надо допобвес, давайте ограничимся ценой и функциональностью устройства из обзора.
Вы пытаетесь сравнить бюджетный «бэкапер» ключей, который будет использоваться в «своей нише» с промышленными дубликаторами, это не совсем верно.
Надежнее в том плане — что вы приобретаете готовое устройство...
Это тоже готовое устройство, корпус — хотите печатайте, хотите нет.
и которое может работать как от ноутбука так и автономно
Так это тоже может «от ноутбука», разве что кроны нет, но может питаться от павербанка, удобнее правда?
Про начальные знания работы с Ардуино
Шейте бинарником — всё по инструкции, даже ардуино ИДЕ устанавливать не надо. Паять надо, но наверное для тех кто не сможет запаять «два провода» этот обзор будет мало интересен.
Какая разница, что давать человеку который с ардуиной дел не имел? Поясняю.
Вы навязываете, помимо Ардуины, покупку экрана с кнопками, и считывателя. Вы даете не скетч, а прошивку, которая не факт, что будет работать на другом контроллере. И да, придется поработать паяльником наугад, ведь
схему рисовать не вижу смысла, всё собирается за 5 минут.
Какая разница, что давать человеку который с ардуиной дел не имел?
Согласен.
Опять пример. Нужно в командировке забэкапить ключи, ноутбука нет, ардуиной с резисторами бэкапить будете?
Поясняю.
Вы навязываете, помимо Ардуины, покупку экрана с кнопками, и считывателя.
Я вам ничего не навязываю, вы перегибаете палку.
Вы даете не скетч, а прошивку, которая не факт, что будет работать на другом контроллере.
Я выкладываю прошивку которая 100% будет работать на таком же устройстве.
И да, придется поработать паяльником наугад, ведь
Если вы умеете читать, то наугад паять ничего не придётся.
А специально для Вас, для тех кому это сложно или не нужно, или нужно, но не хватает денег на навязываемые мной экран и считывательесть обзор, вот там вообще всё очень дёшево и без навязывания.
Опять пример. Нужно в командировке забэкапить ключи, ноутбука нет, ардуиной с резисторами бэкапить будете?
Согласен. Человеку в командировке постоянно надо бэкапить ключи, а ноута у него вообще нет, он же не знает, как и зачем он оказался в этом незнакомом городе.
Я вам ничего не навязываю, вы перегибаете палку.
Согласен. Вы навязываете это человеку который с ардуиной дел не имел.
Я выкладываю прошивку которая 100% будет работать на таком же устройстве.
Согласен. Вы защищаете свои авторские права. Но не уподобляйтесь Эпплу. Выложите скетч и все будут довольны.
Если вы умеете читать, то наугад паять ничего не придётся.
Согласен. Вы же писали это не для человека который с ардуиной дел не имел.
А специально для Вас, для тех кому это сложно или не нужно, или нужно, но не хватает денег
Спасибо, очень приятно, что Вы отделяете меня от тех кому это сложно или не нужно, или нужно, но не хватает денег. У меня все есть и все работает.
Так вся проблема в том, что я не выложил исходник?
Ещё раз поясню, основной смысл этого устройства в бэкапе ключей и их тиражировании, если вы не можете проедставить где и как это можно использовать — тогда мне сказать больше нечего, предлагаю на этом закончить.
Так вся проблема в том, что я не выложил исходник?
Вовсе нет. Проблема в лишних деталях. Скетч, которым пользуюсь я, может читать, записывать на болванку, записывать в оперативную память и записывать в энергонезависимую память. И все это с одним резистором с тремя красными полосками.
у приведенной несколькими постами выше схемы эмулятора, есть такая возможность — перебор заранее прошитых мастер-ключей, но работает далеко не везде, т.к. часто ключи изменены установщиками.
Готовые решения у наших китайских друзей никто не покупал?
Типа такого?
Но чтоб работали.
А то нам по работе нужны универсальные ключи. Ранее закупали у местного «ключника», он отдавал по 130 рублей. А сейчас на бесконтактный цена выросла до 500… :-(
Есть 1 оригинальный ключ DS1990a
Есть болванки DS1993 +F5
Возможно ли сделать копию оригинального ключа?
Первый байт у оригинала 01. А у клонов… кажется 6.
Всем добра.
Помощи прошу у знатоков…
Собрал по образцу свой дубликатор, но с некоторыми изменениями…
1. Экран LCD 16,2 без кнопок, подключен через i2c адаптер.
2. Добавлены выносные кнопки с ali Ad_key(5 кнопок)
Прибор работает, но есть одна проблема, не могу программно повесить на левую кнопку включение/выключение подсветки Lcd, как это было реализовано на образце…
Помогите разобраться…
#include <LiquidCrystal_I2C.h> // Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x27,16,2); // Объявляем объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2). Если надпись не появилась, замените адрес 0x27 на 0x3F
void setup() {
lcd.init();
lcd.backlight();
}
С ардуиной на ВЫ… Пока что)
Готового решения не нашёл…
Методом подбора и проб розличных вариантов ничего не получается… Увы
Был бы признателен, если бы вы поправили кусок этого скетча, касательно кнопок…
повторюсь, работает всё, кроме отключения/включения светодиода подсветки Lcd…
Заранее благодарен…
собрал сей девайс, что понравилось, так это легкое восстановление нечитаемого ключа, в отличии от девайса osboy.ru/blog/microcontrollers/ibutton-dublicator.html час другой потратишь, пока ключ читаемым сделаешь. не понял только он через компьютер через терминал не работает, так?
Собрал этот Дубликатор домофонных ключей (iButton) на Arduino Uno.Работает.Однако ключ контактный к домофону Cyfral этот дубликатор почему то не читает. Вы не подскажите почему?
Валерий.
добрый вечер хлопцы, решил повторить проект но по прошивке не идет скейтч не формируется идут ошибки, может у кого рабочий скейтч есть скинте пожайлуста в личку, сильно не ругайте только начинаю осваивать.
arthurphdent.livejournal.com/1759.html
На вскидку.
В Гугле с Яндексом искать по «Arduino RFID».
это первое что попалось.
Атака на Crypto-1 известна. Инструментарий в публичном доступе github.com/nfc-tools/mfoc
Выпуск болванок с перезаписываемым нулевым сектором китайской промышленностью освоен www.google.ru/search?q=UID+Changeable+Mifare
Ломаем ключи, затем копируем по болванкам.
Причем скорее всего для домофонных ключей первый шаг излишен, т.к. с большой долей вероятности для идентификации используется тупо UID.
Карточка и брелок, которые идут в комплекте, не позволяют перезаписывать ID. Надо покупать отдельно.
Я брал такие aliexpress.com/item//32788592746.html
на бакс дешевле, мало ли кому пригодится :)
Они, похоже, не Mifare и что за стандарт не понятно.
Ни телефон с NFC, ни считыватель ACR122U не реагируют на них.
Что там в ваших ключах — не знаю, но проверяли вы их только на 13.56МГц. Попробуйте поискать считыватели (домофоны, офисные двери) на 125КГц, большинство из них на чужой ключ своего стандарта пикают (но не открывают).
Я брал тут.
проверял на cyfral и dallas, полет нормальный:) метаком-ов у нас увы нет
на радиокоте выкладывал его законченный вариант с плюшками в виде зарядки и т.д. :)
но он довольно много жрет — порядка 20ма, atmega8 все же устаревший МК и дисплей прожорливый
сырцаскетча нет? Такто LCD-шилд большинству там нафиг не нужен — подключил к компу и через консоль копируй…Пруфы.
5 таблеток и 5 держателей.
Будьте внимательны!
Мой заказ вот этот: ebay.com/itm/222563158467
Выехал 27 ноября…
Достаточно одной Ардуины с USB разъемом, одного резистора на 2200Ом, четырех (если консольно) или пяти (если автономно) проводов и паяльника.
01 02 03 04 05 06 07 ХХ это подъезд Васи Пупкина, который по ночам таксует, а жена у него молодая
01 08 09 0A 0B 0C 0D ХХ это улица Войтика, д. 39, п. 4
и т. д.
Очень интересный подход: я умею — все могут, мне не нужно — никому не нужно.
Да к примеру просто штамповать наборы ключей. Быстрее шить без считывания исходного ключа.
Сколько ключей эти Джонни Мнемоники осилят?
Зы угадать и запомнить это разные вещи.
Вариантов много, но вы почему-то думаете только об адресах, домофонах и листочках с записями.
Если ключник не предусмотрел запас расходников, он — плохой ключник. Ведь если в больнице закончатся бинты, Вас запишут на потом, когда бинты появятся. Это если Вас довезут до больницы, если бензин не закончится. Не принимайте на свой счет., это просто тупой пример.
Дешевле чем что? Ардуина и шилд? Надёжнее в каком плане?
Который будет работать не только с ключами формата Dallas, так же форматы Cyfral, Metakom, Em-marin, Техком.
Простота, возможность сразу делать финализацию ключа, без доп. обвязки
Дешевле — если сравнить стоимость готового прибора, и конструктора (прибор на Ардуино и Шилд + доп. обвес) то цена будет не чуть не меньше.
Про начальные знания работы с Ардуино, и умения паять упущу — это уже индивидуально.
Вы пытаетесь сравнить бюджетный «бэкапер» ключей, который будет использоваться в «своей нише» с промышленными дубликаторами, это не совсем верно.
Это тоже готовое устройство, корпус — хотите печатайте, хотите нет.
Так это тоже может «от ноутбука», разве что кроны нет, но может питаться от павербанка, удобнее правда?
Шейте бинарником — всё по инструкции, даже ардуино ИДЕ устанавливать не надо. Паять надо, но наверное для тех кто не сможет запаять «два провода» этот обзор будет мало интересен.
Вы навязываете, помимо Ардуины, покупку экрана с кнопками, и считывателя. Вы даете не скетч, а прошивку, которая не факт, что будет работать на другом контроллере. И да, придется поработать паяльником наугад, ведь
Интересный подход.
Опять пример. Нужно в командировке забэкапить ключи, ноутбука нет, ардуиной с резисторами бэкапить будете?
Я вам ничего не навязываю, вы перегибаете палку.
Я выкладываю прошивку которая 100% будет работать на таком же устройстве.
Если вы умеете читать, то наугад паять ничего не придётся.
А специально для Вас, для тех кому это сложно или не нужно, или нужно, но не хватает денег на навязываемые мной экран и считыватель есть обзор, вот там вообще всё очень дёшево и без навязывания.
Согласен. Вы навязываете это человеку который с ардуиной дел не имел.
Согласен. Вы защищаете свои авторские права. Но не уподобляйтесь Эпплу. Выложите скетч и все будут довольны.
Согласен. Вы же писали это не для человека который с ардуиной дел не имел.
Спасибо, очень приятно, что Вы отделяете меня от тех кому это сложно или не нужно, или нужно, но не хватает денег. У меня все есть и все работает.
Ещё раз поясню, основной смысл этого устройства в бэкапе ключей и их тиражировании, если вы не можете проедставить где и как это можно использовать — тогда мне сказать больше нечего, предлагаю на этом закончить.
Желательно чтоб и без контактный тоже был в комплекте.
И скетч, соответственно.
Типа такого?
Но чтоб работали.
А то нам по работе нужны универсальные ключи. Ранее закупали у местного «ключника», он отдавал по 130 рублей. А сейчас на бесконтактный цена выросла до 500… :-(
Есть болванки DS1993 +F5
Возможно ли сделать копию оригинального ключа?
Первый байт у оригинала 01. А у клонов… кажется 6.
На рынке у нас есть, но древние, старшенькие, тусклые и 15р/штука.
Вот на ибее ebay.com/itm/291991445367
Поиск по ключу «Bi Color Polar led»
Помощи прошу у знатоков…
Собрал по образцу свой дубликатор, но с некоторыми изменениями…
1. Экран LCD 16,2 без кнопок, подключен через i2c адаптер.
2. Добавлены выносные кнопки с ali Ad_key(5 кнопок)
Прибор работает, но есть одна проблема, не могу программно повесить на левую кнопку включение/выключение подсветки Lcd, как это было реализовано на образце…
Помогите разобраться…
Попробуйте так:
Работает всё, кроме выключения подсветки при нажатии левой кнопки…
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <Wire.h>
#define keyPadInput 1 //панель кнопок К845037 указать номер порта
#define pin 11
#define RPin 12
#define GPin 13
OneWire iButton (pin);
byte Addr[8];
byte CalcCRC;
LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x3F for a 16 chars and 2 line display
#define LCDLedPin 10
int8_t LCDLedState = HIGH;
byte KeyDataForWrite[8];
byte ReadIButtonKey[8];
byte RecoveryKeyID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F }; // «Универсальный» ключ. Прошивается последовательность 01:FF:FF:FF:FF:FF:FF:2F
byte EEPROMKeyReadID[8];
byte InputKeyManual[8];
uint8_t ch = 0;
String val = "";
uint8_t CellNumber = 1;
uint8_t StepCode = 0;
uint8_t AnswerCode = 0;
uint8_t EventWrite = 1; // 1- Recovery; 2 — EEPROM to iButton; 3 — iButton to iButton.
void setup() {
Serial.begin(9600);
randomSeed(analogRead(5));
pinMode(RPin, OUTPUT);
pinMode(GPin, OUTPUT);
lcd.init(); // initialize the lcd
lcd.backlight(); // turn backlight on
lcd.begin(16, 2);
Serial.println( F(«iButton Copier RW1990»));
Serial.println();
WriteIButton ();
lcd.setCursor(0, 0);
lcd.print(F(" iButton Copier"));
lcd.setCursor(0, 1);
lcd.print(F(" RW1990 "));
delay (3000);
LCDPrintHomeScreen();
}
//Автоматическое восстановление ключа при перезагрузке устройства.
void WriteIButton() {
//delay(50);
if (EventWrite != 1) {
while (!iButton.search (Addr)) {
iButton.reset_search();
RedLight ();
}
}
iButton.skip(); iButton.reset(); iButton.write(0x33);
if (EventWrite == 1) Serial.println(F («Auto recovery key ID on boot device...»));
iButton.skip();
iButton.reset();
iButton.write(0xD1);
digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60);
pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
Serial.print(«Write iButton ID: „);
iButton.skip();
iButton.reset();
iButton.write(0xD5);
if (EventWrite == 1) memcpy(KeyDataForWrite, RecoveryKeyID, 8);
else if (EventWrite == 2) memcpy(KeyDataForWrite, EEPROMKeyReadID, 8);
else if (EventWrite == 3) memcpy(KeyDataForWrite, ReadIButtonKey, 8);
for (byte x = 0; x < 8; x++) {
writeByte(KeyDataForWrite[x]);
Serial.print(KeyDataForWrite[x], HEX);
if (x < 7) {
Serial.print(“:»);
} /*else {
Serial.print(" ");
}*/
}
Serial.println();
iButton.reset();
iButton.write(0xD1);
digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(10);
pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
EventWrite = 2;
RedGreenLightOff ();
}
int writeByte(byte data) {
int data_bit;
for (data_bit = 0; data_bit < 8; data_bit++) {
if (data & 1) {
digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
delayMicroseconds(60);
pinMode(pin, INPUT); digitalWrite(pin, HIGH);
delay(10);
} else {
digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
pinMode(pin, INPUT); digitalWrite(pin, HIGH);
delay(10);
}
data = data >> 1;
}
return 0;
}
void loop() {
int x;
x = analogRead(keyPadInput);
if (x >= 164 && x <= 165) { //RIGHT SW4
if (StepCode == 2) {
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(9, 1);
lcd.print("*");
AnswerCode = 1;
} else {
lcd.clear();
LCDPrintWriteCell();
}
}
else if (x >= 30 && x <= 31) { //UP SW2
EventWrite = 2;
RedGreenLightOff ();
if (StepCode == 2) {
ResetStepAnswer();
}
if (CellNumber < 99) {
CellNumber++;
LCDPrintHomeScreen();
}
}
else if (x >= 86 && x <= 87) { //DOWN SW3
EventWrite = 2;
RedGreenLightOff ();
if (StepCode == 2) {
ResetStepAnswer();
}
if (CellNumber > 1) {
CellNumber--;
LCDPrintHomeScreen();
}
}
else if (x==0) { //LEFT SW1
if (StepCode == 2) {
lcd.setCursor(9, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("*");
AnswerCode = 2;
}
else if (StepCode == 0 && AnswerCode == 0) {
if (LCDLedState == LOW)
LCDLedState = HIGH;
else
LCDLedState = LOW;
delay(300);
digitalWrite(LCDLedPin, LCDLedState);
}
else lcd.clear();
}…
Не пойму, куда прикрутьть эти комманды:
lcd.noBacklight();
lcd.setBacklight(0);
lcd.setBacklight(0); // Отключаем подсветку дисплея
lcd.setBacklight(1); // Включаем подсветку дисплея
Готового решения не нашёл…
Методом подбора и проб розличных вариантов ничего не получается… Увы
Был бы признателен, если бы вы поправили кусок этого скетча, касательно кнопок…
повторюсь, работает всё, кроме отключения/включения светодиода подсветки Lcd…
Заранее благодарен…
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <Wire.h>
#define keyPadInput 1 //панель кнопок К845037 указать номер порта
#define pin 11
#define RPin 12
#define GPin 13
OneWire iButton (pin);
byte Addr[8];
byte CalcCRC;
LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x3F for a 16 chars and 2 line display
#define LCDLedPin 10
int8_t LCDLedState = HIGH;
byte KeyDataForWrite[8];
byte ReadIButtonKey[8];
byte RecoveryKeyID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F }; // «Универсальный» ключ. Прошивается последовательность 01:FF:FF:FF:FF:FF:FF:2F
byte EEPROMKeyReadID[8];
byte InputKeyManual[8];
uint8_t ch = 0;
String val = "";
uint8_t CellNumber = 1;
uint8_t StepCode = 0;
uint8_t AnswerCode = 0;
uint8_t EventWrite = 1; // 1- Recovery; 2 — EEPROM to iButton; 3 — iButton to iButton.
void setup() {
Serial.begin(9600);
randomSeed(analogRead(5));
pinMode(RPin, OUTPUT);
pinMode(GPin, OUTPUT);
lcd.init(); // initialize the lcd
lcd.backlight(); // Отключаем подсветку дисплея
lcd.begin(16, 2);
Serial.println( F(«iButton Copier RW1990»));
Serial.println();
WriteIButton ();
lcd.setCursor(0, 0);
lcd.print(F(" iButton Copier"));
lcd.setCursor(0, 1);
lcd.print(F(" RW1990 "));
delay (3000);
LCDPrintHomeScreen();
}
//Автоматическое восстановление ключа при перезагрузке устройства.
void WriteIButton() {
//delay(50);
if (EventWrite != 1) {
while (!iButton.search (Addr)) {
iButton.reset_search();
RedLight ();
}
}
iButton.skip(); iButton.reset(); iButton.write(0x33);
if (EventWrite == 1) Serial.println(F («Auto recovery key ID on boot device...»));
iButton.skip();
iButton.reset();
iButton.write(0xD1);
digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60);
pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
Serial.print(«Write iButton ID: „);
iButton.skip();
iButton.reset();
iButton.write(0xD5);
if (EventWrite == 1) memcpy(KeyDataForWrite, RecoveryKeyID, 8);
else if (EventWrite == 2) memcpy(KeyDataForWrite, EEPROMKeyReadID, 8);
else if (EventWrite == 3) memcpy(KeyDataForWrite, ReadIButtonKey, 8);
for (byte x = 0; x < 8; x++) {
writeByte(KeyDataForWrite[x]);
Serial.print(KeyDataForWrite[x], HEX);
if (x < 7) {
Serial.print(“:»);
} /*else {
Serial.print(" ");
}*/
}
Serial.println();
iButton.reset();
iButton.write(0xD1);
digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(10);
pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
EventWrite = 2;
RedGreenLightOff ();
}
int writeByte(byte data) {
int data_bit;
for (data_bit = 0; data_bit < 8; data_bit++) {
if (data & 1) {
digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
delayMicroseconds(60);
pinMode(pin, INPUT); digitalWrite(pin, HIGH);
delay(10);
} else {
digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
pinMode(pin, INPUT); digitalWrite(pin, HIGH);
delay(10);
}
data = data >> 1;
}
return 0;
}…
}
else if (x==0) { //LEFT SW1
if (StepCode == 2) {
lcd.setCursor(9, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("*");
AnswerCode = 2;
}
else if (StepCode == 0 && AnswerCode == 0) {
if (LCDLedState = LOW)
LCDLedState = HIGH;
else
LCDLedState = LOW;
delay(300);
digitalWrite(LCDLedPin, LCDLedState);
}
else lcd.clear();
}
Игры с ожиданиями не к чему не привели…
osboy.ru/blog/microcontrollers/ibutton-dublicator.html час другой потратишь, пока ключ читаемым сделаешь. не понял только он через компьютер через терминал не работает, так?
такая плата подошла нормальна www.aliexpress.com/item/CH340G-MEGA328P-Mini-USB-UNO-R3-Microcontroller-For-Arduino-Replace-ATmega16U2-Without-Usb-Cable-ATmega328-Uno/32831275525.html
Валерий.
Логи хотя бы покажите.
100% какой-то библиотеки не хватает.