Ongoing donations help keep the site running. Contribute to this website by clicking the Donate button. Many thanks to all who have donated.
Recent Donors:
Donations Received
X
Created on: 6 August 2012
This tutorial shows how to interface eight LEDs to an Arduino using only two Arduino pins. This is made possible by using a PCF8574 I/O expander IC. A "Knight Rider" display is shown on the LEDs.
Can't see the video? View on YouTube →
Complete tutorial 4 – Arduino Knight Rider. Be able to use DIP IC packages, e.g. from tutorial 17.
In addition to an Arduino Uno board, USB cable, wire links and a breadboard, you will need:
Qty | Part | Designator | Notes | Type |
---|---|---|---|---|
2 | 2k2 resistors (red - red - red) | R9, R10 | 1/4W 5% or better | Resistors |
8 | 470 ohm resistors (yellow - violet - brown) | R1 to R8 | ||
1 | 100n capacitor | C1 | Non-polorized capacitor | Capacitor |
1 | PCF8574P | U1 | 4047 IC e.g. CD4047 (14 pin IC) | Semiconductors |
8 | LEDs | D1 to D8 | LEDs – red or green 3mm or 5mm diffused LEDs |
In this circuit diagram, the Arduino board is not shown. Only the pin labels of the Arduino pins to be connected to the PCF8574 (U1) are shown. The points marked +5V are to be connected to the Arduino 5V pin. The inverted triangle (GND) is to be connected to one of the Arduino GND pins.
Arduino Two Wire Knight Rider Circuit - click the image for a bigger circuit
The photo below shows the complete circuit built on breadboard. Click the photo for a bigger image.
The suggested sequence of building the circuit is:
You may have noticed that the breadboard circuit swaps the position of the LEDs and resistors from the circuit diagram – e.g. R1 and D1 swap positions. This will make no difference to how the circuit operates. It has only been done to simplify the breadboard circuit.
Copy the two_wire_knight_rider sketch below and paste it into the Arduino IDE.
/*-------------------------------------------------------------- Program: two_wire_knigh_rider Description: Uses a PCF8574 IO Expander IC on the Arduino TWI bus to interface 8 LEDs. A "knight rider" display is shown on the LEDs. Date: 25 April 2012 Author: W.A. Smith, http://startingelectronics.org --------------------------------------------------------------*/ #include <Wire.h> // address of PCF8574 IC on TWI bus #define IO_ADDR (0x40 >> 1) void setup() { Wire.begin(); // initialize the I2C/TWI interface } void loop() { static unsigned char data = 0x01; // data to display on LEDs static unsigned char direc = 1; // direction of knight rider display // send the data to the LEDs Wire.beginTransmission(IO_ADDR); Wire.write(~data); Wire.endTransmission(); delay(70); // speed of display // shift the on LED in the specified direction if (direc) { data <<= 1; } else { data >>= 1; } // see if a direction change is needed if (data == 0x80) { direc = 0; } if (data == 0x01) { direc = 1; } }
The Knight rider display on the LEDs will start as soon as the sketch has been loaded to the Arduino.