<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://www.marcelpost.com/wiki/index.php?action=history&amp;feed=atom&amp;title=ATtiny85_DS18B20</id>
	<title>ATtiny85 DS18B20 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.marcelpost.com/wiki/index.php?action=history&amp;feed=atom&amp;title=ATtiny85_DS18B20"/>
	<link rel="alternate" type="text/html" href="https://www.marcelpost.com/wiki/index.php?title=ATtiny85_DS18B20&amp;action=history"/>
	<updated>2026-05-17T04:20:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://www.marcelpost.com/wiki/index.php?title=ATtiny85_DS18B20&amp;diff=3578&amp;oldid=prev</id>
		<title>Admin at 01:49, 27 December 2021</title>
		<link rel="alternate" type="text/html" href="https://www.marcelpost.com/wiki/index.php?title=ATtiny85_DS18B20&amp;diff=3578&amp;oldid=prev"/>
		<updated>2021-12-27T01:49:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  DS18B20 code for DigiSpark (ATtiny85) programmed with Arduino&lt;br /&gt;
&lt;br /&gt;
   - board manager url: http://digistump.com/package_digistump_index.json &lt;br /&gt;
&lt;br /&gt;
   - board: Digispark Default (16.5MHz)&lt;br /&gt;
   &lt;br /&gt;
   - programmer: Micronucleus&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  NOTE: the digispark board requires re-insertion in a USB socket every time you wish to upload code to it.&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &lt;br /&gt;
  This code does not rely on any external OneWire or DallasTemperature sensor libraries.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
   DS18B20 temperature sensor&lt;br /&gt;
   -------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
           DS18S20&lt;br /&gt;
&lt;br /&gt;
           byte 1                 byte 2&lt;br /&gt;
           -------------------------------&lt;br /&gt;
           76543210             76543210&lt;br /&gt;
           00101010             00000000&lt;br /&gt;
           IIIIDDDD             SSSSSIII &lt;br /&gt;
           3210                      654 &lt;br /&gt;
&lt;br /&gt;
           I = Celsius integer digits (signed)          000 0010 = 2&lt;br /&gt;
           D = Number of decimal steps (x multiplier)   1010     = 10 steps x 0.0625&lt;br /&gt;
           S = Signedness (0=positive, 1=negative)      00000    = +&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
           DS1820&lt;br /&gt;
&lt;br /&gt;
           LSB (1st 7 bits are the temperature)&lt;br /&gt;
           and the last bit represents .0 or .5 degrees&lt;br /&gt;
&lt;br /&gt;
           Example:   &amp;#039;87654321&amp;#039;&lt;br /&gt;
                       TTTTTTTH&lt;br /&gt;
           &lt;br /&gt;
             T = Temperature&lt;br /&gt;
             H = halves H=0 (.0), H=1 (.5)&lt;br /&gt;
&lt;br /&gt;
           MSB (is 0 when positive, 1 when negative) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define THERM_PORT   PORTB&lt;br /&gt;
#define THERM_DDR    DDRB&lt;br /&gt;
#define THERM_PIN    PINB&lt;br /&gt;
#define THERM_DQ     PB0  // Define DS1820 DQ pin&lt;br /&gt;
&lt;br /&gt;
#define LEDPIN  PB1  // built-in LED is on PB1 (Digispark Model A)&lt;br /&gt;
&lt;br /&gt;
#define THERM_INPUT_MODE()    THERM_DDR&amp;amp;=~(1&amp;lt;&amp;lt;THERM_DQ)&lt;br /&gt;
#define THERM_OUTPUT_MODE()   THERM_DDR|=(1&amp;lt;&amp;lt;THERM_DQ)&lt;br /&gt;
#define THERM_LOW()           THERM_PORT&amp;amp;=~(1&amp;lt;&amp;lt;THERM_DQ)&lt;br /&gt;
#define THERM_HIGH()          THERM_PORT|=(1&amp;lt;&amp;lt;THERM_DQ)&lt;br /&gt;
&lt;br /&gt;
#define HIGH   1&lt;br /&gt;
#define LOW    0&lt;br /&gt;
#define INPUT  1 &lt;br /&gt;
#define OUTPUT 0&lt;br /&gt;
&lt;br /&gt;
#define THERM_CMD_CONVERTTEMP    0x44&lt;br /&gt;
#define THERM_CMD_RSCRATCHPAD    0xbe&lt;br /&gt;
#define THERM_CMD_WSCRATCHPAD    0x4e&lt;br /&gt;
#define THERM_CMD_CPYSCRATCHPAD  0x48&lt;br /&gt;
#define THERM_CMD_RECEEPROM      0xb8&lt;br /&gt;
#define THERM_CMD_RPWRSUPPLY     0xb4&lt;br /&gt;
#define THERM_CMD_SEARCHROM      0xf0&lt;br /&gt;
#define THERM_CMD_READROM        0x33&lt;br /&gt;
#define THERM_CMD_MATCHROM       0x55&lt;br /&gt;
#define THERM_CMD_SKIPROM        0xcc&lt;br /&gt;
#define THERM_CMD_ALARMSEARCH    0xec&lt;br /&gt;
&lt;br /&gt;
#define THERM_DECIMAL_STEPS_12BIT   625    // 0.0625, for 12-bit accuracy&lt;br /&gt;
&lt;br /&gt;
#define PRESENCE_ERR 0xFF&lt;br /&gt;
#define DATA_ERR     0xFF&lt;br /&gt;
#define LAST_DEVICE  0x00&lt;br /&gt;
#define SEARCH_FIRST 0xFF&lt;br /&gt;
&lt;br /&gt;
#define CLEAR(s) memset(&amp;amp;(s), 0, sizeof(s))     // to clear an array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int      got_ack;&lt;br /&gt;
uint8_t  romcodes[20][9];  // store romcode of 20 sensors max&lt;br /&gt;
uint8_t  scratchpad[9];    // stores a scratchpad&lt;br /&gt;
&lt;br /&gt;
char buffer[16];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void pMode(int pin,int state)&lt;br /&gt;
{ &lt;br /&gt;
  if (state == OUTPUT)&lt;br /&gt;
  {&lt;br /&gt;
    (DDRB |= (1 &amp;lt;&amp;lt; pin)); &lt;br /&gt;
  } else { &lt;br /&gt;
    (DDRB &amp;amp;= ~(1 &amp;lt;&amp;lt; pin)); &lt;br /&gt;
  }&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
void dWrite(int pin, int state)&lt;br /&gt;
{&lt;br /&gt;
  if (state == HIGH)&lt;br /&gt;
  { &lt;br /&gt;
    (PORTB |= (1 &amp;lt;&amp;lt; pin)); &lt;br /&gt;
  } else {&lt;br /&gt;
    (PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; pin));&lt;br /&gt;
  }&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int dRead(int pin)&lt;br /&gt;
{ &lt;br /&gt;
  if (bit_is_set(PINB,pin))&lt;br /&gt;
  {&lt;br /&gt;
    return 1; &lt;br /&gt;
  } else { &lt;br /&gt;
    return 0; &lt;br /&gt;
  }&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void singleBlink()&lt;br /&gt;
{&lt;br /&gt;
  pMode(LEDPIN,OUTPUT);&lt;br /&gt;
  dWrite(LEDPIN,HIGH);&lt;br /&gt;
  _delay_ms(50);&lt;br /&gt;
  dWrite(LEDPIN,LOW);&lt;br /&gt;
  _delay_ms(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nrBlinker(int nr)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  if (nr &amp;lt; 100)    &lt;br /&gt;
    for (int i=int(nr/10); i&amp;gt;0; i--)&lt;br /&gt;
      singleBlink(); // blink tens&lt;br /&gt;
&lt;br /&gt;
  nr = nr - (int) (nr / 10) * 10;  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
&lt;br /&gt;
  if (nr &amp;lt; 10)&lt;br /&gt;
    for (int i=nr; i&amp;gt;0; i--)&lt;br /&gt;
      singleBlink(); // blink ones&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -- OneWire functions --&lt;br /&gt;
&lt;br /&gt;
uint8_t owReset(int Pin)&lt;br /&gt;
{&lt;br /&gt;
  uint8_t i;&lt;br /&gt;
&lt;br /&gt;
  dWrite(Pin, HIGH);&lt;br /&gt;
  pMode(Pin, INPUT);&lt;br /&gt;
&lt;br /&gt;
  dWrite(Pin, LOW);  &lt;br /&gt;
  pMode(Pin, OUTPUT);    // bring low for 480us&lt;br /&gt;
&lt;br /&gt;
  _delay_us(480);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  // Release line and wait for 60us&lt;br /&gt;
  dWrite(Pin, HIGH);&lt;br /&gt;
  pMode(Pin, INPUT);&lt;br /&gt;
  _delay_us(60);&lt;br /&gt;
&lt;br /&gt;
  // store line value and wait for completion of 480us period&lt;br /&gt;
  i=dRead(Pin);&lt;br /&gt;
&lt;br /&gt;
  _delay_us(480);&lt;br /&gt;
  &lt;br /&gt;
  // return measured line value&lt;br /&gt;
  return i;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8_t therm_reset()&lt;br /&gt;
{&lt;br /&gt;
  uint8_t i;&lt;br /&gt;
&lt;br /&gt;
  // pull line low and wait for 480us&lt;br /&gt;
  THERM_LOW();&lt;br /&gt;
  THERM_OUTPUT_MODE();&lt;br /&gt;
  //therm_delay(480);&lt;br /&gt;
  _delay_us(480);&lt;br /&gt;
 &lt;br /&gt;
  // Release line and wait for 60us&lt;br /&gt;
  THERM_INPUT_MODE();&lt;br /&gt;
  //therm_delay(60);&lt;br /&gt;
  _delay_us(60);&lt;br /&gt;
&lt;br /&gt;
  // store line value and wait for completion of 480us period&lt;br /&gt;
  i=(THERM_PIN &amp;amp; (1&amp;lt;&amp;lt;THERM_DQ));&lt;br /&gt;
  //therm_delay(420);&lt;br /&gt;
  _delay_us(480);&lt;br /&gt;
    &lt;br /&gt;
  // return measured line value&lt;br /&gt;
  return i;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void therm_write_bit(uint8_t bit)&lt;br /&gt;
{&lt;br /&gt;
  // pull line low for 1us&lt;br /&gt;
  THERM_LOW();&lt;br /&gt;
  THERM_OUTPUT_MODE();&lt;br /&gt;
  //therm_delay(1);&lt;br /&gt;
  _delay_us(1);&lt;br /&gt;
  &lt;br /&gt;
  // if we want to write 1, release the line (if not will keep low)&lt;br /&gt;
  if (bit) THERM_INPUT_MODE();  &lt;br /&gt;
&lt;br /&gt;
  // wait for 60us and release the line&lt;br /&gt;
  //therm_delay(60);&lt;br /&gt;
  _delay_us(60);&lt;br /&gt;
  THERM_INPUT_MODE();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8_t therm_read_bit(void)&lt;br /&gt;
{&lt;br /&gt;
  uint8_t bit=0;&lt;br /&gt;
&lt;br /&gt;
  // pull line low for 1us&lt;br /&gt;
  THERM_LOW();&lt;br /&gt;
  THERM_OUTPUT_MODE();&lt;br /&gt;
  //therm_delay(1);&lt;br /&gt;
  _delay_us(1);&lt;br /&gt;
&lt;br /&gt;
  // release line and wait for 14us&lt;br /&gt;
  THERM_INPUT_MODE();&lt;br /&gt;
  //therm_delay(14);&lt;br /&gt;
  _delay_us(14);&lt;br /&gt;
&lt;br /&gt;
  // read line value&lt;br /&gt;
  if (THERM_PIN&amp;amp;(1&amp;lt;&amp;lt;THERM_DQ)) bit=1;&lt;br /&gt;
&lt;br /&gt;
  // wait for 45us to end and return read value&lt;br /&gt;
  //therm_delay(45);&lt;br /&gt;
  _delay_us(45);&lt;br /&gt;
&lt;br /&gt;
  return bit;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8_t therm_read_byte(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  uint8_t i=8, n=0;&lt;br /&gt;
 &lt;br /&gt;
  while(i--)&lt;br /&gt;
  {&lt;br /&gt;
    // shift one position right and store read value&lt;br /&gt;
    n&amp;gt;&amp;gt;=1;&lt;br /&gt;
    n|=(therm_read_bit()&amp;lt;&amp;lt;7);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void therm_write_byte(uint8_t byte)&lt;br /&gt;
{&lt;br /&gt;
  uint8_t i=8;&lt;br /&gt;
&lt;br /&gt;
  while(i--)&lt;br /&gt;
  {&lt;br /&gt;
    // write actual bit and shift one position right to make the next bit ready&lt;br /&gt;
    therm_write_bit(byte&amp;amp;1);&lt;br /&gt;
    byte&amp;gt;&amp;gt;=1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char therm_rom_search(unsigned char diff, unsigned char *id)&lt;br /&gt;
{&lt;br /&gt;
  // scans a one-wire bus for all attached DS18x20 sensors&lt;br /&gt;
&lt;br /&gt;
  unsigned char i, j, next_diff;&lt;br /&gt;
  unsigned char b;&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  if( therm_reset() )&lt;br /&gt;
    return PRESENCE_ERR;                       // error, no device found&lt;br /&gt;
    &lt;br /&gt;
  therm_write_byte( THERM_CMD_SEARCHROM );     // ROM search command&lt;br /&gt;
  next_diff = LAST_DEVICE;                     // unchanged on last device&lt;br /&gt;
  i = 8 * 8;                        // 8 bytes&lt;br /&gt;
  do&lt;br /&gt;
  {&lt;br /&gt;
    j = 8;                          // 8 bits&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
      b = therm_read_bit();      // read bit&lt;br /&gt;
&lt;br /&gt;
      // read complement bit&lt;br /&gt;
      if( therm_read_bit() ) &lt;br /&gt;
      {         &lt;br /&gt;
        if( b )                     // 11&lt;br /&gt;
          return DATA_ERR;          // data error&lt;br /&gt;
      } else {&lt;br /&gt;
        if( !b )&lt;br /&gt;
        {&lt;br /&gt;
          // 00 = 2 devices&lt;br /&gt;
          if( diff &amp;gt; i || ((*id &amp;amp; 1) &amp;amp;&amp;amp; diff != i) )&lt;br /&gt;
          {&lt;br /&gt;
            b = 1;                  // now 1&lt;br /&gt;
            next_diff = i;          // next pass 0&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      therm_write_bit( b );         // write bit&lt;br /&gt;
      *id &amp;gt;&amp;gt;= 1;&lt;br /&gt;
      if( b )                       // store bit&lt;br /&gt;
        *id |= 0x80;&lt;br /&gt;
      i--;&lt;br /&gt;
    } while( --j );&lt;br /&gt;
&lt;br /&gt;
    id++;                           // next byte&lt;br /&gt;
  } while( i );&lt;br /&gt;
&lt;br /&gt;
  return next_diff;                 // to continue search&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void start_meas( void )&lt;br /&gt;
{&lt;br /&gt;
  if( PINB &amp;amp; 1&amp;lt;&amp;lt; THERM_DQ )&lt;br /&gt;
  {&lt;br /&gt;
    therm_write_byte(THERM_CMD_CONVERTTEMP);    // read scratchpad&lt;br /&gt;
&lt;br /&gt;
    PORTB |= 1&amp;lt;&amp;lt; THERM_DQ;&lt;br /&gt;
    DDRB |= 1&amp;lt;&amp;lt; THERM_DQ;     // parasite power on&lt;br /&gt;
&lt;br /&gt;
  } else {&lt;br /&gt;
&lt;br /&gt;
    // Short circuit on bus&lt;br /&gt;
    _delay_ms(1000);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int scanbus(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // outputs the number of found devices and stores all roms in an array&lt;br /&gt;
  unsigned char id[8], diff;&lt;br /&gt;
  unsigned char i,x;&lt;br /&gt;
  unsigned char device_counter=0;&lt;br /&gt;
&lt;br /&gt;
  // clear array&lt;br /&gt;
&lt;br /&gt;
  for (x=1; x &amp;lt;= 20; x++)&lt;br /&gt;
  {&lt;br /&gt;
    romcodes[x][0] = 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  for( diff = SEARCH_FIRST; diff != LAST_DEVICE; )&lt;br /&gt;
  {&lt;br /&gt;
    diff = therm_rom_search( diff, id );&lt;br /&gt;
&lt;br /&gt;
    if( diff == PRESENCE_ERR )&lt;br /&gt;
    {&lt;br /&gt;
      //Serial.println(&amp;quot;scanbus: no sensors found&amp;quot;);&lt;br /&gt;
                 &lt;br /&gt;
      _delay_ms(1000);&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
    if( diff == DATA_ERR )&lt;br /&gt;
    {&lt;br /&gt;
      //Serial.println(&amp;quot;scanbus: Bus error&amp;quot;);&lt;br /&gt;
      _delay_ms(1000);&lt;br /&gt;
      &lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if( id[0] == 0x28 || id[0] == 0x10 )&lt;br /&gt;
    {&lt;br /&gt;
      // valid temperature sensor found&lt;br /&gt;
     &lt;br /&gt;
      // store romcode in array&lt;br /&gt;
      for( i = 0; i &amp;lt; 8; i++ )&lt;br /&gt;
      {&lt;br /&gt;
&lt;br /&gt;
        romcodes[device_counter][i]=id[i];       &lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      device_counter=device_counter+1;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return device_counter;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void therm_romtemp(uint8_t device)&lt;br /&gt;
{&lt;br /&gt;
  // address a specific sensor and retrieve its temperature&lt;br /&gt;
&lt;br /&gt;
  uint8_t i;&lt;br /&gt;
&lt;br /&gt;
  therm_reset();&lt;br /&gt;
  therm_write_byte(THERM_CMD_MATCHROM);&lt;br /&gt;
  for (i=0 ; i &amp;lt; 8; i++)&lt;br /&gt;
  {&lt;br /&gt;
    therm_write_byte(romcodes[device][i]);&lt;br /&gt;
  }&lt;br /&gt;
  therm_write_byte(THERM_CMD_CONVERTTEMP);&lt;br /&gt;
&lt;br /&gt;
  // wait until conversion is complete&lt;br /&gt;
  while(!therm_read_bit());&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  therm_reset();&lt;br /&gt;
  therm_write_byte(THERM_CMD_MATCHROM);&lt;br /&gt;
  for (i=0 ; i &amp;lt; 8; i++)&lt;br /&gt;
  {&lt;br /&gt;
    therm_write_byte(romcodes[device][i]);&lt;br /&gt;
  }&lt;br /&gt;
  therm_write_byte(THERM_CMD_RSCRATCHPAD);&lt;br /&gt;
&lt;br /&gt;
  // store the replies in the &amp;#039;scratchpad&amp;#039; variable&lt;br /&gt;
  for (i=0 ; i &amp;lt; 2; i++)&lt;br /&gt;
  {&lt;br /&gt;
    scratchpad[i]=therm_read_byte();&lt;br /&gt;
  }&lt;br /&gt;
  therm_reset();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void showdevs()&lt;br /&gt;
{&lt;br /&gt;
  // outputs all device romcodes stored in the array&lt;br /&gt;
&lt;br /&gt;
  unsigned char device=0;&lt;br /&gt;
  unsigned char rombyte=0;&lt;br /&gt;
  uint8_t digit;&lt;br /&gt;
  uint16_t decimal;&lt;br /&gt;
 &lt;br /&gt;
  while (1)&lt;br /&gt;
  {&lt;br /&gt;
&lt;br /&gt;
    if (romcodes[device][0] != 0)&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
      // valid romcode found in array &lt;br /&gt;
&lt;br /&gt;
      // target the sensor and read its temperature&lt;br /&gt;
      therm_romtemp(device);   // this fills the &amp;#039;scratchpad&amp;#039; variable&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      for (rombyte=0; rombyte &amp;lt; 8; rombyte++)&lt;br /&gt;
      {        &lt;br /&gt;
         &lt;br /&gt;
        //Serial.print(romcodes[device][rombyte],HEX); // display the romcode &lt;br /&gt;
        //Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
      } &lt;br /&gt;
&lt;br /&gt;
      //Serial.print(&amp;quot;  &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      // store temperature integer digits and decimal digits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      // display the &amp;#039;scratchpad&amp;#039; variable fields&lt;br /&gt;
&lt;br /&gt;
      // --half degree accuracy --   (9 bit)&lt;br /&gt;
      // test if temperature is .0 or .5&lt;br /&gt;
      //decimal = scratchpad[0] &amp;amp; (1 &amp;lt;&amp;lt; 0);  // decimals is in bit 0, store value&lt;br /&gt;
      // move temperature bits on position to the right&lt;br /&gt;
      //scratchpad[0]&amp;gt;&amp;gt;=1;&lt;br /&gt;
      //Serial.print(scratchpad[0]);&lt;br /&gt;
      //if (decimal == 0)&lt;br /&gt;
      //  Serial.print(&amp;quot;.0&amp;quot;);&lt;br /&gt;
      //else &lt;br /&gt;
      //  Serial.print(&amp;quot;.5&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      // -- 2-decimal of a degree accuracy -- (12 bit)&lt;br /&gt;
      // store whole digits&lt;br /&gt;
      digit=scratchpad[0]&amp;gt;&amp;gt;4;&lt;br /&gt;
      digit|=(scratchpad[1]&amp;amp;0x7)&amp;lt;&amp;lt;4;&lt;br /&gt;
      // store decimal digits&lt;br /&gt;
      decimal=scratchpad[0]&amp;amp;0xf;&lt;br /&gt;
      decimal*=THERM_DECIMAL_STEPS_12BIT;&lt;br /&gt;
&lt;br /&gt;
      //Serial.print(digit);&lt;br /&gt;
      //Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
      //Serial.print(decimal);&lt;br /&gt;
      //Serial.print(&amp;quot; C&amp;quot;);&lt;br /&gt;
      &lt;br /&gt;
      nrBlinker(digit); &lt;br /&gt;
      _delay_ms(1000);&lt;br /&gt;
&lt;br /&gt;
      // decimals are stored as a 4-digit positive number (e.g. 3625), scale back to &amp;lt; 100&lt;br /&gt;
      decimal = (int) (decimal / 100);&lt;br /&gt;
      nrBlinker(decimal); &lt;br /&gt;
         &lt;br /&gt;
      _delay_ms(1000);&lt;br /&gt;
      _delay_ms(1000);&lt;br /&gt;
&lt;br /&gt;
      device=device+1;&lt;br /&gt;
&lt;br /&gt;
    } else {&lt;br /&gt;
&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  } &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{ &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  uint8_t  ack;&lt;br /&gt;
  int devs;  &lt;br /&gt;
 &lt;br /&gt;
  while (1)&lt;br /&gt;
  {&lt;br /&gt;
&lt;br /&gt;
    ack = owReset(THERM_DQ);&lt;br /&gt;
&lt;br /&gt;
    if (ack == 1)&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
      // no sensors found&lt;br /&gt;
      nrBlinker(2);&lt;br /&gt;
&lt;br /&gt;
    } else {&lt;br /&gt;
&lt;br /&gt;
      // sensor activity detected       &lt;br /&gt;
&lt;br /&gt;
      devs=scanbus();  // detect and store device rom&amp;#039;s in an array       &lt;br /&gt;
        &lt;br /&gt;
      if (devs &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
    &lt;br /&gt;
        _delay_ms(1000);&lt;br /&gt;
        _delay_ms(1000);&lt;br /&gt;
&lt;br /&gt;
        showdevs();&lt;br /&gt;
&lt;br /&gt;
      } else {&lt;br /&gt;
&lt;br /&gt;
        // unable to get sensible data back from sensors&lt;br /&gt;
 &lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      _delay_ms(1000);&lt;br /&gt;
      _delay_ms(1000);&lt;br /&gt;
      _delay_ms(1000);&lt;br /&gt;
      _delay_ms(1000);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    _delay_ms(1000);&lt;br /&gt;
    _delay_ms(1000);&lt;br /&gt;
  &lt;br /&gt;
  } &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>