Arduino Forum

Using Arduino => Programming Questions => Topic started by: Evg64 on Apr 24, 2011, 03:01 pm

Title: Trying to get temperature via DS18S20
Post by: Evg64 on Apr 24, 2011, 03:01 pm
Hi! Im trying to compile a sketch which makes Arduino get temperature from  sensor DS18S20:
Code: [Select]
#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:
Code: [Select]
_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?

Title: Re: Trying to get temperature via DS18S20
Post by: MarkT on Apr 24, 2011, 03:15 pm
Do you have the OneWire library installed in your sketchbook/libraries/ folder?
Title: Re: Trying to get temperature via DS18S20
Post by: Evg64 on Apr 24, 2011, 04:59 pm
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?
Title: Re: Trying to get temperature via DS18S20
Post by: Evg64 on Apr 25, 2011, 06:54 pm
Can anyone help me?
Title: Re: Trying to get temperature via DS18S20
Post by: PaulS on Apr 25, 2011, 07:00 pm
Quote
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?
Title: Re: Trying to get temperature via DS18S20
Post by: jfkreuter on Apr 25, 2011, 07:44 pm
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!

Title: Re: Trying to get temperature via DS18S20
Post by: Evg64 on Apr 26, 2011, 12:02 am

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.
Title: Re: Trying to get temperature via DS18S20
Post by: JChristensen on Apr 26, 2011, 01:22 am
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.
Title: Re: Trying to get temperature via DS18S20
Post by: brucethehoon on Apr 26, 2011, 08:17 am
Don't forget to restart the Arduino software