#define debug 1                                                      
#define serial_speed 9600
const unsigned long WDT_PERIOD = 80 ;                                  
const unsigned long WDT_MAX_NUMBER = 690;                             
const  unsigned long PULSE_MAX_NUMBER = 10;                          
const  unsigned long PULSE_MAX_DURATION = 50;              
#include <JeeLib.h>
#include <avr/power.h>
#include <avr/sleep.h> 
float GAL;
byte PulsesPerGAL = 10;                                                                                                  
ISR(WDT_vect) { Sleepy::watchdogEvent(); }                  
const byte pulse_interrupt =    1;                                        
const byte pulse_count_pin =    3;                                        
typedef struct {                             
  int battery;
  unsigned long pulsecount;     	                                      
} Payload;
Payload water;
volatile unsigned long pulseCount;
unsigned long WDT_number;
boolean  p;
unsigned long now = 0;
void setup() {
  
  if (debug)        
  {
    Serial.begin(serial_speed);
    Serial.println("moteino_pulse_test");
    Serial.println();
    delay(1000);
  }
 
  water.pulsecount = 0;
  pulseCount = 0;
  WDT_number=720;
  p = 0;
  
  attachInterrupt(pulse_interrupt, onPulse, RISING);        
}                                                          
                                                           
void loop()

{ 
  
  if (p) {
    Sleepy::loseSomeTime(PULSE_MAX_DURATION);
    p=0;
  }
  
  if (Sleepy::loseSomeTime(WDT_PERIOD)==1) {
    WDT_number++;
  }
  
  if (WDT_number>=WDT_MAX_NUMBER || pulseCount>=PULSE_MAX_NUMBER) 
  {
    cli();
    water.pulsecount += (unsigned int) pulseCount;
    pulseCount = 0;
    sei();


 
    if (debug)
    {
      // Calculate Gallons
      GAL = water.pulsecount/PulsesPerGAL;
      Serial.print("Pulse count: ");
      Serial.print(water.pulsecount);
      Serial.print("P, ");
      Serial.print("Gallons: ");
      Serial.println(GAL);
      delay(100);
    }

    WDT_number=0;
  }

}

void onPulse()
{
  p=1;                                       
  pulseCount++;            
  
}


