Tim,
this is the full code, without the date and time...sometimes it is put empty lines to log, or stop the log, however serial sais log ok.
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <OneWire.h>
#include <DallasTemperature.h>
byte mac[] = {
0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };
// change to your network settings
IPAddress ip(192,168,9,110);
IPAddress gateway(192, 168, 9, 1);
IPAddress subnet(255, 255, 255, 0);
// change to your server
IPAddress server(184,106,153,149);
// Data wire is plugged into pin 3 on the Arduino
#define ONE_WIRE_BUS 3
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
//Variables
EthernetClient client;
int totalCount = 0;
int loopCount = 0;
char pageAdd[140];
int temp0; //temperature 1
int temp1; //temperature 2
int temp2; //temperature 3
int numberOfDevices; // Number of temperature devices found
DeviceAddress tempDeviceAddress; // We'll use this variable to store a found device address
// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
for (uint8_t i = 0; i < 8; i++)
{
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}
//**********SETUP***************
void setup() {
Serial.begin(9600);
// disable SD SPI
pinMode(8,OUTPUT);
digitalWrite(8,HIGH);
// Start ethernet
Serial.println("Starting ethernet...");
Ethernet.begin(mac, ip, gateway, gateway, subnet);
// If using dhcp, comment out the line above
// and uncomment the next 2 lines
//if(!Ethernet.begin(mac)) Serial.println("failed");
//else Serial.println("ok");
digitalWrite(10,HIGH);
Serial.println(Ethernet.localIP());
//start SD
Serial.print("Starting SD...");
if(!SD.begin(8)) Serial.println("failed");
else Serial.print("ok ");
delay(2000);
Serial.println("Ready");
//Start sensors
sensors.begin();
// Grab a count of devices on the wire
numberOfDevices = sensors.getDeviceCount();
// locate devices on the bus
Serial.print("Locating devices...");
Serial.print("Found ");
Serial.print(numberOfDevices, DEC);
Serial.println(" devices.");
// report parasite power requirements
Serial.print("Parasite power is: ");
if (sensors.isParasitePowerMode()) Serial.println("ON");
else Serial.println("OFF");
// Loop through each device, print out address
for(int i=0;i<numberOfDevices; i++)
{
// Search the wire for address
if(sensors.getAddress(tempDeviceAddress, i))
{
Serial.print("Found device ");
Serial.print(i, DEC);
Serial.print(" with address: ");
printAddress(tempDeviceAddress);
Serial.println();
delay(100);
// Get inital sensor readings to avoid 85 degrees
sensors.requestTemperatures(); //issue global request for each temp sensor on network to return a temp
if(sensors.getAddress(tempDeviceAddress, 0))
temp0=(sensors.getTempC(tempDeviceAddress)); //read temp from sensor 0
if(sensors.getAddress(tempDeviceAddress, 1))
temp1=(sensors.getTempC(tempDeviceAddress)); //read temp from sensor 1
if(sensors.getAddress(tempDeviceAddress, 2))
temp2=(sensors.getTempC(tempDeviceAddress)); //read temp from sensor 2
}
}
}
//****************LOOP****************
void loop()
{
if(loopCount < 30)
{
// if loopCount is less than 30, just delay a second
delay(1000);
}
else
{
// every thirty seconds this runs
loopCount = 0;
// Modify next line to load different page
// or pass values to server
//get temperatures
Serial.print("Getting temperatures...\n\r");
sensors.requestTemperatures(); //issue global request for each temp sensor on network to return a temp
if(sensors.getAddress(tempDeviceAddress, 0))
temp0=(sensors.getTempC(tempDeviceAddress)); //read temp from sensor 0
if(sensors.getAddress(tempDeviceAddress, 1))
temp1=(sensors.getTempC(tempDeviceAddress)); //read temp from sensor 1
if(sensors.getAddress(tempDeviceAddress, 2))
temp2=(sensors.getTempC(tempDeviceAddress)); //read temp from sensor 2
Serial.print("Temperatures are ");
Serial.print(temp0);
Serial.print(" Celsius, ");
Serial.print(temp1);
Serial.print(" Celsius, ");
Serial.print(temp2);
Serial.print(" Celsius, ");
Serial.print("\n\r");
sprintf(pageAdd,"/update?key=XXXXXXXXXXXXXX&field1=%u&field2=%u&field3=%u",temp0,temp1,temp2);
// sprintf(pageAdd,"/",totalCount);
// sprintf(pageAdd,"/arduino.php?test=%u",totalCount);
if(!getPage(server,pageAdd)) Serial.print("Fail ");
else Serial.print("Pass ");
delay(500);
if(!logFile(temp0,temp1,temp2)) Serial.println("Log failed");
else Serial.println("Log ok");
totalCount++;
Serial.println(totalCount,DEC);
}
loopCount++;
}
int logFile(int temp0, int temp1, int temp2) {
File fh = SD.open("test.txt",FILE_WRITE);
if(!fh) {
Serial.println("Open fail");
return 0;
}
// Use the same character array here to send stuff to the file.
// pageAdd array is global
sprintf(pageAdd,"Field1=%u,Field2=%u,Field3=%u",temp0,temp1,temp2);
fh.println(pageAdd);
fh.close();
return 1;
}
byte getPage(IPAddress ipBuf,char *page)
{
int inChar;
char outBuf[128];
Serial.print("connecting...");
if(client.connect(ipBuf,80))
{
Serial.println("connected");
sprintf(outBuf,"GET %s HTTP/1.0\r\n\r\n",page);
client.write(outBuf);
}
else
{
Serial.println("failed");
return 0;
}
// connectLoop controls the hardware fail timeout
int connectLoop = 0;
while(client.connected())
{
while(client.available())
{
inChar = client.read();
Serial.write(inChar);
// set connectLoop to zero if a packet arrives
connectLoop = 0;
}
connectLoop++;
// if more than 10000 milliseconds since the last packet
if(connectLoop > 10000)
{
// then close the connection from this end.
Serial.println();
Serial.println("Timeout");
client.stop();
}
// this is a delay for the connectLoop timing
delay(1);
}
Serial.println();
Serial.println("disconnecting.");
// close client end
client.stop();
return 1;
}