Taking an in-depth look into the Blink Without Delay sketch and questions

Hello,
My goal is to fully understand the Blink Without Delay sketch (full sketch below).

Question #1:
Here in the code:

long interval = 1000;

Applying this sketch to other sketches where there are multiple and different delays or 'waits', can I do something like this:
If so, I'm guessing this can be put into an array...

long duration = 10;
long duration1 = 1000;
long duration2 = 2000;
long duration3 = 5000;
//...

or something like this:

#define T_DURATION 4
long duration [T_DURATION] = {10, 1000, 2000, 5000};
//...

Question #2:
This part of the code:

int ledState = LOW;

Instead could I use a boolean command like:

boolean ledState = LOW;

//...
//...
if (ledState == LOW)
      ledState = !ledState;
    else
      ledState;

I may one or two more q's I'll post in a moment.

Here is the full Blink Without Delay sketch for reference:

// Blink without Delay
 
 created 2005
 by David A. Mellis
 modified 8 Feb 2010
 by Paul Stoffregen
 
 This example code is in the public domain.


// constants won't change. Used here to 
// set pin numbers:
const int ledPin =  13;      // the number of the LED pin

// Variables will change:
int ledState = LOW;             // ledState used to set the LED
long previousMillis = 0;        // will store last time LED was updated

// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);      
}

void loop()
{
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the 
  // difference between the current time and last time you blinked 
  // the LED is bigger than the interval at which you want to 
  // blink the LED.
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

Thomas

Pretty much "yes" to all but one of your comments I think. Instead of

boolean ledState = LOW;

//...
//...
if (ledState == LOW)
      ledState = !ledState;
    else
      ledState;

use

boolean ledState = false ;

//...
//...

    ledState = !ledState;

You can have different durations. Where you use them depends on what you are trying to do. They can be scalar variables, or an array.

Instead could I use a boolean command like:

You could, but it's not recommended. Boolean variables should have values of true or false, not HIGH or LOW.

If you do that, though, testing for false and then assigning true or false to toggle the value is silly. Just toggle it:

    ledState = !ledState;

thomas3120:

if (ledState == LOW)

ledState = !ledState;
   else
     ledState;

This sets ledState to true at the first iteration and doesn't change it subsequently. Probably not what you intended.

Thanks for the replies.

@Paul

PaulS:
You can have different durations. Where you use them depends on what you are trying to do. They can be scalar variables, or an array.

Paul, scaler variables would be like incremental/decremental variables? Could you explain a bit more on scaler variables? ...or give me a quick example code using it?

...wait, would this be like using i++ or I--?

t

thomas3120:
Thanks for the replies.

@Paul

PaulS:
You can have different durations. Where you use them depends on what you are trying to do. They can be scalar variables, or an array.

Paul, scaler variables would be like incremental/decremental variables? Could you explain a bit more on scaler variables? ...or give me a quick example code using it?

scaler = not array or matrix, ie int, long, double, char, etc