Помогите подружить iButton и Arduino.
- Войдите на сайт для отправки комментариев
Всем привет. Помогите новичку. Хочу сделать дубликат соего ключа iButton. Купил Arduino и несколько заготовок, пробовал как тут:
https://www.youtube.com/watch?v=r5tBm_yZgiE
Считал я ключ нормально, а при попытке записать ничего не происходит. Резисторы менял разные. Вот скетч:
#include <OneWire.h>
#define pin 10
byte key_to_write[] = { 0x01, 0xBE, 0x40, 0x11, 0x5A, 0x36, 0x00, 0xE1 };
OneWire ds(pin); // pin 10 is 1-Wire interface pin now
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
byte i;
byte data[8];
delay(1000); // 1 sec
ds.reset();
delay(50);
ds.write(0x33); // "READ" command
ds.read_bytes(data, 8);
Serial.print("KEY ");
for( i = 0; i < 8; i++) {
Serial.print(data[i], HEX);
if (i != 7) Serial.print(":");
}
// Check if FF:FF:FF:FF:FF:FF:FF:FF
// If your button is really programmed with FF:FF:FF:FF:FF:FF:FF:FF, then remove this check
if (data[0] & data[1] & data[2] & data[3] & data[4] & data[5] & data[6] & data[7] == 0xFF)
{
Serial.println("...nothing found!");
return;
}
// return; // remove when ready to programm
// Check if read key is equal to the one to be programmed
for (i = 0; i < 8; i++)
if (data[i] != key_to_write[i])
break;
else
if (i == 7)
{
Serial.println("...already programmed!");
return;
}
Serial.println();
Serial.print("Programming new key...");
for (uint8_t i = 0; i < 8; i++)
{
ds.reset();
data[0] = 0x3C; // "WRITE" command
data[1] = i; // programming i-th byte
data[2] = 0;
data[3] = key_to_write[i];
ds.write_bytes(data, 4);
Serial.print(".");
uint8_t crc = ds.read();
if (OneWire::crc8(data, 4) != crc) {
Serial.print("error!\r\n");
return;
}
else
Serial.print(".");
send_programming_impulse();
}
Serial.println("done!");
}
void send_programming_impulse()
{
pinMode(pin, OUTPUT);
digitalWrite(pin, HIGH);
delay(60);
digitalWrite(pin, LOW);
delay(5);
digitalWrite(pin, HIGH);
delay(50);
}
Вставка программного кода в тему/комментарий
а что за ключ для записи ты использовал?
а что за ключ для записи ты использовал?
rw1990
http://arduino.ru/forum/programmirovanie/onewire-zapis-v-ibutton#comment...
http://sun-student.ru/hard/rw1990/finale.html
http://electromost.com/news/protokol_dlja_ehlektronnykh_kljuchej_rw1990/2011-04-24-35
Уважаемые формучане. Нужна помощь. Исполнительных устройств по реализации с iButton много. Но я не нашел как реализовать чтения электронного ключа сразу двумя ардуинами. Мне нужно чтобы приложив ibutton сработали сразу две андруино. так как они расположенны в разных местах и далеки друг от друга, то самое лучшее решение для меня это параллельное чтитывание.
Пример: Приложив ключ одно ардуино включает электроэнергию в одном месте, другой ардуино в другом.
Не могу понять как реализовать синхронизацию всего этого.
Заранее плагодарю за помощь.
В протоколе 1-Wire последовательная передача осуществляется в полудуплексном режиме (т. е. либо прием, либо передача), внутри дискретно определенных временных интервалов, называемых тайм-слотами.
При разной длине проводов у тебя временные интервалы будут отличаться, внося искажения.
Вижу 2 выхода:
а) использовать три Arduino, одна считывает iButton, и передает ID (либо хранит в себе разешенные ключи и сразу выдает "разрешено"/"запрещено) остальным. Связь по RS-485 (помехоустойчивость) или напрямую RX-TX (если не далее 3 м). Полноценную Arduino можно не брать, достаточно крошки Digispark (размеры 22x20 мм) или ProMini.
б) использовать только две существующие Arduino, при этом одна из них возьмет на себя функции общения с iButton и передачи ID в другую Arduino. По линии связи аналогично п. а)
Спасибо за ответ. Дело в том чтобы осуществить вашу идею выше. понадобиться опять монтаж линии от процессора к процессору. Что очень не хочется делать в помещении где законченный ремонт.
А как вам такая идея. Предположим я расположу например ардуино мастер на расстоянии 10 метров от таблетки. А так сказать пвссивный ардуино (считыватель ключа) непосрественной близости от колодки Ibutton и при записи кода ключа она передаст его (или команду на включение утройствами) по эфиру на частоте 315 мгЦ на третью исполняющую ардуино? Как бы с помехами с вами согласен. Но мне не понятен вопрос синхронизации. Вот например. Обычный домофон понятно как работает и алгоритм считывания кода с таблетки и этих программ много в инете. Но второй ардуино имеет свою тактовую внутреннюю частоту и уж она точно не совпадает с домофоном. Так какая есть возможность синхронизации? По RX-TX все понятно. Но в жизни может возникнуть такая ситуация и в других решениях когда один ардуино выступает в роли ведушего, а второй в роли ведомой флешки. Так каким способом они за синхронизируются? Я полагаю (а вы поправьте если не прав) что ардуино-2 можно запрограмировать в роли таблетки, только с одним условием после сброса и команды на чтение она переходит в режим чтения и параллельно записывает код. Может какое быть? Я слаб в програмировании и контроллерах, у меня область по электроники другая. Я занимаюсь технологиями Тесла, а там контроллеры не выживают. Спасибо вам что уделяете мне внимание.
Что-то вы излишне усложняете. Не нужна тут синхронизация.
К iButton сколько проводов проложено, 2 или 3?
Если 3, то вообще все шоколадно.
Если 2, то возле iButton разместить мастер, по этим проводам дать питание 5 В, а линию RX-TX прокинуть по радиоканалу (передатчик на мастер, а приемников можно сколько угодно), модуль на 433 МГц стоит 200 р. HC-12 подороже, но там зато аппаратное решение коллизий и помех (но приемник вроде только один).