Keeping an LED on for 3 seconds

hello im brand new to arduino and ive been tasked with creating a code that turns on an LED depending on what i type in the serial monitor. it works but i want them to stay on for 3 seconds before turning off, can anyone help me?
heres my code

int LEDRedPin = 5; 

int LEDYellowPin = 3; 

int LEDGreenPin = 4; 

int LEDWhitePin = 2; 

void setup() 

{ 

  Serial.begin(9600); 

  pinMode(LEDRedPin, OUTPUT); 

  pinMode(LEDYellowPin, OUTPUT); 

  pinMode(LEDGreenPin, OUTPUT); 

  pinMode(LEDWhitePin, OUTPUT); 

} 

void toggleLED (int LEDPin) 

{ 

  digitalWrite(LEDPin, !digitalRead(LEDPin)); 

 

} 

void loop() 

{  

  if (Serial.available() > 0) 

  { 

    int inByte = Serial.read(); 

    switch (inByte) 

    { 

      case 'R': 

        toggleLED(LEDRedPin); 

        break; 

       case 'Y': 

        toggleLED(LEDYellowPin); 

        break; 

       case 'G': 

        toggleLED(LEDGreenPin); 

        break; 

       case 'W': 

        toggleLED(LEDWhitePin); 

        break; 

       default: 

        digitalWrite(LEDRedPin, LOW); 

        digitalWrite(LEDYellowPin, LOW); 

        digitalWrite(LEDGreenPin, LOW); 

        digitalWrite(LEDWhitePin, LOW); 

        break; 

    } 

  } 

}

If controlling only one led at the time is acceptable, just add delay(3000) after each toggle

Hello ausalmon

Yes, I have added a delay() function to your sketch.
Using the delay() function is a quick and easy, but unsightly addition.
Normally each letter would need its own 3 second timer.
Just try it out and play around.

int LEDRedPin = 5;
int LEDYellowPin = 3;
int LEDGreenPin = 4;
int LEDWhitePin = 2;
void setup()
{
  Serial.begin(9600);
  pinMode(LEDRedPin, OUTPUT);
  pinMode(LEDYellowPin, OUTPUT);
  pinMode(LEDGreenPin, OUTPUT);
  pinMode(LEDWhitePin, OUTPUT);
}
void toggleLED (int LEDPin)
{
  digitalWrite(LEDPin, !digitalRead(LEDPin));
}
void loop()
{
  if (Serial.available() > 0)
  {
    int inByte = Serial.read();
    switch (inByte)
    {
      case 'R':
        toggleLED(LEDRedPin);
        break;
      case 'Y':
        toggleLED(LEDYellowPin);
        break;
      case 'G':
        toggleLED(LEDGreenPin);
        break;
      case 'W':
        toggleLED(LEDWhitePin);
        break;
      default:
        delay(3000);
        digitalWrite(LEDRedPin, LOW);
        digitalWrite(LEDYellowPin, LOW);
        digitalWrite(LEDGreenPin, LOW);
        digitalWrite(LEDWhitePin, LOW);
        break;
    }
  }
}

Have a nice day and enjoy coding in C++.

1 Like

Is this homework?

Put this, inside the close brace for the if...

    delay(3000);

Try the following sketch:

#define R 5
#define Y 3
#define G 4
#define W 2

void setup()
{
  Serial.begin(9600);

  pinMode(R, OUTPUT);
  pinMode(Y, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(W, OUTPUT);
}

void loop()
{
  if (Serial.available() > 0)
  {
    char inChar = Serial.read();
    switch (inChar)
    {
      case 'R':
        turnOn(R);
        break;

      case 'Y':
        turnOn(Y);
        break;

      case 'G':
        turnOn(G);
        break;

      case 'W':
        turnOn(W);
        break;

      default:
        digitalWrite(R, LOW);
        digitalWrite(Y, LOW);
        digitalWrite(G, LOW);
        digitalWrite(W, LOW);
        break;
    }
  }
}

void turnOn(byte n)
{
  digitalWrite(n, HIGH);
  delay(3000);
  digitalWrite(n, LOW);
}

Here's a start, don't have time to finish, feel confident you can. :grin:

unsigned long
  redTimer,
  yellowTimer,
  greenTimer,
  whiteTimer;
int onTime = 3000;
const byte
  LEDRedPin = 5,
  LEDYellowPin = 3,
  LEDGreenPin = 4,
  LEDWhitePin = 2;

void setup()
{
  Serial.begin(9600); // set Serial Monitor to Newline
  pinMode(LEDRedPin, OUTPUT); 
  pinMode(LEDYellowPin, OUTPUT); 
  pinMode(LEDGreenPin, OUTPUT); 
  pinMode(LEDWhitePin, OUTPUT); 
  delay(3000);
}

void loop()
{
  static char inChar = '\n';
  
  if(Serial.available() > 0)
  {
    inChar = Serial.read();
    if(inChar == '\n'){};
  }
  switch (inChar)
  {
    case 'R':
    redTimer = millis();
    break;  
       // more cases...
  }
  digitalWrite(LEDRedPin, millis() - redTimer < onTime);
      // more digitalWrites...

}
1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.