The Start


Hi, What and Why

Plug it in

Rule number 1

Water Sensor

Sound Sensor

Joystick

Tri Colour LED

RTC (Real Time Clock) DS1302

RTC (Real Time Clock) DS3231

Matrix LED step 1

LCD

Stepper Motor

LCD revisited with PCF8574T

Humidity Sensor

Shift Register

RFID tags (RC-522)

7 Segment display

Ultrasonic distance sensor

5V regulator

analogRead and analogWrite

Wiring an Array of Switches

The next step


Other things I have bought

Infra red and Processing

Programming a separate arduino chip

Creating your own PCB

L293D for a DC motor

4 digit 7 segment display

Starting with motors

RF433 Wireless Comms

Sort a character array

More stuff


I2C devices (SDA,SCL)

I2C scanner

SPI devices (MOSI,MISO)

HMC5883L Compass

MMA7361 Accelerometer

Added projects


Message Display System

4WD robot car
4WD robot car II

4WD robot car COMPLETE

MP3 Player

LCD Controller PCF8574T

All it needs is a snappier name...

Displaying debug information is essential during project development. During my robot car project, it was not always practical to have the USB serial connection available.
The LCD screen is a good option, but wiring up many pins can be a real pain.

Enter the PCF8574T. I found it almost by accident (EBay UK) - and it's wonderful.
Download the library; connect 2 wires and power, and it's sorted.

PCF8574T lcd controller - 2 wires to the arduino, and you're good to go. PCF8574T lcd controller

Aside from the obvious power connections, the arduino UNO has SCL on pin A5 and SDA on pin A4.
The controller attaches neatly to the lcd screen, as below.

Connect the PCF8574T to the lcd controller like this ... PCF8574T lcd controller

The example sketch - ...

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.init();                      // initialize the lcd 

  // Print a message to the LCD.
  lcd.backlight();
  lcd.print("Test Display I2C");
  lcd.setCursor(0,1);
  lcd.print("Version 1.0");

}

void loop()
{
}
   		

During testing, I found that my Arduino UNO had SCL and SDA pin headers also on the 2 unlabelled headers next to the AREF pin, like this :

The SCL and SDA pins headers are also on the 2 pins next to the AREF pin. PCF8574T lcd controller

The easiest way to find the i2c address is the commonly used i2c scanner, listed here for completeness.

// i2c_scanner
 //
 // This program (or code that looks like it)
 // can be found in many places.
 // For example on the Arduino.cc forum.
 // The original author is not know.
 //
 // This sketch tests the standard 7-bit addresses
 // from 0 to 127. Devices with higher bit address
 // might not be seen properly.
 //
 // Adapted to be as simple as possible by Arduino.cc user Krodal
 //
 // June 2012
 // Using Arduino 1.0.1
 //

#include <Wire.h>

void setup()
 {
   Wire.begin();

  Serial.begin(115200);
   Serial.println("\nI2C Scanner");
 }

void loop()
 {
   byte error, address;
   int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
   for(address = 0; address <= 127; address++ )
  {
     // The i2c_scanner uses the return value of
     // the Write.endTransmisstion to see if
     // a device did acknowledge to the address.
     Wire.beginTransmission(address);
     error = Wire.endTransmission();

    if (error == 0)
     {
       Serial.print("I2C device found at address 0x");
       if (address<16)
        Serial.print("0");
       Serial.print(address,HEX);
       Serial.println(" !");

      nDevices++;
     }
     else if (error==4)
    {
       Serial.print("Unknow error at address 0x");
       if (address<16)
        Serial.print("0");
       Serial.println(address,HEX);
     }
   }
   if (nDevices == 0)
     Serial.println("No I2C devices found\n");
   else
     Serial.println("done\n");

  delay(8000);           // wait 8 seconds for next scan
 }