Skip to content

Instantly share code, notes, and snippets.

@smartynov
Created January 11, 2020 03:23
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save smartynov/eef1f656582dde782ec508e260411a84 to your computer and use it in GitHub Desktop.
Save smartynov/eef1f656582dde782ec508e260411a84 to your computer and use it in GitHub Desktop.
Simple Arduino script to search for connected 1wire devices and get addresses. Useful for DS18B20 discovery.
// FILE: oneWireSearch.ino
// AUTHOR: Rob Tillaart
// VERSION: 0.1.04
// PURPOSE: scan for 1-Wire devices + code snippet generator
// DATE: 2015-june-30
// URL: http://forum.arduino.cc/index.php?topic=333923
//
// inspired by http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html
//
// Released to the public domain
//
// 0.1.00 initial version
// 0.1.01 first published version
// 0.1.02 small output changes
// 0.1.03 added more explicit range
// 0.1.04 added CRC check
#include <OneWire.h>
uint8_t findDevices(int pin)
{
OneWire ow(pin);
uint8_t address[8];
uint8_t count = 0;
if (ow.search(address))
{
Serial.print("\nuint8_t pin");
Serial.print(pin, DEC);
Serial.println("[][8] = {");
{
count++;
Serial.println(" {");
for (uint8_t i = 0; i < 8; i++)
{
Serial.print("0x");
if (address[i] < 0x10) Serial.print("0");
Serial.print(address[i], HEX);
if (i < 7) Serial.print(", ");
}
Serial.print(" },");
// CHECK CRC
if (ow.crc8(address, 7) == address[7])
{
Serial.println("\t\t// CRC OK");
}
else
{
Serial.println("\t\t// CRC FAILED");
}
} while (ow.search(address));
Serial.println("};");
Serial.print("// nr devices found: ");
Serial.println(count);
}
return count;
}
void setup()
{
Serial.begin(115200);
Serial.println("//\n// Start oneWireSearch.ino \n//");
for (uint8_t pin = 20; pin <= 20; pin++)
{
findDevices(pin);
}
Serial.println("\n//\n// End oneWireSearch.ino \n//");
}
void loop()
{
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment