CCCPaste

82d314deb4428

// Dallas TM1990-F5 iButton Reader
// Arduino Nano
// Reads the unique 64-bit ROM ID from a TM1990-F5 iButton
// Requires: OneWire library (no DallasTemperature needed)
// Install via: Sketch > Include Library > Manage Libraries > OneWire

#include 

#define ONE_WIRE_PIN 2  // iButton probe/reader connected to D2

OneWire iButton(ONE_WIRE_PIN);

void setup() {
  Serial.begin(9600);
  Serial.println("Dallas TM1990-F5 iButton Reader");
  Serial.println("================================");
  Serial.println("Touch iButton to reader probe...");
  Serial.println();
}

void loop() {
  byte addr[8];  // 8-byte (64-bit) ROM code buffer

  // Wait until a device is detected on the bus
  if (!iButton.search(addr)) {
    iButton.reset_search();
    delay(300);
    return;
  }

  // Verify CRC - detects wiring errors or corrupt reads
  if (OneWire::crc8(addr, 7) != addr[7]) {
    Serial.println("ERROR: CRC mismatch - bad read, try again.");
    iButton.reset_search();
    delay(500);
    return;
  }

  // Check family code - TM1990A/DS1990A = 0x01
  if (addr[0] != 0x01) {
    Serial.print("WARNING: Unexpected family code: 0x");
    Serial.println(addr[0], HEX);
    Serial.println("Expected 0x01 for TM1990-F5");
  }

  // Print full 64-bit ROM code
  Serial.println("iButton detected!");
  Serial.print("  Family Code : 0x");
  Serial.println(addr[0], HEX);

  Serial.print("  ROM ID      : ");
  for (int i = 1; i <= 6; i++) {
    if (addr[i] < 0x10) Serial.print("0");  // Leading zero padding
    Serial.print(addr[i], HEX);
    if (i < 6) Serial.print(":");
  }
  Serial.println();

  Serial.print("  CRC         : 0x");
  Serial.println(addr[7], HEX);

  // Full 64-bit code as one string (useful for logging/comparison)
  Serial.print("  Full 64-bit : ");
  for (int i = 0; i < 8; i++) {
    if (addr[i] < 0x10) Serial.print("0");
    Serial.print(addr[i], HEX);
  }
  Serial.println();
  Serial.println();

  iButton.reset_search();
  delay(1000);  // Wait 1 second before next read
}
```

/* **Wiring:**

| iButton Probe | Arduino Nano |
|---|---|
| Signal (centre contact) | D2 |
| Ground (outer shell) | GND |

Add a **4.7kΩ pull-up resistor** between D2 and 5V — same as any 1-Wire device.

**Typical Serial Monitor output when an iButton is touched:**
```
iButton detected!
  Family Code : 0x01
  ROM ID      : A3:F2:11:4C:00:08
  CRC         : 0xB7
  Full 64-bit : 01A3F2114C0008B7  */