int BUTTON_1 = 11, BUTTON_2 = 12; // button set ups
int LED_1 = 2, LED_2 = 3, LED_3 = 4, LED_4 = 5; // led set ups
int currentButtonState_1, currentButtonState_2, lastButtonState_1, lastButtonState_2;
int noOfModes = 8, noOfPins = 3; // change every time a pin is added; noOfModes = 2^noOfPins
int modeCounter = 0, ledState = LOW;
int currentDecimal, decimal, binary = 0, remainder, product = 1; // for binary computation
void setup() {
pinMode(BUTTON_1, INPUT_PULLUP);
pinMode(BUTTON_2, INPUT_PULLUP);
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(LED_4, OUTPUT);
currentButtonState_1 = digitalRead(BUTTON_1);
currentButtonState_2 = digitalRead(BUTTON_2);
Serial.begin(115200);
}
void loop() {
// save last state
lastButtonState_1 = currentButtonState_1;
lastButtonState_2 = currentButtonState_2;
// read new state
currentButtonState_1 = digitalRead(BUTTON_1);
currentButtonState_2 = digitalRead(BUTTON_2);
if (lastButtonState_1 == HIGH && currentButtonState_1 == LOW) {
// to determine what mode the code currently is in
if (modeCounter < noOfModes-1) modeCounter++; // -1 because 0 is also a mode
else if (modeCounter == noOfModes-1) modeCounter = 0;
// to determine which led will be lighted
light(modeCounter);
// print out the current mode
Serial.print("Mode ");
Serial.print(modeCounter);
Serial.println(" activated.");
}
if (lastButtonState_2 == HIGH && currentButtonState_2 == LOW) {
ledState = !ledState;
digitalWrite(LED_4, ledState);
if (ledState == LOW) Serial.println("Clockwise activated.");
else Serial.println("Counter clockwise activated.");
}
}
int light(int i) {
for (int j = 1; j <= noOfPins; j++) {
digitalWrite(j+1, LOW); // all lights will be turned off
}
// set & reset values
currentDecimal = i;
decimal = i;
product = 1;
binary = 0;
while (decimal != 0) {
remainder = decimal % 2;
binary = binary + (remainder * product);
decimal = decimal / 2;
product *= 10;
switch (product) {
case 10:
if (remainder == 1) digitalWrite(LED_1, HIGH);
else digitalWrite(LED_1, LOW);
break;
case 100:
if (remainder == 1) digitalWrite(LED_2, HIGH);
else digitalWrite(LED_2, LOW);
break;
case 1000:
if (remainder == 1) digitalWrite(LED_3, HIGH);
else digitalWrite(LED_3, LOW);
break;
}
}
Serial.print("(");
Serial.print(binary);
Serial.print(") ");
}