Trying to get temperature via DS18S20

Hi! Im trying to compile a sketch which makes Arduino get temperature from sensor DS18S20:

#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[i], 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[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print( OneWire::crc8( data, 8), HEX);
  Serial.println();
}

however, I get a mistake:

_1wire.cpp.o: In function `__static_initialization_and_destruction_0':
C:\DOCUME~1\Eugene\LOCALS~1\Temp\build718807673402787291.tmp/_1wire.cpp:10: undefined reference to `OneWire::OneWire(unsigned char)'
_1wire.cpp.o: In function `loop':
C:\DOCUME~1\Eugene\LOCALS~1\Temp\build718807673402787291.tmp/_1wire.cpp:26: undefined reference to `OneWire::search(unsigned char*)'
C:\DOCUME~1\Eugene\LOCALS~1\Temp\build718807673402787291.tmp/_1wire.cpp:28: undefined reference to `OneWire::reset_search()'
C:\DOCUME~1\Eugene\LOCALS~1\Temp\build718807673402787291.tmp/_1wire.cpp:38: undefined reference to `OneWire::crc8(unsigned char*, unsigned char)'
C:\DOCUME~1\Eugene\LOCALS~1\Temp\build718807673402787291.tmp/_1wire.cpp:48: undefined reference to `OneWire::reset()'
C:\DOCUME~1\Eugene\LOCALS~1\Temp\build718807673402787291.tmp/_1wire.cpp:49: undefined reference to `OneWire::select(unsigned char*)'
C:\DOCUME~1\Eugene\LOCALS~1\Temp\build718807673402787291.tmp/_1wire.cpp:50: undefined reference to `OneWire::write(unsigned char, unsigned char)'
C:\DOCUME~1\Eugene\LOCALS~1\Temp\build718807673402787291.tmp/_1wire.cpp:55: undefined reference to `OneWire::reset()'
C:\DOCUME~1\Eugene\LOCALS~1\Temp\build718807673402787291.tmp/_1wire.cpp:56: undefined reference to `OneWire::select(unsigned char*)'
C:\DOCUME~1\Eugene\LOCALS~1\Temp\build718807673402787291.tmp/_1wire.cpp:57: undefined reference to `OneWire::write(unsigned char, unsigned char)'
C:\DOCUME~1\Eugene\LOCALS~1\Temp\build718807673402787291.tmp/_1wire.cpp:63: undefined reference to `OneWire::read()'
C:\DOCUME~1\Eugene\LOCALS~1\Temp\build718807673402787291.tmp/_1wire.cpp:68: undefined reference to `OneWire::crc8(unsigned char*, unsigned char)'

I`ve downloaded this sketch somewhere from the web as an easy example of working with DS18S20. So it is supposed to be tested for many times by variety of users - in this angle, it is so strange to me that I get a mistake, compiling the code. What is wrong?

Do you have the OneWire library installed in your sketchbook/libraries/ folder?

I have downloaded OneWire library and unzipped it into my Arduino library folder as is. What do you mean by "installed"? Does it require instaling or simple copying?

Can anyone help me?

I have downloaded OneWire library and unzipped it into my Arduino library folder as is.

Did you end up with a OneWire directory, containing OneWire.h and OneWire.cpp, in the library folder, or did the .h and .cpp files end up in the library folder?

hey Evg,

I just read your post. You havve to fiddle a little bit to get the temperatures, but it´s not very complicated.
I´m just restarting with arduino, but did a little thing with many DS18B20.
Just check out my code at www.jfkreuter.com. I tried to comment the code, so it should be easy to understand what it´s doing.
Maybe it helps a little bit.

Happy coding!

PaulS:
Did you end up with a OneWire directory, containing OneWire.h and OneWire.cpp, in the library folder, or did the .h and .cpp files end up in the library folder?

I ended up with OneWire directory with both files.

If the library is properly installed, OneWire will appear under examples. If not, I'd recheck my installation procedure. I didn't scrutinize your code, but it looks like it could be the sample that comes with the library. This sample worked fine for me with little or no tweaking IIRC.

Don't forget to restart the Arduino software

1 Like