RSS блога
Подписка
Дубликатор домофонных ключей (iButton) на Arduino Uno
- Цена: 8$
- Перейти в магазин
Добрый день! Очередной дубликатор домофонных ключей (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 берём тут, или на гугл-диске вместе с прошивкой.
Если Вы предпочитаете исходные коды, скетч лежит там же, недостающие библиотеки берём на просторах интернета.
Приступим к сборке, схему рисовать не вижу смысла, всё собирается за 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.
Ключи с family code равным «00» перестают считываться дубликатором. Для их восстановления необходимо приложить ключ к считывателю устройства, нажать и отпустить кнопку RST (перезагрузить устройство), не снимая ключ дождаться загрузки основного меню устройства.
Работа ключа будет восстановлена, в него будет запрограммирован ID 01:FF:FF:FF:FF:FF:FF:2F.
Видео без звука и без штатива :)
«Болванки» для записи RW1990 продают тут.
Всем добра!
Итак, что должно уметь:
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
— выбираем 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 — Запись ключа в память устройства.
Пример команды:
KeySave — Запись «корректного» ключа в память устройства, в отличие от команды KeyForceSave перед записью в память устройства для вводимого ключа будет подсчитана правильная контрольная сумма и family code ключа будет заменён на «01».
Пример команды:
Memtest — тест энергонезависимой памяти устройства, все сохранённые ключи будут стёрты.
KeyForceSave — Запись ключа в память устройства.
Пример команды:
KeyForceSave:2#aabbccddeeff1234
Синтаксис команды:
KeyForceSave — команда
: — разделитель
2 — записать во вторую ячейку памяти
# — разделитель
AABBCCDDEEFF1234 — ключ который будет сохранён во вторую ячейку памяти устройства.
: — разделитель
2 — записать во вторую ячейку памяти
# — разделитель
AABBCCDDEEFF1234 — ключ который будет сохранён во вторую ячейку памяти устройства.
KeySave — Запись «корректного» ключа в память устройства, в отличие от команды KeyForceSave перед записью в память устройства для вводимого ключа будет подсчитана правильная контрольная сумма и family code ключа будет заменён на «01».
Пример команды:
KeySave:3#aabbccddeeff1234
Синтаксис команды:
KeySave — команда
: — разделитель
3 — записать в третью ячейку памяти
# — разделитель
01BBCCDDEEFF12CE — ключ который будет сохранён во вторую ячейку памяти устройства.
: — разделитель
3 — записать в третью ячейку памяти
# — разделитель
01BBCCDDEEFF12CE — ключ который будет сохранён во вторую ячейку памяти устройства.
Ключи с family code равным «00» перестают считываться дубликатором. Для их восстановления необходимо приложить ключ к считывателю устройства, нажать и отпустить кнопку RST (перезагрузить устройство), не снимая ключ дождаться загрузки основного меню устройства.
Работа ключа будет восстановлена, в него будет запрограммирован ID 01:FF:FF:FF:FF:FF:FF:2F.
Видео без звука и без штатива :)
«Болванки» для записи RW1990 продают тут.
Всем добра!
Самые обсуждаемые обзоры
+68 |
3230
133
|
+50 |
3479
64
|
+28 |
2408
43
|
+37 |
2683
37
|
+55 |
1993
37
|
arthurphdent.livejournal.com/1759.html
На вскидку.
В Гугле с Яндексом искать по «Arduino RFID».
это первое что попалось.
Атака на Crypto-1 известна. Инструментарий в публичном доступе github.com/nfc-tools/mfoc
Выпуск болванок с перезаписываемым нулевым сектором китайской промышленностью освоен www.google.ru/search?q=UID+Changeable+Mifare
Ломаем ключи, затем копируем по болванкам.
Причем скорее всего для домофонных ключей первый шаг излишен, т.к. с большой долей вероятности для идентификации используется тупо UID.
Карточка и брелок, которые идут в комплекте, не позволяют перезаписывать ID. Надо покупать отдельно.
Я брал такие https://aliexpress.com/item/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 час другой потратишь, пока ключ читаемым сделаешь. не понял только он через компьютер через терминал не работает, так?
такая плата подошла нормальна https://aliexpress.com/item/item/CH340G-MEGA328P-Mini-USB-UNO-R3-Microcontroller-For-Arduino-Replace-ATmega16U2-Without-Usb-Cable-ATmega328-Uno/32831275525.html
Валерий.
Логи хотя бы покажите.
100% какой-то библиотеки не хватает.