I struggled to think of any creative ideas at first and just started working. After a while, my initial idea was to have 4 buttons and 4 bulbs, where clicking on a button triggers a temporary lighting of the bulbs in the order 1234, the second triggers them in the same order with the last bulb off (123), third lights 2 bulbs (12), and the fourth lights 1. If you click two times, the order changes to 4123, and the same logic applies to buttons, 2, 3, and 4. Then if three clicks it is 3412, and if 4 clicks it is 2341, basically shifting every number to fit in all four possible positions.
Major Struggles
This assignment was actually very challenging for me for several reasons. Firstaly, I was not able to get buttons until Sunday night which made me very stressed while working during the tight time. I was not able to find big colorful buttons like the ones which my peers have in their kits; I found much smaller ones instead which are all just black. This in itself made it very hard to try them out properly and I would sometimes cause the buttons to fall off from the circuit if I simply press a bit hard. In order to resolve the color issue, I actually used nail polish to color the small surfaces of the buttons.

I kept working for hours and a recurring issue kept happening; anything I use in the lower half of the board simply did not work, even if I copy the literal code for it and corresponding electrical wiring from above. After hours of extreme frustration, I realized that half of my breadboard doesn’t work properly.

In order to resolve the issue, I actually extended my power and ground wires to the right side too, and added a button and bulb on the right side. Even though I wanted to have more than three items at the start, that was not feasible at this point.
Idea and implementation
After getting acquainted with my board and with playing with electrical tools in general, I started to dive right into my idea. I realized that lighting the bulbs one after the other might be too much work that is not very necessary so I decided to just dismiss that idea. I decided pressing certain buttons would trigger certain bulbs and that pressing several buttons together would yield another result.
I was able to achieve this goal after several trials and errors where the following applies to my final project:
- Pressing the blue button on the left turns the 3 bulbs on
- Pressing it again right after turning them on turns them all off
- Pressing the purple button in the middle turns the last 2 (yellow and white) bulbs on
- Pressing it again right after turning them on turns them off
- Pressing the dark red button on the left turns the 1st and 3rd (red and white) bulbs on
- Pressing it again right after turning them on turns them off
- Pressing/holding the first and second buttons together turns only the red (1st) one on
- Pressing/holding the second and third buttons together turns only the yellow (2nd) one on
- Pressing/holding the third and first buttons together turns only the white (3rd) one on
- Pressing/holding the 3 buttons simply turns them all off
It should be noted that I made sure that if you already had some lights on and click a certain button, it adapts the bulbs to fit the appropriate output without having to turn off all of them and resetting then turning the appropriate ones on, which is so much aesthetically pleasing.
Below, I show how clicking on two buttons lights one bulb up (red in this case).
Below is the final assignment:
I learned so much from this assignment as the experience of coding and building such circuits is quite new me, and my pace is not as fast as with Processing which will require some extra effort from my end.
Here is the code I used for the circuit:
int ledRed = 5; //pin of the red bulb
int ledYellow = 9; //pin of yellow bulb
int ledWhite = 11; //pin of white bulb
int prevButtonState1= LOW; //previous state of blue button
int prevButtonState2= LOW; //previous state of purple button
int prevButtonState3= LOW; //previous state of red button
int ledState1; //state of red bulb
int ledState2; //state of yellow bulb
int ledState3; //state of white bulb
int buttonBlue = 4; //pin of blue button
int buttonPurple = 8; //pin of purple button
int buttonRed = 10; //pin of red button
void setup() {
ledState1 = LOW; //initializing blue button state to not clicked
ledState2 = LOW; //initializing purple button state to not clicked
ledState3 = LOW; //initializing red button state to not clicked
pinMode(ledRed, OUTPUT); //declaring red led as output variable
pinMode(buttonBlue, INPUT); //declaring blue button as intput variable
pinMode(ledYellow, OUTPUT); //declaring yellow led as output variable
pinMode(buttonPurple, INPUT); //declaring purple button as intput variable
pinMode(ledWhite, OUTPUT); //declaring white led as output variable
pinMode(buttonRed, INPUT); //declaring red button as intput variable
Serial.begin(9600);
}
void loop() {
int currentButtonState1 = digitalRead(buttonBlue); //setting variable to digital reading of state of blue button
int currentButtonState2 = digitalRead(buttonPurple); //setting variable to digital reading of state of purple button
int currentButtonState3 = digitalRead(buttonRed); //setting variable to digital reading of state of red button
if ((currentButtonState1 == HIGH) && (currentButtonState2 == HIGH) && (currentButtonState3 == HIGH)) { //if all buttons are pressed, turn all bulbs off
ledState1 = LOW;
ledState2 = LOW;
ledState3 = LOW;
}
else if ((currentButtonState1 == HIGH) && (currentButtonState2 == HIGH)) { //if both the blue and purple buttons are pressed/held together
if (ledState1 == HIGH) { //if red bulb was lighting turn it off
ledState1 = LOW;
}
else if (ledState1 == LOW) { //if red bulb was not on, turn it on
ledState1 = HIGH;
}
ledState2 = LOW; //ensure the yellow bulb is off
ledState3 = LOW; //ensure the white bulb is off
}
else if ((currentButtonState2 == HIGH) && (currentButtonState3 == HIGH)) { //if both the purple and red buttons are pressed/held together
if (ledState2 == HIGH) { //if yellow bulb was on, turn off
ledState2 = LOW;
}
else if (ledState2 == LOW) { //if yellow bulb was off, turn on
ledState2 = HIGH;
}
ledState1 = LOW; //ensure red bulb is off
ledState3 = LOW; //ensure white bulb is off
}
else if ((currentButtonState1 == HIGH) && (currentButtonState3 == HIGH)) { //if both the blue and red buttons are pressed/held together
if (ledState3 == HIGH) { //if white bulb is on, turn off
ledState3 = LOW;
}
else if (ledState3 == LOW) { //if white bulb is off, turn on
ledState3 = HIGH;
}
ledState1 = LOW; //ensure red bulb is off
ledState2 = LOW; //ensure yellow bulb is off
}
else if (currentButtonState1 == HIGH && prevButtonState1 == LOW) { //if blue button is pressed
if (ledState1 == HIGH && ledState2 == HIGH && ledState3 == HIGH) { //if this was the last button previously pressed, turn off all bulbs
ledState1 = LOW;
ledState2 = LOW;
ledState3 = LOW;
}
else { //otherwise, turn them all on
ledState1 = HIGH;
ledState2 = HIGH;
ledState3 = HIGH;
}
}
else if (currentButtonState2 == HIGH && prevButtonState2 == LOW) { //if the purple button is pressed
if (ledState2 == HIGH && ledState3 == HIGH && ledState1 == LOW) { //if this was the last pressed button, turn the lit ones off
ledState2 = LOW;
ledState3 = LOW;
}
else { //otherwise, turn the yellow and white bulbs only on
ledState2 = HIGH;
ledState3 = HIGH;
ledState1 = LOW;
}
}
else if (currentButtonState3 == HIGH && prevButtonState3 == LOW) { //if the red button is pressed
if (ledState1 == HIGH && ledState3 == HIGH && ledState2 == LOW) { //if it was teh last pressed button, turn lit ones off
ledState1 = LOW;
ledState3 = LOW;
}
else { //otherwise, turn the red and white bulbs on
ledState3 = HIGH;
ledState1 = HIGH;
ledState2 = LOW;
}
}
digitalWrite(ledRed, ledState1);
digitalWrite(ledYellow, ledState2);
digitalWrite(ledWhite, ledState3); //update the bulbs accordingly
prevButtonState1 = currentButtonState1;
prevButtonState2 = currentButtonState2;
prevButtonState3 = currentButtonState3; //update the current states of the buttons for evaluation in the next frame
}