-A +A

 

LED Sequencing on the Arduino

Today's examples are available here

Here are a couple of LED resistor calculators:

But for most of our LEDs, which are 1.8 volts (called forward voltage) and the Arduino's 5v power, and a typical amperage for the LED of between 20-30 miliamps, a resistor between 120 and 220 ohm will do nicely. Larger resistors will lead to dimmer LEDs, smaller will cause the LED to overheat and sometimes literally burst.

Arduino Example Code

Cut'n Paste or Download Examples

BIG TEXT | SMALL TEXT

Download playing_with_leds_01.txt file

Basic code to light up a bunch of leds:

/* Playing with LEDs 01
*  Light up 10 LEDs
*/

// Set variables for the pins which will be connected to the LEDs
int ledPin1 = 11;
int ledPin2 = 10;
int ledPin3 = 9;
int ledPin4 = 8;
int ledPin5 = 7;
int ledPin6 = 6;
int ledPin7 = 5;
int ledPin8 = 4;
int ledPin9 = 3;
int ledPin10 =2;

// setup() is required by the Arduino. 
// This setup() sets the pin modes on the Arduino so they will output 
// some voltage when we tell them to
void setup()
{
 pinMode(ledPin1, OUTPUT); // pinMode() is a command for the Arduino
 pinMode(ledPin2, OUTPUT); // it takes two arguments, the first to specify which pin
 pinMode(ledPin3, OUTPUT); // and the second to specify whether that pin is going to
 pinMode(ledPin4, OUTPUT); // OUTPUT voltage or look for INPUT.
 pinMode(ledPin5, OUTPUT);
 pinMode(ledPin6, OUTPUT);
 pinMode(ledPin7, OUTPUT);
 pinMode(ledPin8, OUTPUT);
 pinMode(ledPin9, OUTPUT);
 pinMode(ledPin10, OUTPUT);
}

// loop() is required by the Arduino.
// This loop will turn on the ten LED's then turn them off
void loop()
{
 // Turn on LEDs
 digitalWrite(ledPin1, HIGH); // digitalWrite() is a command for the Arduino
 delay(1000);                 // it takes two arguments, the first to specify which pin
 digitalWrite(ledPin2, HIGH); // and the second to specify whether the pin is outputing
 delay(1000);                 // voltage (HIGH) or no voltage (LOW).
 digitalWrite(ledPin3, HIGH);
 delay(1000);
 digitalWrite(ledPin4, HIGH);
 delay(1000);
 digitalWrite(ledPin5, HIGH);
 delay(1000);
 digitalWrite(ledPin6, HIGH);
 delay(1000);
 digitalWrite(ledPin7, HIGH);
 delay(1000);
 digitalWrite(ledPin8, HIGH);
 delay(1000);
 digitalWrite(ledPin9, HIGH);
 delay(1000);
 digitalWrite(ledPin10, HIGH);
 delay(1000);
 // Turn off LEDs
 digitalWrite(ledPin1, LOW);
 delay(1000);
 digitalWrite(ledPin2, LOW);
 delay(1000);
 digitalWrite(ledPin3, LOW);
 delay(1000);
 digitalWrite(ledPin4, LOW);
 delay(1000);
 digitalWrite(ledPin5, LOW);
 delay(1000);
 digitalWrite(ledPin6, LOW);
 delay(1000);
 digitalWrite(ledPin7, LOW);
 delay(1000);
 digitalWrite(ledPin8, LOW);
 delay(1000);
 digitalWrite(ledPin9, LOW);
 delay(1000);
 digitalWrite(ledPin10, LOW);
 delay(1000);
}
					

BIG TEXT | SMALL TEXT

Download playing_with_leds_02.txt file

Add a variable for delay

/* Playing with LEDs 02
*  Light up several LEDs
*  Add variable for delay
*/

// Set variables 
int ledPin1 = 11;
int ledPin2 = 10;
int ledPin3 = 9;
int ledPin4 = 8;
int ledPin5 = 7;
int ledPin6 = 6;
int ledPin7 = 7;
int ledPin8 = 6;
int ledPin9 = 5;
int ledPin10 =4;
// Add a variable to hold the delay time
int myDelay = 50;

// Setup 
void setup()
{
 pinMode(ledPin1, OUTPUT);
 pinMode(ledPin2, OUTPUT);
 pinMode(ledPin3, OUTPUT);
 pinMode(ledPin4, OUTPUT);
 pinMode(ledPin5, OUTPUT);
 pinMode(ledPin6, OUTPUT);
 pinMode(ledPin7, OUTPUT);
 pinMode(ledPin8, OUTPUT);
 pinMode(ledPin9, OUTPUT);
 pinMode(ledPin10, OUTPUT);
}

// Loop
void loop()
{
 digitalWrite(ledPin1, HIGH);
 delay(myDelay);              //use myDelay instead of a number. Easier to change!
 digitalWrite(ledPin2, HIGH);
 delay(myDelay);
 digitalWrite(ledPin3, HIGH);
 delay(myDelay);
 digitalWrite(ledPin4, HIGH);
 delay(myDelay);
 digitalWrite(ledPin5, HIGH);
 delay(myDelay);
 digitalWrite(ledPin6, HIGH);
 delay(myDelay);
 digitalWrite(ledPin7, HIGH);
 delay(myDelay);
 digitalWrite(ledPin8, HIGH);
 delay(myDelay);
 digitalWrite(ledPin9, HIGH);
 delay(myDelay);
 digitalWrite(ledPin10, HIGH);
 delay(myDelay);
 digitalWrite(ledPin1, LOW);
 delay(myDelay);
 digitalWrite(ledPin2, LOW);
 delay(myDelay);
 digitalWrite(ledPin3, LOW);
 delay(myDelay);
 digitalWrite(ledPin4, LOW);
 delay(myDelay);
 digitalWrite(ledPin5, LOW);
 delay(myDelay);
 digitalWrite(ledPin6, LOW);
 delay(myDelay);
 digitalWrite(ledPin7, LOW);
 delay(myDelay);
 digitalWrite(ledPin8, LOW);
 delay(myDelay);
 digitalWrite(ledPin9, LOW);
 delay(myDelay);
 digitalWrite(ledPin10, LOW);
 delay(myDelay);

}
					

BIG TEXT | SMALL TEXT

Download playing_with_leds_03.txt file

Add fancy sequencing, hardcoded

/* Playing with LEDs 03
*  Light up several LEDs
*  Add delay
*  Add fancy sequencing, hardcoded
*/

// Set variables 
int ledPin1 = 11;
int ledPin2 = 10;
int ledPin3 = 9;
int ledPin4 = 8;
int ledPin5 = 7;
int ledPin6 = 6;
int ledPin7 = 7;
int ledPin8 = 6;
int ledPin9 = 5;
int ledPin10 =4;
int myDelay = 50;

// Setup 
void setup()
{
 pinMode(ledPin1, OUTPUT);
 pinMode(ledPin2, OUTPUT);
 pinMode(ledPin3, OUTPUT);
 pinMode(ledPin4, OUTPUT);
 pinMode(ledPin5, OUTPUT);
 pinMode(ledPin6, OUTPUT);
 pinMode(ledPin7, OUTPUT);
 pinMode(ledPin8, OUTPUT);
 pinMode(ledPin9, OUTPUT);
 pinMode(ledPin10, OUTPUT);
}

// Loop 
void loop()
{
 // --------------------------- Turn row on 
 digitalWrite(ledPin1, HIGH);
 delay(myDelay);
 digitalWrite(ledPin2, HIGH);
 delay(myDelay);
 digitalWrite(ledPin3, HIGH);
 delay(myDelay);
 digitalWrite(ledPin4, HIGH);
 delay(myDelay);
 digitalWrite(ledPin5, HIGH);
 delay(myDelay);
 digitalWrite(ledPin6, HIGH);
 delay(myDelay);
 digitalWrite(ledPin7, HIGH);
 delay(myDelay);
 digitalWrite(ledPin8, HIGH);
 delay(myDelay);
 digitalWrite(ledPin9, HIGH);
 delay(myDelay);
 digitalWrite(ledPin10, HIGH);
 delay(myDelay);
 // ---------------------------  Turn row off
 digitalWrite(ledPin1, LOW);
 delay(myDelay);
 digitalWrite(ledPin2, LOW);
 delay(myDelay);
 digitalWrite(ledPin3, LOW);
 delay(myDelay);
 digitalWrite(ledPin4, LOW);
 delay(myDelay);
 digitalWrite(ledPin5, LOW);
 delay(myDelay);
 digitalWrite(ledPin6, LOW);
 delay(myDelay);
 digitalWrite(ledPin7, LOW);
 delay(myDelay);
 digitalWrite(ledPin8, LOW);
 delay(myDelay);
 digitalWrite(ledPin9, LOW);
 delay(myDelay);
 digitalWrite(ledPin10, LOW);
 delay(myDelay);
 // Turn on in reverse
 digitalWrite(ledPin10, HIGH);
 delay(myDelay);
 digitalWrite(ledPin9, HIGH);
 delay(myDelay);
 digitalWrite(ledPin8, HIGH);
 delay(myDelay);
 digitalWrite(ledPin7, HIGH);
 delay(myDelay);
 digitalWrite(ledPin6, HIGH);
 delay(myDelay);
 digitalWrite(ledPin5, HIGH);
 delay(myDelay);
 digitalWrite(ledPin4, HIGH);
 delay(myDelay);
 digitalWrite(ledPin3, HIGH);
 delay(myDelay);
 digitalWrite(ledPin2, HIGH);
 delay(myDelay);
 digitalWrite(ledPin1, HIGH);
 delay(myDelay);
 // --------------------------- Turn off in reverse
 digitalWrite(ledPin10, LOW);
 delay(myDelay);
 digitalWrite(ledPin9, LOW);
 delay(myDelay);
 digitalWrite(ledPin8, LOW);
 delay(myDelay);
 digitalWrite(ledPin7, LOW);
 delay(myDelay);
 digitalWrite(ledPin6, LOW);
 delay(myDelay);
 digitalWrite(ledPin5, LOW);
 delay(myDelay);
 digitalWrite(ledPin4, LOW);
 delay(myDelay);
 digitalWrite(ledPin3, LOW);
 delay(myDelay);
 digitalWrite(ledPin2, LOW);
 delay(myDelay);
 digitalWrite(ledPin1, LOW);
 delay(myDelay);
 // --------------------------- Turn on inside out
 digitalWrite(ledPin5, HIGH);
 digitalWrite(ledPin6, HIGH);
 delay(myDelay);
 digitalWrite(ledPin4, HIGH);
 digitalWrite(ledPin7, HIGH);
 delay(myDelay);
 digitalWrite(ledPin8, HIGH);
 digitalWrite(ledPin3, HIGH);
 delay(myDelay);
 digitalWrite(ledPin9, HIGH);
 digitalWrite(ledPin2, HIGH);
 delay(myDelay);
 digitalWrite(ledPin10, HIGH);
 digitalWrite(ledPin1, HIGH);
 delay(myDelay);
 // --------------------------- Turn off outside in
 digitalWrite(ledPin10, LOW);
 digitalWrite(ledPin1, LOW);
 delay(myDelay);
 digitalWrite(ledPin9, LOW);
 digitalWrite(ledPin2, LOW);
 delay(myDelay);
 digitalWrite(ledPin8, LOW);
 digitalWrite(ledPin3, LOW);
 delay(myDelay);
 digitalWrite(ledPin7, LOW);
 digitalWrite(ledPin4, LOW);
 delay(myDelay);
 digitalWrite(ledPin6, LOW);
 digitalWrite(ledPin5, LOW);
 delay(myDelay);
}
					

BIG TEXT | SMALL TEXT

Download playing_with_leds_04.txt file

New concept: "for" statements

/* Playing with LEDs 04
*  Light up several LEDs
*  Add delay
*  Fancy sequencing, hardcoded
*  Do some repeat loops with a "for" statement
*/

// Set variables
int ledPin1 = 11;
int ledPin2 = 10;
int ledPin3 = 9;
int ledPin4 = 8;
int ledPin5 = 7;
int ledPin6 = 6;
int ledPin7 = 7;
int ledPin8 = 6;
int ledPin9 = 5;
int ledPin10 =4;
int myDelay = 50;

// Setup
void setup()
{
 pinMode(ledPin1, OUTPUT);
 pinMode(ledPin2, OUTPUT);
 pinMode(ledPin3, OUTPUT);
 pinMode(ledPin4, OUTPUT);
 pinMode(ledPin5, OUTPUT);
 pinMode(ledPin6, OUTPUT);
 pinMode(ledPin7, OUTPUT);
 pinMode(ledPin8, OUTPUT);
 pinMode(ledPin9, OUTPUT);
 pinMode(ledPin10, OUTPUT);
}

// Loop 
void loop()
{
 // --------------------------- Turn row on 
 digitalWrite(ledPin1, HIGH);
 delay(myDelay);
 digitalWrite(ledPin2, HIGH);
 delay(myDelay);
 digitalWrite(ledPin3, HIGH);
 delay(myDelay);
 digitalWrite(ledPin4, HIGH);
 delay(myDelay);
 digitalWrite(ledPin5, HIGH);
 delay(myDelay);
 digitalWrite(ledPin6, HIGH);
 delay(myDelay);
 digitalWrite(ledPin7, HIGH);
 delay(myDelay);
 digitalWrite(ledPin8, HIGH);
 delay(myDelay);
 digitalWrite(ledPin9, HIGH);
 delay(myDelay);
 digitalWrite(ledPin10, HIGH);
 delay(myDelay);
 // --------------------------- Turn row off
 digitalWrite(ledPin1, LOW);
 delay(myDelay);
 digitalWrite(ledPin2, LOW);
 delay(myDelay);
 digitalWrite(ledPin3, LOW);
 delay(myDelay);
 digitalWrite(ledPin4, LOW);
 delay(myDelay);
 digitalWrite(ledPin5, LOW);
 delay(myDelay);
 digitalWrite(ledPin6, LOW);
 delay(myDelay);
 digitalWrite(ledPin7, LOW);
 delay(myDelay);
 digitalWrite(ledPin8, LOW);
 delay(myDelay);
 digitalWrite(ledPin9, LOW);
 delay(myDelay);
 digitalWrite(ledPin10, LOW);
 delay(myDelay);
 // --------------------------- Turn on in reverse
 digitalWrite(ledPin10, HIGH);
 delay(myDelay);
 digitalWrite(ledPin9, HIGH);
 delay(myDelay);
 digitalWrite(ledPin8, HIGH);
 delay(myDelay);
 digitalWrite(ledPin7, HIGH);
 delay(myDelay);
 digitalWrite(ledPin6, HIGH);
 delay(myDelay);
 digitalWrite(ledPin5, HIGH);
 delay(myDelay);
 digitalWrite(ledPin4, HIGH);
 delay(myDelay);
 digitalWrite(ledPin3, HIGH);
 delay(myDelay);
 digitalWrite(ledPin2, HIGH);
 delay(myDelay);
 digitalWrite(ledPin1, HIGH);
 delay(myDelay);
 // --------------------------- Turn off in reverse
 digitalWrite(ledPin10, LOW);
 delay(myDelay);
 digitalWrite(ledPin9, LOW);
 delay(myDelay);
 digitalWrite(ledPin8, LOW);
 delay(myDelay);
 digitalWrite(ledPin7, LOW);
 delay(myDelay);
 digitalWrite(ledPin6, LOW);
 delay(myDelay);
 digitalWrite(ledPin5, LOW);
 delay(myDelay);
 digitalWrite(ledPin4, LOW);
 delay(myDelay);
 digitalWrite(ledPin3, LOW);
 delay(myDelay);
 digitalWrite(ledPin2, LOW);
 delay(myDelay);
 digitalWrite(ledPin1, LOW);
 delay(myDelay);
 // ------------------------------- Use a "for" loop to turn on
 // ------------------------------- LEDs in a pattern 6 times in 
 // ------------------------------- a row.
 for(int i=0; i<6; i=i+1) {
   // --------------------------- Turn on inside out
   digitalWrite(ledPin5, HIGH);
   digitalWrite(ledPin6, HIGH);
   delay(myDelay);
   digitalWrite(ledPin4, HIGH);
   digitalWrite(ledPin7, HIGH);
   delay(myDelay);
   digitalWrite(ledPin8, HIGH);
   digitalWrite(ledPin3, HIGH);
   delay(myDelay);
   digitalWrite(ledPin9, HIGH);
   digitalWrite(ledPin2, HIGH);
   delay(myDelay);
   digitalWrite(ledPin10, HIGH);
   digitalWrite(ledPin1, HIGH);
   delay(myDelay);
   // --------------------------- Turn off outside in
   digitalWrite(ledPin10, LOW);
   digitalWrite(ledPin1, LOW);
   delay(myDelay);
   digitalWrite(ledPin9, LOW);
   digitalWrite(ledPin2, LOW);
   delay(myDelay);
   digitalWrite(ledPin8, LOW);
   digitalWrite(ledPin3, LOW);
   delay(myDelay);
   digitalWrite(ledPin7, LOW);
   digitalWrite(ledPin4, LOW);
   delay(myDelay);
   digitalWrite(ledPin6, LOW);
   digitalWrite(ledPin5, LOW);
   delay(myDelay);
 }
 // ------------------------------- Use another "for" loop to turn
 // ------------------------------- on LEDs in a pattern 6 times in 
 // ------------------------------- a row.
  for(int i=0; i<6; i=i+1) {
   // --------------------------- Turn on outside in
   digitalWrite(ledPin10, HIGH);
   digitalWrite(ledPin1, HIGH);
   delay(myDelay);
   digitalWrite(ledPin9, HIGH);
   digitalWrite(ledPin2, HIGH);
   delay(myDelay);
   digitalWrite(ledPin8, HIGH);
   digitalWrite(ledPin3, HIGH);
   delay(myDelay);
   digitalWrite(ledPin7, HIGH);
   digitalWrite(ledPin4, HIGH);
   delay(myDelay);
   digitalWrite(ledPin6, HIGH);
   digitalWrite(ledPin5, HIGH);
   delay(myDelay);
   // --------------------------- Turn off outside in
   digitalWrite(ledPin6, LOW);
   digitalWrite(ledPin5, LOW);
   delay(myDelay);
   digitalWrite(ledPin7, LOW);
   digitalWrite(ledPin4, LOW);
   delay(myDelay);
   digitalWrite(ledPin8, LOW);
   digitalWrite(ledPin3, LOW);
   delay(myDelay);
   digitalWrite(ledPin9, LOW);
   digitalWrite(ledPin2, LOW);
   delay(myDelay);
   digitalWrite(ledPin10, LOW);
   digitalWrite(ledPin1, LOW);
   delay(myDelay);
 }
}
					

BIG TEXT | SMALL TEXT

Download swipe_hi.txt file

/* Eye-swipe HI
*     Setup 6 LEDs in a row and wave back and forth
*     to see the word HI spelled out
*/ 
// Set variables 
int ledPin1 = 11;
int ledPin2 = 10;
int ledPin3 = 9;
int ledPin4 = 8;
int ledPin5 = 7;
int ledPin6 = 6;
int myDelay = 15;

// Setup
void setup() 
{
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);
  pinMode(ledPin6, OUTPUT);
}

// Loop
void loop() 
{
  // -------------------------- H
  //H - column 1
  digitalWrite(ledPin1, HIGH);
  digitalWrite(ledPin2, HIGH);
  digitalWrite(ledPin3, HIGH);
  digitalWrite(ledPin4, HIGH);
  digitalWrite(ledPin5, HIGH);
  digitalWrite(ledPin6, HIGH);
  delay(myDelay);
  //H - column 2
  digitalWrite(ledPin1, LOW);
  digitalWrite(ledPin2, LOW);
  digitalWrite(ledPin3, LOW);
  digitalWrite(ledPin4, HIGH);
  digitalWrite(ledPin5, LOW);
  digitalWrite(ledPin6, LOW);
  delay(myDelay);
  //H - column 3
  digitalWrite(ledPin1, HIGH);
  digitalWrite(ledPin2, HIGH);
  digitalWrite(ledPin3, HIGH);
  digitalWrite(ledPin4, HIGH);
  digitalWrite(ledPin5, HIGH);
  digitalWrite(ledPin6, HIGH);
  delay(myDelay);
  // -------------------------- Space
  digitalWrite(ledPin1, LOW);
  digitalWrite(ledPin2, LOW);
  digitalWrite(ledPin3, LOW);
  digitalWrite(ledPin4, LOW);
  digitalWrite(ledPin5, LOW);
  digitalWrite(ledPin6, LOW);
  delay(myDelay);
  // -------------------------- I
  // I column 1
  digitalWrite(ledPin1, HIGH);
  digitalWrite(ledPin2, LOW);
  digitalWrite(ledPin3, LOW);
  digitalWrite(ledPin4, LOW);
  digitalWrite(ledPin5, LOW);
  digitalWrite(ledPin6, HIGH);
  delay(myDelay);
  //I column 2
  digitalWrite(ledPin1, HIGH);
  digitalWrite(ledPin2, HIGH);
  digitalWrite(ledPin3, HIGH);
  digitalWrite(ledPin4, HIGH);
  digitalWrite(ledPin5, HIGH);
  digitalWrite(ledPin6, HIGH);
  delay(myDelay);
  // I column 3
  digitalWrite(ledPin1, HIGH);
  digitalWrite(ledPin2, LOW);
  digitalWrite(ledPin3, LOW);
  digitalWrite(ledPin4, LOW);
  digitalWrite(ledPin5, LOW);
  digitalWrite(ledPin6, HIGH);
  delay(myDelay);
  // -------------------------- Space
  digitalWrite(ledPin1, LOW);
  digitalWrite(ledPin2, LOW);
  digitalWrite(ledPin3, LOW);
  digitalWrite(ledPin4, LOW);
  digitalWrite(ledPin5, LOW);
  digitalWrite(ledPin6, LOW);
  // -------------------------- Extended delay
  // -------------------------- before looping
  delay(myDelay*10);
}
					

BIG TEXT | SMALL TEXT

Download led_pwm01.txt file

New concept: analogWrite() and Pulse Width Modulation (PWM)

/* Variable Brightness LEDs
*  Done with three of Arduino's Pulse Width Modulation (PWM)
*  pins (9,10,11)
*/

// Set three pin variables for the three PWM pins
int pwmPin1 = 11;
int pwmPin2 = 10;
int pwmPin3 = 9;
// Set a variable for the intial value for the PWM
int pwmVal1 = 0;
int pwmVal2 = 0;
int pwmVal3 = 0;

// Setup
// Set PWM pins to OUTPUT
void setup() 
{
  pinMode(pwmPin1, OUTPUT);
  pinMode(pwmPin2, OUTPUT);
  pinMode(pwmPin3, OUTPUT);
}

// Loop
void loop() 
{
  // analogWrite's range runs from 0 to 255, so when any of 
  // our values reaches maximum, reset it to 0
  if(pwmVal1 >= 255) {
    pwmVal1 = 0;
  }
  if(pwmVal2 >= 255) {
    pwmVal2 = 0;
  }
  if(pwmVal3 >= 255) {
    pwmVal3 = 0;
  }
  // Set the first PWM pin to pwmVal1
  analogWrite(pwmPin1,pwmVal1);
  // Increment pwmVal1 by 1
  pwmVal1=pwmVal1+1;
  // Same as before...
  analogWrite(pwmPin2,pwmVal2);
  // ... but increment pwmVal2 by 5 instead of 1
  pwmVal2=pwmVal2+5;
  // Same as before...
  analogWrite(pwmPin3,pwmVal3);
  // ... but increment pwmVal3 by 10 instead of 1 or 5
  pwmVal3=pwmVal3+10;
  // Put in a short delay to see the effect
  delay(10);
}
					

BIG TEXT | SMALL TEXT

Download led_pwm02.txt file

/* Variable Brightness LEDs 2
*  Done with three of Arduino's Pulse Width Modulation (PWM)
*  pins (9,10,11)
*  This time we'll use a direction changing variable to
*  change whether the pwmVal's will go up or down in the Loop
*/

// Set three pin variables for the three PWM pins
int pwmPin1 = 11;
int pwmPin2 = 10;
int pwmPin3 = 9;
// Set a variable for the intial value for the PWM
int pwmVal1 = 0;
int pwmVal2 = 0;
int pwmVal3 = 0;
// Set a variable for the inital direction (increment or decrement) for the PWM
// A value of 1 will increment pwmVal's and a value of -1 will decrement pwmVal's.
int upDown1 = 1;
int upDown2 = 1;
int upDown3 = 1;

// Setup
// Set PWM's to OUTPUT
void setup() 
{
  pinMode(pwmPin1, OUTPUT);
  pinMode(pwmPin2, OUTPUT);
  pinMode(pwmPin3, OUTPUT);
}

//Loop
void loop() 
{
  // analogWrite's range runs from 0 to 255, so when any of 
  // our values reaches maximum, instead of reseting it to 0
  // we'll change the variable upDown to -1. This will cause
  // pwmVal's to get smaller instead of bigger.
  if(pwmVal1 >= 255) {
    upDown1 = -1;
  }
  // Conversely, when it reaches a minimum (0), set the upDown to 1.
  // This will cause pwmVal's to get bigger instead of smaller.
  if(pwmVal1 <= 0) {
    upDown1 = 1;
  }
  // Same process for all pwmVal's (pwmVal2, pwmVal3)
  if(pwmVal2 >= 255) {
    upDown2 = -1;
  }
  if(pwmVal2 <= 0) {
    upDown2 = 1;
  }
  if(pwmVal3 >= 255) {
    upDown3 = -1;
  }
  if(pwmVal3 <= 0) {
    upDown3 = 1;
  }
  // Now set the pwmPins...
  analogWrite(pwmPin1,pwmVal1);
  // ... and depending on whether upDown is 1 or -1, increment
  // or decrement pwmVal's 
  pwmVal1 = pwmVal1 + (1 * upDown1);
  analogWrite(pwmPin2,pwmVal2);
  pwmVal2 = pwmVal2 + (5 * upDown2);
  analogWrite(pwmPin3,pwmVal3);
  pwmVal3 = pwmVal3 + (10 * upDown3);
  // Delay a bit before looping
  delay(10);
}
				

Serial Debugging & Independent Loops with Arduino

BIG TEXT | SMALL TEXT

Download serial_debugging.txt file

New terms: Serial.begin(), Serial.print(), Serial.println();

// Serial_Debugging
// Using serial.println to debug your code
//
// Arduino can talk back to the computer with information
// about itself using serial communications. This can be really 
// handy for debugging your code by checking the value of certain
// variable while the Arduino is running.

// Set variables
int myVariable = 0;

// Setup
void setup()
{
  //"Serial.begin(somenumber)" tells the Arduino to start using serial 
  // communications. You have to tell it what "baud" rate to use.
  // "baud" (named after Emile Baudot, a pioneer in telecommuncations
  // from the 19th century) is the speed at which the data flows over 
  // pins 0 and 1 between the Arduino board and the Arduino application.
  // The baud rates must match each other to work. You set the baud rate
  // in the Arduino application by clicking on the Serial Monitor button
  // in the top menu in the application window and chosing the rate
  // from the popup menu in the lower left of this screen. 9600 is a 
  // mid-range speed and is pretty reliable.
  Serial.begin(9600);
}

// Loop
void loop()
{
  //"Serial.print" and "Serial.println" tells the Arduino board to send 
  // the value of whatever is in its parenthesis to the Arduino application. 
  //"Serial.println" is like "Serial.print" except it adds a "line" 
  // each time its called.
  Serial.print("The value of myVariable is: ");
  Serial.println(myVariable);
  myVariable = myVariable + 1;
}
				

BIG TEXT | SMALL TEXT

Download delay-free_timing01.txt file

New concept: Adding a Function, If/Then statement

// Delay-Free Timing 01
//
// The Arduino has a built in clock that gives out the number of 
// milliseconds the Arduino has been running since the last reset
// (it actually is a finite number, and resets to 0 after about
// 9 hours and 32 minutes). We can use this number, millis(), to
// check how long it has been since something has happened, like
// the last time an LED was turned on. This can eliminate the bottleneck
// caused by the delay() command.

// Set variables
// Set up three timers, each with a different offset to check against.
long timer1 = 0;           // Timers are measured in milliseconds, which quickly get quite large.
                           // We'll use "long" instead of "int" because int can only store a number 
                           // from -32,768 to 32,768, or + or - 2 to the 15th power, or 2 bytes.
                           // "long" extends the range to 4 bytes, or +/- 2,147,483,684
int  timer1offset = 1000;  // timer1offest will hold the length of time were using instead of a delay()                        
// Setup pins
int ledPin1 = 11;

void setup() {                  // The standard stuff...
    Serial.begin(9600);         // Setup the serial communications so we can debug
    pinMode(ledPin1, OUTPUT);  
    timer1 = millis();          // Setting the timer to the milliseconds since the board was reset
}


// Das Loop...
void loop() {
  // Timer 1
  if((timer1 + timer1offset) < millis() ) { // In other words, if timer1 plus an offset, say
                                            // 123 + 1000, is less than the current time, say 1300, 
                                            // then the timer is finished, so do something and reset
                                            // the timer to the current time
     doFlash();              // doFlash is a custom function we wrote ourselves, 
                             // as opposed to a built-in command.
     timer1 = millis();  
  }
}

// A new function!
void doFlash() {
  Serial.println(digitalRead(ledPin1)); 	// Output the status to the serial port
  digitalWrite(ledPin1, !digitalRead(ledPin1)); // This is a neat trick. "!" means "not"
	// in Arduino language. When we say
	// !digitalRead(ledPin1) we're saying
	// "make this statement the opposite
	// of what is says"
}
				

BIG TEXT | SMALL TEXT

Download delay-free_timing02.txt file

New concept: multiple independent timers

// Delay-Free Timing 02
//
// In this case, we will set up a bunch of independent timers

// Set variables
// Set up three timers, each with a different offset to check against.
long timer1 = 0;           
int  timer1offset = 1000;                         
long timer2 = 0;           
int  timer2offset = 900;                         
long timer3 = 0;           
int  timer3offset = 800;   
long timer4 = 0;           
int  timer4offset = 700;   
long timer5 = 0;           
int  timer5offset = 600;   
long timer6 = 0;           
int  timer6offset = 500;   

// Setup pins
int ledPin1 = 11;
int ledPin2 = 10;
int ledPin3 = 9;
int ledPin4 = 8;
int ledPin5 = 7;
int ledPin6 = 6;

void setup() {                  // The standard stuff...
  Serial.begin(9600);         // Setup the serial communications so we can debug
  // Save some vertical space by combining lines
  pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT);   
  pinMode(ledPin4, OUTPUT); pinMode(ledPin5, OUTPUT); pinMode(ledPin6, OUTPUT); 
  timer1 = millis(); timer2 = millis(); timer3 = millis();
  timer4 = millis(); timer5 = millis(); timer6 = millis();   
  // Start with all pins on
  digitalWrite(ledPin1,HIGH); digitalWrite(ledPin2,HIGH); digitalWrite(ledPin3,HIGH);
  digitalWrite(ledPin4,HIGH); digitalWrite(ledPin5,HIGH);  digitalWrite(ledPin6,HIGH); 
}

// Das Loop...
void loop() {
  if((timer1 + timer1offset) < millis() ) {   //Timer 1
     doLED1();              
     timer1 = millis();  
  }
  if((timer2 + timer2offset) < millis() ) {   //Timer 2
     doLED2();              
     timer2 = millis();  
  }
  if((timer3 + timer3offset) < millis() ) {   //Timer 3
     doLED3();              
     timer3 = millis();  
  }
  if((timer4 + timer4offset) < millis() ) {   //Timer 4
     doLED4();              
     timer4 = millis();  
  }
  if((timer5 + timer5offset) < millis() ) {   //Timer 5
     doLED5();              
     timer5 = millis();  
  }
  if((timer6 + timer6offset) < millis() ) {   //Timer 6
     doLED6();              
     timer6 = millis();  
  }
}

// The doLED functions
void doLED1() {
  Serial.print("LED 1: ");
  Serial.println(!digitalRead(ledPin1));
  digitalWrite(ledPin1,!digitalRead(ledPin1));
}
void doLED2() {
  Serial.print("LED 2: ");
  Serial.println(!digitalRead(ledPin2));
  digitalWrite(ledPin2,!digitalRead(ledPin2));
}
void doLED3() {
  Serial.print("LED 3: ");
  Serial.println(!digitalRead(ledPin3));
  digitalWrite(ledPin3,!digitalRead(ledPin3));
}
void doLED4() {
  Serial.print("LED 4: ");
  Serial.println(!digitalRead(ledPin4));
  digitalWrite(ledPin4,!digitalRead(ledPin4));
}
void doLED5() {
  Serial.print("LED 5: ");
  Serial.println(!digitalRead(ledPin5));
  digitalWrite(ledPin5,!digitalRead(ledPin5));
}
void doLED6() {
  Serial.print("LED 6: ");
  Serial.println(!digitalRead(ledPin6));
  digitalWrite(ledPin6,!digitalRead(ledPin6));
}

Reading Assignment

Ardunio Analog I/O

  • Read the links about Analog Input

More information on Arduino Programming

  • Download the Arduino Programming Notebook here