Introduction: Beginning Arduino: Delay Without Delay()

About: Jack passed away May 20, 2018 after a long battle with cancer. His Instructables site will be kept active and questions will be answered by our son-in-law, Terry Pilling. Most of Jack's instructables are tuto…

When you use the delay() function your program stops and nothing else can happen during the delay.

That is easy, but what if you want to have something else going on during the delay?

The answer; use millis().

This tutorial is a simple sketch and circuit to show how this is done.

You will need:

  • Arduino
  • Breadboard
  • Jumper wires
  • 2 - LEDs, I used one red and one green
  • 2 - 330-560 Ohm resistors, for LEDs
  • Pushbutton switch

Step 1: The Circuit

Follow the diagram and build the circuit from the parts list on the previous page.

Step 2: The Code

/*********************************************************
 * Demonstration using millis() instead of delay() so 
 * another activity can happen within the delay.
 *
 * The anode of a red LED is connected to pin 10 with a 
 * resistor in series connected to ground. 
 *
 * The anode of a green LED is connected to pin 11 with a 
 * resistor in series connected to ground. 
 *
 * A pushbutton switch is connected to pin 12 and ground.
 *
 * The red LED blinks on for one second then off for one
 * second.
 *
 * The green LED lights when the button is pressed.
 *
 *********************************************************/


unsigned long time = millis();

int toggle = 1;

/**********************************************
 * setup() function
 **********************************************/
void setup()
{
  pinMode(10, OUTPUT);        //Red LED
  pinMode(11, OUTPUT);        //Green LED

  pinMode (12, INPUT_PULLUP); //Switch
  
  digitalWrite(10, HIGH);     //Initial state of red LED
}

/**********************************************
 * loop() function
 **********************************************/
void loop()
{
  if(millis()-time > 1000)     //Has one second passed?
  {
    toggle = !toggle;          //If so not toggle 
    digitalWrite(10, toggle);  //toggle LED
    time = millis();           //and reset time.
  }
 
  digitalWrite(11, !digitalRead(12)); //Light green LED if Button pressed.
}
Make it Glow!

Participated in the
Make it Glow!