# include "jbutton.h"

jButton xjt;

jButton add, stop;

jButton test();

void setup() {
  Serial.begin(112500);
  Serial.println("test jButton world!/n");

  xjt.begin(3);
  add.begin(5);
  stop.begin(4);

  setupPumps();
}

void loop() {

  xjt.update();
  add.update();
  stop.update();

  if (xjt.uolPress()) {
    Serial.print("I saw that pressed! "); Serial.println(millis());
  }

  if (xjt.uolRelease()) {
    Serial.print("I saw that released! "); Serial.println(millis());
  }


  if (xjt.uolStill()) {
    Serial.print("               hey! "); Serial.println(millis());
  }

  if (add.uolPress()) {
    Serial.print("I see that add... ");
    if (addAPump()) Serial.println("and cannot");
    else Serial.println("and did.");


  }

  if (stop.uolPress()) {
    Serial.println("I saw that stop!");
    stopAll();


  }
}

# define NPUMPS 4
const unsigned char pumpPin[] = {A0, A1, A2, A3};

# define mincr(x, z)  do { ++x; while (x >= z) x -= z; } while (0)

unsigned char nOn;

void setupPumps()
{
  for (unsigned char tt = 0; tt < NPUMPS; tt++)
    pinMode(pumpPin[tt], OUTPUT);

  nOn = 0;
  stopAll();
}

void stopAll()
{
  nOn = 0;

  for (unsigned char tt = 0; tt < NPUMPS; tt++)
    digitalWrite(pumpPin[tt], LOW);
}

unsigned char addAPump()
{
/* load sharing */
  static unsigned char nFirst;
  static unsigned char myNext;

  if (nOn == 0) {
    myNext = nFirst;
    mincr(nFirst, NPUMPS);  // ++; if (nFirst >= NPUMPS) nFirst = 0;
  }

  if (nOn == NPUMPS) return 1;    // FAIL

  nOn++;

/* here is where a pump might really be turned on, or the process for doing initiated
  Serial.print("pump ");
  Serial.print(nOn);    // number in the work force 1, 2 &c.
  Serial.print(" is ");
  Serial.print(myNext); // pump ID number
  Serial.println("");
*/
  digitalWrite(pumpPin[myNext], HIGH);

  mincr(myNext, NPUMPS);  // ++; if (myNext >= NPUMPS) myNext = 0;

  return 0;   // DID

/* non load sharing first
  if (nOn < NPUMPS) nOn++;
  else return 1;

  return 0;
*/
}

/*


    if (raw == 1) {
      if (state == 0)
        iPress = 1;

      state = 1;
    }
    else {
      if (state == 1)
        iRelease = 1;

      state = 0;
    }

*/