Я не буду рассказывать вам предыстории о том, как дошел до этого, а просто объясню, как прошить ключ от домофона за минуту.
Arduino Макетная плата Резистор 2,2 кОм Провода ключ от домофона, типа i-Button
Схема нашего незатейливого устройства выглядит так:
Копируем код и компилируем. Библиотека есть в общем списке библиотек, необязательно ее искать и качать, просто установите и все.
#include <OneWire.h> #define pin 10 OneWire ibutton (pin); // I button connected on PIN 10. byte addr[8]; //array to store the Ibutton ID. void setup(){ Serial.begin(115200); } void loop(){ if (!ibutton.search (addr)){//read attached ibutton and asign value to buffer ibutton.reset_search(); delay(200); return; } Serial.print(millis()/1000); Serial.print("> "); for (byte x = 0; x<8; x++){ Serial.print(addr[x],HEX); //print the buffer content in LSB. For MSB: for (int x = 8; x>0; x--) Serial.print(" "); } //compute crc// byte crc; crc = ibutton.crc8(addr, 7); Serial.print("CRC: "); Serial.println(crc,HEX); if ( Serial.read() == 'w' ){ ibutton.skip();ibutton.reset();ibutton.write(0x33); Serial.print(" ID before write:"); for (byte x=0; x<8; x++){ Serial.print(' '); Serial.print(ibutton.read(), HEX); } // send reset ibutton.skip(); ibutton.reset(); // send 0xD1 ibutton.write(0xD1); // send logical 0 digitalWrite(10, LOW); pinMode(10, OUTPUT); delayMicroseconds(60); pinMode(10, INPUT); digitalWrite(10, HIGH); delay(10); Serial.print('\n'); Serial.print(" Writing iButton ID:\n "); // Hardcode here your desired ID // // 01 D5 9F DC 02 00 00 96 byte newID[8] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F}; ibutton.skip(); ibutton.reset(); ibutton.write(0xD5); for (byte x = 0; x<8; x++){ writeByte(newID[x]); Serial.print('*'); } Serial.print('\n'); ibutton.reset(); // send 0xD1 ibutton.write(0xD1); //send logical 1 digitalWrite(10, LOW); pinMode(10, OUTPUT); delayMicroseconds(10); pinMode(10, INPUT); digitalWrite(10, HIGH); delay(10); } } 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; }
Открываем чтение порта. Плюс прикладываем к верху ключа, а минус соответственно держим сбоку. Если вы все правильно сделали, то в мониторе порта вы увидите данные, которые записаны на ваш ключ. Если вы хотите сделать дубликат, то смело их копируйте. Чтобы записать новые данные, нам необходимо будет отредактировать код. Находим:
Serial.print('\n'); Serial.print(" Writing iButton ID:\n "); // Hardcode here your desired ID // // 01 D5 9F DC 02 00 00 96 byte newID[8] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F};
Нам нужна строчка:
byte newID[8] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F};
Редактируем ее, например у меня домофон открывается так:
byte newID[8] = {0x00, 0x36, 0x5A, 0x11, 0x40, 0xBE, 0xE1, 0x05};
Компилируем и снова открываем монитор порта. Вводим «w», жмякаем энтер и после этого прикладываем провода к ключу. Происходит запись и все, готово. Вы молодец. Готовые коды вы можете найти в интернете. И еще, не все ключи прошиваются, обращайте на это внимание. Нужно использовать rw1990.