Method of reading from DS1825 thermometer, including the OneWire method. Specific for the use of just 1 sensor.

Dependencies:   OneWire

Dependents:   Inductive_Sensor Inductive_Sensor_Jasper Inductive_Sensor_3

Committer:
bobgiesberts
Date:
Wed Sep 21 14:24:28 2016 +0000
Revision:
1:ef7e5efc8794
Parent:
0:abb33be87221
Child:
2:653e20bb069d
Function waits 750 ms before the next conversion; Libraries loaded in .h (and not double in .cpp)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bobgiesberts 0:abb33be87221 1 #include "DS1825.h"
bobgiesberts 0:abb33be87221 2
bobgiesberts 0:abb33be87221 3 //DS1825::DS1825( PinName pin ) : _onewire( pin )
bobgiesberts 0:abb33be87221 4 DS1825::DS1825( PinName pin )
bobgiesberts 0:abb33be87221 5 {
bobgiesberts 1:ef7e5efc8794 6 T = 0;
bobgiesberts 1:ef7e5efc8794 7 _onewire = new OneWire( pin );
bobgiesberts 1:ef7e5efc8794 8 wait_ms(100);
bobgiesberts 1:ef7e5efc8794 9 convertTemperature();
bobgiesberts 0:abb33be87221 10 }
bobgiesberts 0:abb33be87221 11
bobgiesberts 0:abb33be87221 12 DS1825::~DS1825( )
bobgiesberts 0:abb33be87221 13 {
bobgiesberts 1:ef7e5efc8794 14 _onewire->depower();
bobgiesberts 0:abb33be87221 15 delete _onewire;
bobgiesberts 0:abb33be87221 16 _onewire = NULL;
bobgiesberts 0:abb33be87221 17 }
bobgiesberts 0:abb33be87221 18
bobgiesberts 0:abb33be87221 19 bool DS1825::validateTemperature( uint8_t d[9] )
bobgiesberts 0:abb33be87221 20 {
bobgiesberts 0:abb33be87221 21 return (d[8] == _onewire->crc8(d, 8));
bobgiesberts 0:abb33be87221 22 }
bobgiesberts 0:abb33be87221 23
bobgiesberts 1:ef7e5efc8794 24 void DS1825::convertTemperature( void )
bobgiesberts 0:abb33be87221 25 {
bobgiesberts 1:ef7e5efc8794 26 // in 12-bit mode, this takes 750 ms
bobgiesberts 0:abb33be87221 27 _onewire->reset();
bobgiesberts 0:abb33be87221 28 _onewire->skip(); // Skip ROM --> because there is only one sensor, no need to search for the correct ID
bobgiesberts 0:abb33be87221 29 _onewire->write( 0x44, 1 ); // Convert T --> initiate temperature conversion, data is stored on scratchpad, after writing put the wire high to power the DS1825
bobgiesberts 1:ef7e5efc8794 30 lastconversion = (uint32_t) clock();
bobgiesberts 1:ef7e5efc8794 31 }
bobgiesberts 1:ef7e5efc8794 32
bobgiesberts 1:ef7e5efc8794 33 float DS1825::getTemperature( void )
bobgiesberts 1:ef7e5efc8794 34 {
bobgiesberts 1:ef7e5efc8794 35 // If the thermometer is not ready, just send the previous value
bobgiesberts 1:ef7e5efc8794 36 // don't interupt the conversion!
bobgiesberts 1:ef7e5efc8794 37 if ( clock() - lastconversion < 750 / 10 )
bobgiesberts 1:ef7e5efc8794 38 return T;
bobgiesberts 1:ef7e5efc8794 39
bobgiesberts 1:ef7e5efc8794 40 // Read the data
bobgiesberts 0:abb33be87221 41 _onewire->reset();
bobgiesberts 0:abb33be87221 42 _onewire->skip(); // Skip ROM
bobgiesberts 0:abb33be87221 43 _onewire->write( 0xBE ); // Command to read scratchpad
bobgiesberts 0:abb33be87221 44
bobgiesberts 1:ef7e5efc8794 45 // Convert to temperature
bobgiesberts 0:abb33be87221 46 uint8_t Tdata[9];
bobgiesberts 0:abb33be87221 47 for (int i = 0; i < 9; i++)
bobgiesberts 0:abb33be87221 48 Tdata[i] = _onewire->read(); // read scratchpad
bobgiesberts 0:abb33be87221 49 _onewire->depower();
bobgiesberts 0:abb33be87221 50
bobgiesberts 1:ef7e5efc8794 51 // validate the result
bobgiesberts 0:abb33be87221 52 if( validateTemperature( Tdata ) )
bobgiesberts 0:abb33be87221 53 {
bobgiesberts 1:ef7e5efc8794 54 int16_t T_bin = (Tdata[1] << 8) | Tdata[0];
bobgiesberts 0:abb33be87221 55 T = T_bin / 16.0;
bobgiesberts 0:abb33be87221 56 return T;
bobgiesberts 0:abb33be87221 57 }
bobgiesberts 0:abb33be87221 58 return 0;
bobgiesberts 1:ef7e5efc8794 59 }