Second Assignment - Lights that Fade!

Circuit

Creating a schematic, circuit, and code that uses LEDs, a button, a for-loop, digitalWrite(), digitalRead(), and analogWrite().

Schematic

Calculation

LED Resistor

I chose 220Ω for the resistors for my LEDs because I needed to find the optimal resistor to prevent broken LEDs. The reasoning is -- two(yellow, green) have 1.8 V drop. Current is 20 mA. Voltage from Arduino is 5V. Using Ohm’s law(V = I x R), the circulation to find R is:5V - 1.8V = 3.2 V = 0.02 (20mA) x R. R is 160Ω. And the resistors nearest value to 160Ω were 220Ω.

Push Button Resistor

To prevent that current goes too high going into the ground pin, which would break the Arduino, the circuit needs a resistor for a push button. The maximum current allowed to go into the ground pin is 200mA. As current voltage is 5V, it needs at least 25 ohms of resistance. So I chose 100ohms for the push button resistor, which has nearest value to 25 ohms.

Firmware

// the number of the pushbutton pin
const int buttonPin = 2;  
 // yellow led connected to pin 4
const int yellowLed = 4; 
 // green led connected to pin 5
const int dimLed = 5;   
// variable for reading the pushbutton status   
int buttonValue = 0; 
 // the higher the number, the slower the speed of blinking of yellow LED     
int timer = 500;          

// the setup function runs once when you press reset or power the board
void setup() {
   // initialize yellow LED pin as an output
  pinMode(yellowLed, OUTPUT); 
  // initialize pushbutton pin as an input
  pinMode(buttonPin, INPUT); 
}

void loop() {
   //read the state of the pushbutton value:
  buttonValue = digitalRead(buttonPin); 
  //check if the pushbutton is pressed. If pressed, buttonValue is High.
  if (buttonValue == HIGH) { 
    //turn on yellow LED
    digitalWrite(yellowLed, HIGH); 
    //wait for 0.5 seconds
    delay(timer); 
     //turn off yellow LED
    digitalWrite(yellowLed, LOW); 
    //fade in from min to max in increments of 5 points
    for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) { 
    //sets the value (range from 0 to 255):
    analogWrite(dimLed, fadeValue);
    // wait for 20 milliseconds to see the dimming effect
    delay(20); 
    }
    // fade out from max to min in increments of 5 points
    for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {  
    //sets the value (range from 0 to 255):
    analogWrite(dimLed, fadeValue);
    //wait for 20 milliseconds to see the dimming effect
    delay(20); 

    }
    //check if the pushbutton is pressed. If not, buttonValue is low and turn off the dim LED.
  } else {
    digitalWrite(dimLed, LOW);
  }
}
    

Circuit's operation

Tada! Once clicked the push button, the yellow LED blinks for 0.5 seconds. Then, the green LED fades in and out smoothly.