Pages: [1]   Go Down
Author Topic: Arduino + DS18B20 + Serial Enabled sparkfun LCD  (Read 822 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Guys,

I am the definition of noob...and am attempting to put together a little temperature unit to monitor the temperature in my roof. My son has advanced asthma and need to monitor different temperatures to minimise the growth of spores in the house.
I have the temperature reading via the serial port of the computer, but now need it to read to the LCD. And this is where I am lost.
I have attached the DS18B20 code below, any help on making it read to the LCD would be much appreciated.

Code:
#include <OneWire.h>

int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2

//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 2

void setup(void) {
 Serial.begin(9600);
}

void loop(void) {
 float temperature = getTemp();
 Serial.println(temperature);
 
 delay(100); //just here to slow down the output so it is easier to read
 
}


float getTemp(){
 //returns the temperature from one DS18S20 in DEG Celsius

 byte data[12];
 byte addr[8];

 if ( !ds.search(addr)) {
   //no more sensors on chain, reset search
   ds.reset_search();
   return -1000;
 }

 if ( OneWire::crc8( addr, 7) != addr[7]) {
   Serial.println("CRC is not valid!");
   return -1000;
 }

 if ( addr[0] != 0x10 && addr[0] != 0x28) {
   Serial.print("Device is not recognized");
   return -1000;
 }

 ds.reset();
 ds.select(addr);
 ds.write(0x44,1); // start conversion, with parasite power on at the end

 byte present = ds.reset();
 ds.select(addr); 
 ds.write(0xBE); // Read Scratchpad

 
 for (int i = 0; i < 9; i++) { // we need 9 bytes
  data[i] = ds.read();
 }
 
 ds.reset_search();
 
 byte MSB = data[1];
 byte LSB = data[0];

 float tempRead = ((MSB << 8) | LSB); //using two's compliment
 float TemperatureSum = tempRead / 16;
 
 return TemperatureSum;
 
}

Cheers,

Ant_B
Logged

Massachusetts, USA
Offline Offline
Tesla Member
***
Karma: 201
Posts: 8669
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Just find an example sketch to output to the LCD and it should be fairly obvious how to replace Serial.print() with LCD output.  The place where you bought the LCD will usually have pointers to example code.

In your temperature-reading code I think you are supposed to put a 750 millisecond delay between starting a conversion and reading the scratchpad.  It takes that long for the temperature chip to get the reading and load the scratchpad.
Logged

Send Bitcoin tips to: 1L3CTDoTgrXNA5WyF77uWqt4gUdye9mezN
Send Litecoin tips to : LVtpaq6JgJAZwvnVq3ftVeHafWkcpmuR1e

New Jersey
Offline Offline
Faraday Member
**
Karma: 65
Posts: 3638
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

What will you do with the temperature information once you have it? If you're planning to run an extractor fan in the attic when the temperature is spore optimal, perhaps the arduino could control that for you too.
Logged

CO, USA
Offline Offline
God Member
*****
Karma: 5
Posts: 711
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

In your temperature-reading code I think you are supposed to put a 750 millisecond delay between starting a conversion and reading the scratchpad.  It takes that long for the temperature chip to get the reading and load the scratchpad.

Or, just use the DallasTemperature library. It has the delay already there. There are shorter delays, for lower resolution, if you want to trade speed for that.
Logged

... it is poor civic hygiene to install technologies that could someday
facilitate a police state. -- Bruce Schneier

Pages: [1]   Go Up
Jump to: