Download this file
#include "temperature.h"
#include
Temperature::Temperature():
ds(6), initialized(false)
{
uint8_t retries = 5;
while (retries && !ds.search(addr)) {
ds.reset_search();
delay(250);
retries--;
}
if (retries &&
OneWire::crc8( addr, 7) == addr[7] &&
addr[0] == 0x10) {
initialized = true;
}
}
void Temperature::start_reading() {
if (!initialized) return;
ds.reset();
ds.select(addr);
ds.write(0x44,0); // 0: no parasitic power, 1: with parasitic power
ready_time = millis() + 1000;
}
unsigned short Temperature::get_value() {
if (!initialized) return 0xFF00; // out of range of the DS18S20 => error
while((int32_t) (millis() - ready_time) < 0)
delay(5);
ds.reset();
ds.select(addr);
ds.write(0xBE);
//Serial.print("buf: ");
for (int i = 0; i < 9; i++) {
data[i] = ds.read();
//Serial.print(data[i], HEX); Serial.print(" ");
}
//Serial.println();
unsigned short val = (data[1] << 8) | data[0];
return val;
}
// vim:ft=arduino