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
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);
}
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);
}
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);
}
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);
}
}
/* 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);
}
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);
}
/* 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
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;
}
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"
}
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));
}
