Starting Electronics needs your help! Please make a donation to help cover our hosting and other costs. Click the donate button to send a donation of any amount.

Arduino Tri-colour LED Flasher Circuit

Created on: 8 May 2013

This simple tri-colour LED flasher circuit is great for beginners. The three pin tri-colour LED is controller by an Arduino Uno and changed between three colours.

This video shows the Arduino running a sketch that controls the tri-colour LED.

Can't see the video? View on YouTube →

Circuit Diagram for the Arduino Tri-colour LED Controller

The circuit is very simple, using only three components. The tri-colour LED is a three pin common cathode type containing a red and green LED.

The tri-colour LED is the same LED used in the tri-colour LED transistor flasher circuit – refer to this project for more details on the LED.

Arduino tri-colour LED flasher circuit.
Arduino Tri-Colour LED Flasher Circuit

Books that may interest you:

C Programming with Arduino Book Ultimate Arduino MEGA 2560 Hardware Manual Ultimage Arduino Uno Hardware Manual

Arduino Sketch

The sketch changes the colour of the LED every second. Colours are changed by switching on the red LED in the tri-colour LED package, then the green LED, orange is obtained by switching on both the red and green LEDs at the same time.

/*--------------------------------------------------------------
  Program:      tri_colour_LED

  Description:  Changes the colours of a tri-color LED.
  
  Hardware:     Arduino Uno and tri-colour LED.
                
  Software:     Developed using Arduino 1.0.3 software
                Should be compatible with Arduino 1.0 +

  Date:         8 May 2013
 
  Author:       W.A. Smith, http://startingelectronics.org
--------------------------------------------------------------*/

void setup()
{
    pinMode(2, OUTPUT);
    pinMode(3, OUTPUT);
}

void loop()
{
    digitalWrite(2, HIGH);
    digitalWrite(3, LOW);
    delay(1000);
    digitalWrite(2, LOW);
    digitalWrite(3, HIGH);
    delay(1000);
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    delay(1000);
}