I have a question about this commonly referenced snippet of Arduino code (below). Specifically, what does the ds.reset() return? I realize that this command must be issued before communication with a specific device on the bus, but in this code there is the line
present = ds.reset();
What is the purpose of the variable “present?” In my application the value appears to always be 1. Does anyone have an explanation of the details of this function, what it returns, etc?
Thank you!
I can’t find a description of this function. I understand ds.reset() resets the bus and prepares for communication, but what is this “1” it is returning?
#include <OneWire.h>
// DS18S20 Temperature chip i/o
OneWire ds(10); // on pin 10
void setup(void) {
// initialize inputs/outputs
// start serial port
Serial.begin(9600);
}
void loop(void) {
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
Serial.print(“No more addresses.\n”);
ds.reset_search();
return;
}
Serial.print(“R=”);
for( i = 0; i < 8; i++) {
Serial.print(addr*, HEX);*
- Serial.print(" ");*
- }*
- if ( OneWire::crc8( addr, 7) != addr[7]) {*
- Serial.print(“CRC is not valid!\n”);*
- return;*
- }*
- if ( addr[0] != 0x10) {*
- Serial.print(“Device is not a DS18S20 family device.\n”);*
- return;*
- }*
- ds.reset();*
- ds.select(addr);*
- ds.write(0x44,1); // start conversion, with parasite power on at the end*
- delay(1000); // maybe 750ms is enough, maybe not*
- // we might do a ds.depower() here, but the reset will take care of it.*
- present = ds.reset();*
- ds.select(addr); *
- ds.write(0xBE); // Read Scratchpad*
- Serial.print(“P=”);*
- Serial.print(present,HEX);*
- Serial.print(" ");*
- for ( i = 0; i < 9; i++) { // we need 9 bytes*
_ data = ds.read();_
_ Serial.print(data*, HEX);
Serial.print(" “);
}
Serial.print(” CRC=");
Serial.print( OneWire::crc8( data, 8), HEX);
Serial.println();
}*_