Week 9: Digital and Analog Input/Output

For this week’s assignment, I drew inspiration from traffic lights. I aimed to replicate their functionality using a potentiometer for analog input and a button for digital input. The potentiometer serves to control the transition of the LED lights, mimicking the sequence of a traffic light as it turns from red to yellow and then to green. Additionally, pressing the button initiates a special state where all three lights blink simultaneously. 

Video Demonstration

link to the video: https://drive.google.com/file/d/1gREpijAMYFY12Yk4Ann_fiJzZrkjL-z1/view?usp=sharing

 

Code

The code uses the concepts of analog reading, digital input, LED control, and mapping to create a dynamic and interactive traffic light simulation.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
const int analogSensorPin = A0;
const int digitalSensorPin = 2;
const int redLEDPin = 6;
const int yellowLEDPin = 9;
const int greenLEDPin = 11;
//variables to store sensor readings
int analogSensorValue;
int digitalSensorState;
int trafficLightState = 0; // 0: red, 1: yellow, 2: green
void setup() {
pinMode(analogSensorPin, INPUT);
pinMode(digitalSensorPin, INPUT);
pinMode(redLEDPin, OUTPUT);
pinMode(yellowLEDPin, OUTPUT);
pinMode(greenLEDPin, OUTPUT);
}
void loop() {
analogSensorValue = analogRead(analogSensorPin);
digitalSensorState = digitalRead(digitalSensorPin);
//toggle traffic light state on button press
if (digitalSensorState == HIGH) {
// Blink all lights together
digitalWrite(redLEDPin, HIGH);
digitalWrite(yellowLEDPin, HIGH);
digitalWrite(greenLEDPin, HIGH);
delay(500); // Blink duration
digitalWrite(redLEDPin, LOW);
digitalWrite(yellowLEDPin, LOW);
digitalWrite(greenLEDPin, LOW);
delay(200); // Debouncing
} else {
//map potentiometer value to traffic light state
trafficLightState = map(analogSensorValue, 0, 1023, 0, 2);
//control traffic light LEDs based on state
if (trafficLightState == 0) {
//red light
digitalWrite(redLEDPin, HIGH);
digitalWrite(yellowLEDPin, LOW);
digitalWrite(greenLEDPin, LOW);
} else if (trafficLightState == 1) {
//yellow light
digitalWrite(redLEDPin, LOW);
digitalWrite(yellowLEDPin, HIGH);
digitalWrite(greenLEDPin, LOW);
} else if (trafficLightState == 2) {
// green light
digitalWrite(redLEDPin, LOW);
digitalWrite(yellowLEDPin, LOW);
digitalWrite(greenLEDPin, HIGH);
}
}
delay(50);
}
const int analogSensorPin = A0; const int digitalSensorPin = 2; const int redLEDPin = 6; const int yellowLEDPin = 9; const int greenLEDPin = 11; //variables to store sensor readings int analogSensorValue; int digitalSensorState; int trafficLightState = 0; // 0: red, 1: yellow, 2: green void setup() { pinMode(analogSensorPin, INPUT); pinMode(digitalSensorPin, INPUT); pinMode(redLEDPin, OUTPUT); pinMode(yellowLEDPin, OUTPUT); pinMode(greenLEDPin, OUTPUT); } void loop() { analogSensorValue = analogRead(analogSensorPin); digitalSensorState = digitalRead(digitalSensorPin); //toggle traffic light state on button press if (digitalSensorState == HIGH) { // Blink all lights together digitalWrite(redLEDPin, HIGH); digitalWrite(yellowLEDPin, HIGH); digitalWrite(greenLEDPin, HIGH); delay(500); // Blink duration digitalWrite(redLEDPin, LOW); digitalWrite(yellowLEDPin, LOW); digitalWrite(greenLEDPin, LOW); delay(200); // Debouncing } else { //map potentiometer value to traffic light state trafficLightState = map(analogSensorValue, 0, 1023, 0, 2); //control traffic light LEDs based on state if (trafficLightState == 0) { //red light digitalWrite(redLEDPin, HIGH); digitalWrite(yellowLEDPin, LOW); digitalWrite(greenLEDPin, LOW); } else if (trafficLightState == 1) { //yellow light digitalWrite(redLEDPin, LOW); digitalWrite(yellowLEDPin, HIGH); digitalWrite(greenLEDPin, LOW); } else if (trafficLightState == 2) { // green light digitalWrite(redLEDPin, LOW); digitalWrite(yellowLEDPin, LOW); digitalWrite(greenLEDPin, HIGH); } } delay(50); }
const int analogSensorPin = A0;
const int digitalSensorPin = 2;
const int redLEDPin = 6;
const int yellowLEDPin = 9;
const int greenLEDPin = 11;

//variables to store sensor readings
int analogSensorValue;
int digitalSensorState;
int trafficLightState = 0; // 0: red, 1: yellow, 2: green

void setup() {
  pinMode(analogSensorPin, INPUT);
  pinMode(digitalSensorPin, INPUT);
  pinMode(redLEDPin, OUTPUT);
  pinMode(yellowLEDPin, OUTPUT);
  pinMode(greenLEDPin, OUTPUT);
}

void loop() {
  analogSensorValue = analogRead(analogSensorPin);

  digitalSensorState = digitalRead(digitalSensorPin);

  //toggle traffic light state on button press
  if (digitalSensorState == HIGH) {
    // Blink all lights together
    digitalWrite(redLEDPin, HIGH);
    digitalWrite(yellowLEDPin, HIGH);
    digitalWrite(greenLEDPin, HIGH);
    delay(500); // Blink duration
    digitalWrite(redLEDPin, LOW);
    digitalWrite(yellowLEDPin, LOW);
    digitalWrite(greenLEDPin, LOW);
    delay(200); // Debouncing
  } else {
    //map potentiometer value to traffic light state
    trafficLightState = map(analogSensorValue, 0, 1023, 0, 2);

    //control traffic light LEDs based on state
    if (trafficLightState == 0) {
      //red light
      digitalWrite(redLEDPin, HIGH);
      digitalWrite(yellowLEDPin, LOW);
      digitalWrite(greenLEDPin, LOW);
    } else if (trafficLightState == 1) {
      //yellow light
      digitalWrite(redLEDPin, LOW);
      digitalWrite(yellowLEDPin, HIGH);
      digitalWrite(greenLEDPin, LOW);
    } else if (trafficLightState == 2) {
      // green light
      digitalWrite(redLEDPin, LOW);
      digitalWrite(yellowLEDPin, LOW);
      digitalWrite(greenLEDPin, HIGH);
    }
  }
  delay(50);
}

I enjoyed working on this assignment since there were numerous ways to modify the LEDs’ behavior. The only challenging aspect was recording the video, as the potentiometer is a bit tough to turn, and it ends up rotating the entire breadboard with it :/

 

Leave a Reply