#include <Toggle.h> // https://github.com/Dlloydev/Toggle
class ToggleGroup : public Toggle {
public:
ToggleGroup(const char * name, const byte buttonPin, const byte ledPin, const byte latchPin)
: name(name), buttonPin(buttonPin), ledPin(ledPin), latchPin(latchPin) {}
void begin() {
pinMode(ledPin, OUTPUT);
pinMode(latchPin, OUTPUT);
Toggle::begin(buttonPin);
}
void ledOn() {
digitalWrite(ledPin, HIGH);
}
void ledOff() {
digitalWrite(ledPin, LOW);
}
void latchOn() {
digitalWrite(latchPin, HIGH);
}
void latchOff() {
digitalWrite(latchPin, LOW);
}
const char * getName() {
return name;
}
void check() {
Toggle::poll();
if (Toggle::onPress()) {
Serial.print(name);
Serial.println(" pressed");
}
else if (Toggle::onRelease()) {
Serial.print(name);
Serial.println(" released");
}
}
private:
const char * name;
byte buttonPin;
byte ledPin;
byte latchPin;
};
ToggleGroup groups[] = {
{"G1", 2, 13, 9},
{"G2", 3, 14, 10},
{"G3", 4, 15, 11},
{"G4", 5, 16, 12},
};
void setup() {
for (auto& g : groups) g.begin();
Serial.begin(115200);
Serial.println("READY");
}
void loop() {
for (auto& g : groups) g.check();
}