Project 1 - Interfacing a 16*2 LCD with Arduino using I2C protocol
Overview of the Project:
In this project implementing the Code for “Interfacing a 16*2 LCD with two Arduino’s (one for Master and one for Slave) using Inter-Integrated Circuit (I2C) communication protocol” by sending the message to LCD using I2C communication protocol and display the message on LCD screen.
I2C COMMUNICATION
I2C combines the best features of SPI and UARTs. With I2C, you can connect multiple slaves to a single master (like SPI) and you can have multiple masters controlling single, or multiple slaves. This is really useful when you want to have more than one microcontroller logging data to a single memory card or displaying text to a single LCD.
Like UART communication, I2C only uses two wires to transmit data between devices:


SLAVE CODE
//I2C SLAVE CODE
//I2C Communication between2 Arduinos
#include<Wire.h>
#include<LiquidCrystal.h>
LiquidCrystal lcd(2,7,8,9,10,11);
byte SlaveReceived=0;
void setup()
{
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("skill_lync");
lcd.setCursor(0,1);
lcd.print("I2C 2 ARDUINO");
delay(5000);
lcd.clear();
Serial.begin(9600);
Wire.begin(8);
Wire.onReceive(receiveEvent);
Wire.onRequest(requestEvent);
}
void loop(void)
{
lcd.setCursor(0,0);
lcd.print(">> the Slave <<");
lcd.setCursor(0,1);
lcd.print("MasterVal:");
lcd.print(SlaveReceived);
Serial.println("Slave Received From Master:");
Serial.println(SlaveReceived);
delay(500);
lcd.clear();
}
void receiveEvent (int howMany)
{
SlaveReceived=Wire.read();
}
void requestEvent()
{
int potvalue=analogRead(A0);
byte SlaveSend= map(potvalue,0,1023,0,127);
Wire.write(SlaveSend);
}
MASTERCODE
//I2C MASTERCODE
//I2C communication between 2 arduinos
#include<Wire.h>
#include<LiquidCrystal.h>
LiquidCrystal lcd(2,7,8,9,10,11);
void setup()
{
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("skill_lync");
lcd.setCursor(0,1);
lcd.print("I2C ARDUINO 2 ARDUINO");
for(int i=0;i<16;i++)
{
lcd.scrollDisplayLeft();
delay(100);
}
delay(2000);
lcd.clear();
Serial.begin(9600);
Wire.begin();
}
void loop()
{
Wire.requestFrom(8,1);
byte MasterReceive=Wire.read();
int potvalue= analogRead(A0);
byte MasterSend=map(potvalue,0,1023,0,127);
Wire.beginTransmission(8);
Wire.write(MasterSend);
Wire.endTransmission();
lcd.setCursor(0,0);
lcd.print(">> the Master <<");
lcd.setCursor(0,1);
lcd.print("SlaveVal:");
lcd.print(MasterReceive);
Serial.println("Msster Received From Slave");
Serial.println(MasterReceive);
delay(500);
}
