Last active
December 23, 2017 12:52
-
-
Save jakubboucek/8da8a8057004318df7f7c39a3c7ba41e to your computer and use it in GitHub Desktop.
Arduino, 2 button, 2 LEDs, 1 XOR
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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