# include "jbutton.h"
//jButton xjt;
//jButton add, stop;
//jButton test();
jButton arrayOf[3] = {3, 5, 4};
// single button empty constructor
// jButton myOneButton;
// jButton anotherOneButton();
const byte stillLED = 7;
unsigned long now;
void setup() {
Serial.begin(112500);
Serial.println("test jButton world!\n");
pinMode(stillLED, OUTPUT);
for (int ii = 0; ii < 3; ii++)
arrayOf[ii].begin();
setupPumps();
}
# define xjt 0
# define add 1
# define stop 2
void loop() {
now = millis();
arrayOf[xjt].loop();
arrayOf[add].loop();
arrayOf[stop].loop();
bool isStill = arrayOf[add].isStill();
// Serial.println(isStill); delay(10);
digitalWrite(stillLED, isStill ? HIGH : LOW);
if (arrayOf[xjt].isPress()) {
Serial.print("I saw that pressed! "); Serial.println(millis());
}
if (arrayOf[xjt].isRelease()) {
Serial.print("I saw that released! "); Serial.println(millis());
}
if (0) if (arrayOf[xjt].isStill()) {
Serial.print(" hey! "); Serial.println(millis());
}
if (arrayOf[add].isPress()) {
Serial.print("I see that add... ");
if (addAPump()) Serial.println("and cannot");
}
if (arrayOf[stop].isPress()) {
Serial.println("I saw that stop!");
stopAll();
}
servicePumps();
}
# 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 long lastTime;
void servicePumps()
{
if (now - lastTime < 1777) return;
lastTime = now;
// hacker flawed logic grrr.
oneLessPump();
}
/* load sharing */
static unsigned char nFirst;
static unsigned char myNext;
unsigned char addAPump()
{
if (nOn == 0) {
myNext = nFirst;
mincr(nFirst, NPUMPS); // ++; if (nFirst >= NPUMPS) nFirst = 0;
}
if (nOn == NPUMPS) {
Serial.print(" no more pumps nFirst is ");
Serial.println(nFirst);
return 1; // FAIL
}
nOn++;
lastTime = now;
/* 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);
Serial.print(" and added pump ");
Serial.println(myNext);
mincr(myNext, NPUMPS); // ++; if (myNext >= NPUMPS) myNext = 0;
return 0; // DID
}
void oneLessPump()
{
if (!nOn) return;
Serial.print("retire pump ");
for (char ii = 0; ii < NPUMPS; ii++) {
int aPump = (nFirst + ii - 1);
while (aPump < 0) aPump += NPUMPS;
while (aPump >= NPUMPS) aPump -= NPUMPS;
if (digitalRead(pumpPin[aPump]) == HIGH) {
Serial.print(aPump);
Serial.println(".");
digitalWrite(pumpPin[aPump], LOW);
nOn--;
break;
}
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
led5:A
led5:C