Hello everybody
I'm starting using Arduino and the first thing that I wanted to test was Dalllas the Ethernet shield:
#include <OneWire.h>
// DS18S20 Temperature chip i/o
OneWire ds(10); // on pin 10
void setup(void) {
// initialize inputs/outputs
// start serial port
Serial.begin(9600);
}
int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
char buf[20];
void loop(void) {
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
Serial.print("No more addresses.\n");
ds.reset_search();
return;
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.print("CRC is not valid!\n");
return;
}
if ( addr[0] != 0x10) {
Serial.print("Device is not a DS18S20 family device.\n");
return;
}
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
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();
}
LowByte = data[0];
HighByte = data[1];
TReading = (HighByte << 8) + LowByte;
SignBit = TReading & 0x8000; // test most sig bit
if (SignBit) // negative
{
TReading = (TReading ^ 0xffff) + 1; // 2's comp
}
Tc_100 = (TReading*100/2);
Whole = Tc_100 / 100; // separate off the whole and fractional portions
Fract = Tc_100 % 100;
sprintf(buf, "%c%d.%d ",SignBit ? '-' : ' ', Whole, Fract < 10 ? 0 : Fract);
Serial.print( buf );
Serial.println();
}
The sketch above is working fine. But after adding Ethernet support no temperature shows:
#include <OneWire.h>
#include <SPI.h>
#include <Ethernet.h>
OneWire ds(10); // on pin 10
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x1A, 0x67 };
byte ip[] = { 192,168,0,10 };
Server server(80);
void setup(void) {
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
}
int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
char buf[20];
void loop(void) {
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
Serial.print("No more addresses.\n");
ds.reset_search();
return;
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.print("CRC is not valid!\n");
return;
}
if ( addr[0] != 0x10) {
Serial.print("Device is not a DS18S20 family device.\n");
return;
}
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
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();
}
LowByte = data[0];
HighByte = data[1];
TReading = (HighByte << 8) + LowByte;
SignBit = TReading & 0x8000; // test most sig bit
if (SignBit) // negative
{
TReading = (TReading ^ 0xffff) + 1; // 2's comp
}
Tc_100 = (TReading*100/2);
Whole = Tc_100 / 100; // separate off the whole and fractional portions
Fract = Tc_100 % 100;
sprintf(buf, "%c%d.%d ",SignBit ? '-' : ' ', Whole, Fract < 10 ? 0 : Fract);
Serial.print( buf );
Serial.println();
}
It seems like
ds.search(addr)
is unable to find the device because the loop always exites in this condition.
Any help is appreciated, thanks.
PS: using arduino-002 on Windows Vista