-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
94 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
void init_18b20(){ | ||
unsigned char i; | ||
|
||
if ( !ds.search(addr)) { | ||
Serial.println("No more addresses."); | ||
Serial.println(); | ||
ds.reset_search(); | ||
delay(250); | ||
return; | ||
} | ||
|
||
if (OneWire::crc8(addr, 7) != addr[7]) { | ||
Serial.println("CRC is not valid!"); | ||
return; | ||
} | ||
Serial.println(); | ||
} | ||
|
||
unsigned int get_temperature(){ | ||
byte i; | ||
byte present = 0; | ||
byte type_s; | ||
byte data[12]; | ||
|
||
float celsius, fahrenheit; | ||
|
||
|
||
|
||
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 | ||
|
||
for ( i = 0; i < 9; i++) { // we need 9 bytes | ||
data[i] = ds.read(); | ||
} | ||
|
||
// Convert the data to actual temperature | ||
// because the result is a 16 bit signed integer, it should | ||
// be stored to an "int16_t" type, which is always 16 bits | ||
// even when compiled on a 32 bit processor. | ||
int16_t raw = (data[1] << 8) | data[0]; | ||
|
||
byte cfg = (data[4] & 0x60); | ||
// at lower res, the low bits are undefined, so let's zero them | ||
if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms | ||
else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms | ||
else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms | ||
//// default is 12 bit resolution, 750 ms conversion time | ||
return raw; | ||
//celsius = (float)raw / 16.0; | ||
|
||
//return celsius; | ||
} | ||
|
||
|