Arduino Forum

Using Arduino => Sensors => Topic started by: shreyas314159 on Jul 10, 2013, 04:55 pm

Title: DS18B20 Temperature Sensor.
Post by: shreyas314159 on Jul 10, 2013, 04:55 pm
I connected the DS18B20 to my Arduino pin 2. I then downloaded the library for Dallas Temperature and Onewire and copied it into the Arduino Libraries folder.

This is the code-

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

void setup(void)
{
 // start serial port
 Serial.begin(9600);
 Serial.println("Dallas Temperature IC Control Library Demo");

 // Start up the library
 sensors.begin();
}


void loop(void)
{
 // call sensors.requestTemperatures() to issue a global temperature
 // request to all devices on the bus
 Serial.print(" Requesting temperatures...");
 sensors.requestTemperatures(); // Send the command to get temperatures
 Serial.println("DONE");

 Serial.print("Temperature for Device 1 is: ");
 Serial.print(sensors.getTempCByIndex(0)); // Why "byIndex"?
   // You can have more than one IC on the same bus.
   // 0 refers to the first IC on the wire

}



-I am getting the following error statement,



C:\Program Files\Arduino\libraries\OneWire\OneWire.cpp:85:24: error: WConstants.h: No such file or directory
C:\Program Files\Arduino\libraries\OneWire\OneWire.cpp: In constructor 'OneWire::OneWire(uint8_t)':
C:\Program Files\Arduino\libraries\OneWire\OneWire.cpp:93: error: 'digitalPinToBitMask' was not declared in this scope
C:\Program Files\Arduino\libraries\OneWire\OneWire.cpp:94: error: 'digitalPinToPort' was not declared in this scope
C:\Program Files\Arduino\libraries\OneWire\OneWire.cpp:94: error: 'portInputRegister' was not declared in this scope
C:\Program Files\Arduino\libraries\OneWire\OneWire.cpp: In member function 'uint8_t OneWire::reset()':
C:\Program Files\Arduino\libraries\OneWire\OneWire.cpp:127: error: 'delayMicroseconds' was not declared in this scope
C:\Program Files\Arduino\libraries\OneWire\OneWire.cpp:134: error: 'delayMicroseconds' was not declared in this scope
C:\Program Files\Arduino\libraries\OneWire\OneWire.cpp: In member function 'void OneWire::write_bit(uint8_t)':
C:\Program Files\Arduino\libraries\OneWire\OneWire.cpp:157: error: 'delayMicroseconds' was not declared in this scope
C:\Program Files\Arduino\libraries\OneWire\OneWire.cpp:165: error: 'delayMicroseconds' was not declared in this scope
C:\Program Files\Arduino\libraries\OneWire\OneWire.cpp: In member function 'uint8_t OneWire::read_bit()':
C:\Program Files\Arduino\libraries\OneWire\OneWire.cpp:185: error: 'delayMicroseconds' was not declared in this scope


Could anyone please help me with debugging the code. It would be of great HELP. Thanks. : :smiley-sweat:


I need to get the following OUTPUT:



Dallas Temperature IC Control Library Demo
Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...


Title: Re: DS18B20 Temperature Sensor.
Post by: Nick_Pyner on Jul 10, 2013, 05:24 pm
You appear to be using the same basic programme as me but you are not defining the device address, e.g.

Code: [Select]
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer = { 0x28, 0x94, 0xE2, 0xDF, 0x02, 0x00, 0x00, 0xFE };

void setup(void)
{


You need to run the one-wire address finder first. If you don't already have this, you can get it from Hacktronics.
Title: Re: DS18B20 Temperature Sensor.
Post by: shreyas314159 on Jul 10, 2013, 05:42 pm

You appear to be using the same basic programme as me but you are not defining the device address, e.g.

Code: [Select]
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer = { 0x28, 0x94, 0xE2, 0xDF, 0x02, 0x00, 0x00, 0xFE };

void setup(void)
{


You need to run the one-wire address finder first. If you don't already have this, you can get it from Hacktronics.


Thank you very much.

In addition to that, Could you please give me the link. And how should I run the one-wire address finder first? What is the procedure.
Title: Re: DS18B20 Temperature Sensor.
Post by: Nick_Pyner on Jul 10, 2013, 05:53 pm
Google             ds18b20 address tutorial hacktronics

The finder is a separate programme that returns the address of a single DS18B20. Write it down with a pencil on paper and use it in the temperature programme.
Title: Re: DS18B20 Temperature Sensor.
Post by: Nick_Pyner on Jul 10, 2013, 06:27 pm
I have just noticed that your programme is not as much the same as mine as I thought. try this

Code: [Select]
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into pin 3 on the Arduino
#define ONE_WIRE_BUS 3

OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer = { 0x28, 0x94, 0xE2, 0xDF, 0x02, 0x00, 0x00, 0xFE };

void setup(void)
{
  Serial.begin(9600);
  sensors.begin();
  // set the resolution to 10 bit (good enough?)
  sensors.setResolution(insideThermometer, 10);
}

void loop(void)
{
  delay(2000);
  sensors.requestTemperatures();
  Serial.print("Inside temperature is: ");
  printTemperature(insideThermometer);
  }

void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
     Serial.println(tempC);
  }