|
// Based on https://danman.eu/blog/cloning-ibutton-using-rw1990-and-avr/ |
|
// and: http://elimelecsarduinoprojects.blogspot.com/2013/06/read-dallas-ibutton-arduino.html |
|
// By Swift Geek 28-08-2015 |
|
// TODO: danger to atmega328! Use OpenCollector logic! |
|
// Used 4.8kΩ Pull-up and 3.1 Vcc for arduino/pull-up |
|
|
|
#include <OneWire.h> |
|
|
|
OneWire ibutton (8); // I button connected on PIN 2. |
|
|
|
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); |
|
} |
|
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, 0xD5, 0x9F, 0xDC, 0x02, 0x00, 0x00, 0x96}; |
|
ibutton.skip(); |
|
ibutton.reset(); |
|
ibutton.write(0xD5); |
|
for (byte x = 0; x<8; x++){ |
|
writeByte(newID[x]); |
|
Serial.print('*'); |
|
} |
|
Serial.print('\n'); |
|
ibutton.reset(); |
|
} |
|
} |
|
|
|
int writeByte(byte data){ |
|
int data_bit; |
|
for(data_bit=0; data_bit<8; data_bit++){ |
|
if (data & 1){ |
|
digitalWrite(8, LOW); pinMode(8, OUTPUT); |
|
delayMicroseconds(60); |
|
pinMode(8, INPUT); digitalWrite(8, HIGH); |
|
delay(10); |
|
} else { |
|
digitalWrite(8, LOW); pinMode(8, OUTPUT); |
|
pinMode(8, INPUT); digitalWrite(8, HIGH); |
|
delay(10); |
|
} |
|
data = data >> 1; |
|
} |
|
return 0; |
|
} |
I use 4.7k ohms like others projects. It works and I don't see the need to use other values.