Go Down

Topic: Trying to get temperature via DS18S20 (Read 3593 times) previous topic - next topic

Evg64

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?


MarkT

Do you have the OneWire library installed in your sketchbook/libraries/ folder?
[ I will NOT respond to personal messages, I WILL delete them, use the forum please ]

Evg64

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?


PaulS

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?
The art of getting good answers lies in asking good questions.

jfkreuter

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!


Evg64


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.

JChristensen

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.

brucethehoon

Don't forget to restart the Arduino software

Go Up