Sorry - I cut and pasted my code because it had other stuff in it. Here's the complete code unedited. I'm using ide version 18.

// Synchronization loop for long intervals (more than 32 seconds)

#define TimeLapLong(t1) (long)((unsigned long)millis()-(unsigned long)t1)

#define TimeLapWord(t1) (int)((word)millis()-(word)t1)

const long WATER_DEBOUNCE = 50;

const long LIGHTNING_1 = 250;

const long LIGHTNING_2 = 500;

const long TIME_SEND = 10000;

const long TIME_CLICK = 60000;

const int lightning_pin = 2;

const int errorCt = 50;

const int water_pin = 4;

unsigned long waterTotal = 0;

int waterLastRead = LOW;

unsigned long waterHit = 0;

//unsigned int waterDebounce = 50;

#define OUTBUFFER_SIZE 300

char outbuffer[OUTBUFFER_SIZE+1];

int outbufferIdx = 0;

unsigned long updatesSince = 0;

unsigned int lightning=0;

unsigned long lightning10=0;

unsigned long lightningTotal=0;

unsigned long lightningTotal60=0;

unsigned int lightning60[60];

unsigned int lightningPos = 0;

unsigned long lightningAttach1 = 0;

unsigned long lightningAttach2 = 0;

unsigned int water5[5];

void setup(){

pinMode(lightning_pin, INPUT);

digitalWrite(lightning_pin,HIGH);

for(int x = 0;x<60;x++) lightning60[x] = 0;

pinMode(water_pin,INPUT);

digitalWrite(water_pin,HIGH);

waterLastRead = digitalRead(water_pin);

for(int x = 0;x<5;x++) water5[x] = 0;

Serial.begin(115200);

}

int interupoff = 1;

int swappedState = 1;

unsigned long timetosend =0;

unsigned long timeclick=0;

//unsigned long timetoattach=0;

void loop()

{

//if (digitalRead(water_pin) != waterLastRead && (millis()-waterHit) > waterDebounce ) {

if (digitalRead(water_pin) != waterLastRead && TimeLapWord(waterHit) >=0 ) {

waterTotal++;

waterLastRead = !waterLastRead;

waterHit = millis() + WATER_DEBOUNCE; //millis();

}

int dRead = digitalRead(lightning_pin);

//Serial.println(dRead);

//if (swappedState == 0 && interupoff == 0 && dRead == 1 && (millis() - timetoattach) > 250) swappedState = 1;

if (swappedState == 0 && interupoff == 0 && dRead == 1 && TimeLapWord(lightningAttach1)) swappedState = 1;

if (interupoff == 1) {

if ( dRead == 0) {

lightningAdd();

}

} else if(TimeLapWord(lightningAttach2) && swappedState == 1){

interupoff = 1;

}

//if(millis() - timeclick > 60000) {

if(TimeLapLong(timeclick)>=0) {

timeclick += TIME_CLICK; //millis();

for(int x = 0;x<4;x++) water5[x] = water5[x+1];

water5[4] = waterTotal;

lightningTotal60 = 0;

lightning60[lightningPos]=lightning;

for(int x = 0;x<60;x++) {

if (lightning60[x] < errorCt) lightningTotal60 += lightning60[x];

}

lightning10=0;

int z;

for(int x = 0;x<10;x++) {

z = lightningPos - x;

if (z<0) z += 60;

if (lightning60[z] < errorCt) lightning10 += lightning60[z];

}

lightningPos++;

if (lightningPos>59) lightningPos = 0;

lightning = 0;

}

//if(millis() - timetosend > 10000) // 10000 every 10 seconds

if(TimeLapWord(timetosend)>=0)

{

timetosend += TIME_SEND; //millis(); // += 10000; //millis();

outbufferIdx = 0;

OutTitle('T','0');

OutBufferPrint(0,lightning,1);

OutTitle('T','t');

OutBufferPrint(1,lightningTotal,1);

OutTitle('T','l');

if (lightning < errorCt) {

OutBufferPrint(2,lightning10 + lightning,1);

} else {

outbuffer[outbufferIdx++] = '0';

}

OutTitle('T','6');

if (lightning < errorCt) {

OutBufferPrint(2,lightningTotal60 + lightning,1);

} else {

outbuffer[outbufferIdx++] = '0';

}

OutTitle('H','0');

OutBufferPrint(1,waterTotal,1);

OutTitle('H','5');

OutBufferPrint(1,waterTotal-water5[0],1);

OutTitle('T','u');

OutBufferPrint(3,updatesSince,1000);

updatesSince++;

OutTitle('T','i');

for (int x=0;x<60;x++){

int v = (int)lightning60[x];

if (v>9) Out('.');

if (x == lightningPos) Out('>');

OutBufferPrint(4,v,1);

if (v>9) Out('.');

}

Out(':');

//OutBufferPrint(5,millis(),1);

//Out(':');

//OutBufferPrint(6,millis()- timeclick,1);

//Out(':');

//OutBufferPrint(7,dRead,1);

//Out(':');

OutBufferPrint(8,outbufferIdx,1);

outbuffer[outbufferIdx++] ='\n';

outbuffer[outbufferIdx++] ='\0';

Serial.println(outbuffer);

}

}

void OutTitle(char c1, char c2)

{

if (outbufferIdx < OUTBUFFER_SIZE -4) {

outbuffer[outbufferIdx++] = '[';

outbuffer[outbufferIdx++] = c1; //'T';

outbuffer[outbufferIdx++] = c2;

outbuffer[outbufferIdx++] = ']';

}

}

void Out(char c)

{

if (outbufferIdx < OUTBUFFER_SIZE -1) {

outbuffer[outbufferIdx++] = c;

}

}

void OutBufferPrint(int id, unsigned long reading,unsigned long i) {

unsigned long temp;

//if (id > 10){

// outbuffer[outbufferIdx++] = 48+(id/10);

// id -= (id/10)*10;

//}

//outbuffer[outbufferIdx++] = ',';

while (i*10 <= reading){

i*=10;

}

while (i>0){

if (outbufferIdx >= OUTBUFFER_SIZE -1) break;

temp = reading/i;

reading -= temp * i;

outbuffer[outbufferIdx++] = 48+temp;

i/=10;

}

}

void lightningAdd()

{

//timetoattach = millis();

lightningAttach1 = millis() + LIGHTNING_1;

lightningAttach2 = millis() + LIGHTNING_2;

interupoff = 0;

swappedState = 0;

lightning++;

lightningTotal++;

}

//int freeRam1 () {

// extern int __heap_start, *__brkval;

// int v;

// return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);

//}