Skip to content

Instantly share code, notes, and snippets.

@jakubboucek
Last active December 23, 2017 12:52
Show Gist options
  • Save jakubboucek/8da8a8057004318df7f7c39a3c7ba41e to your computer and use it in GitHub Desktop.
Save jakubboucek/8da8a8057004318df7f7c39a3c7ba41e to your computer and use it in GitHub Desktop.
Arduino, 2 button, 2 LEDs, 1 XOR
int buttonResetId = 2;
int button1Id = 3;
int button2Id = 4;
int ledId = 5;
int ledMonitorId = 6;
int ledActivityId = LED_BUILTIN;
bool defaultState = false;
bool lastState = false;
bool monitorTogglerState = false;
int toggleCount = 0;
unsigned long timeToActivityLedOff = 0;
void setup() {
Serial.begin(9600);
pinMode(ledId, OUTPUT);
pinMode(ledMonitorId, OUTPUT);
pinMode(ledActivityId, OUTPUT);
pinMode(button1Id, INPUT);
pinMode(button2Id, INPUT);
initLedSeq();
Serial.println("Ready");
}
void loop() {
bool button1State, button2State, buttonResetState;
bool state;
String logMsg;
button1State = getDigitalBool(button1Id);
button2State = getDigitalBool(button2Id);
buttonResetState = getDigitalBool(buttonResetId);
state = button1State ^ button2State;
if(buttonResetState) {
defaultState = state;
Serial.println(String("[") + millis() + "] Reset");
}
state = defaultState ^ state;
if (state != lastState) {
setDigitalBool(ledId, state);
lastState = state;
logMsg = String("[") + millis() + "] Status is: " + (state ? "HIGH" : "LOW");
if (state) {
monitorTogglerState = !monitorTogglerState;
setDigitalBool(ledMonitorId, monitorTogglerState);
logMsg = logMsg + ", count: " + (++toggleCount);
}
Serial.println(logMsg);
markActivity();
}
else {
checkActivityDelay();
}
}
bool getDigitalBool(int id) {
return digitalRead(id) == HIGH;
}
void setDigitalBool(int id, bool state) {
digitalWrite(id, (state ? HIGH : LOW));
}
// DECORATION SECTION
// Flash sequence as ready manifest
void initLedSeq() {
int pause = 50;
int pauseBlank = 150;
int leds[] = {ledId, ledMonitorId};
for (int h = 0; h < 2; h++) {
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
setDigitalBool(leds[i], true);
delay(pause);
setDigitalBool(leds[i], false);
delay(pause);
}
delay(pauseBlank);
}
}
}
// Show accepted activity by led blink
void markActivity() {
setDigitalBool(ledActivityId, true);
timeToActivityLedOff = millis() + 10;
}
void checkActivityDelay() {
if (timeToActivityLedOff > 0 && timeToActivityLedOff < millis()) {
setDigitalBool(ledActivityId, false);
timeToActivityLedOff = 0;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment