Xbee data not displaying properly on 20x4 i2c lcd

Hi,

I am using a Arduino mega attached to a 20x4 i2c lcd and xbee. Another Xbee is attached to a 7’’ inch screen. Different images are displayed on the screen of the 7’’ lcd and the name of the image is sent to xbee when it is touched.

The data is being transferred correctly between the Xbee modules as checked on a serial. However, when i try to display it on the 20x4 i2c lcd, it does not properly show.

e.g if xbee is showing “drinks”, the lcd shows “█ks” or sometimes “█in”.

The code im using for the 20x4 lcd is

/*****************************************************************
XBee_Serial_Passthrough.ino

Set up a software serial port to pass data between an XBee Shield
and the serial monitor.

Hardware Hookup:
  The XBee Shield makes all of the connections you'll need
  between Arduino and XBee. If you have the shield make
  sure the SWITCH IS IN THE "DLINE" POSITION. That will connect
  the XBee's DOUT and DIN pins to Arduino pins 2 and 3.

*****************************************************************/
// We'll use SoftwareSerial to communicate with the XBee:
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LCD03.h>
 LCD03 lcd;
// XBee's DOUT (TX) is connected to pin 2 (Arduino's Software RX)
// XBee's DIN (RX) is connected to pin 3 (Arduino's Software TX)
SoftwareSerial XBee(10, 11); // RX, TX

void setup()
{
  // Set up both ports at 9600 baud. This value is most important
  // for the XBee. Make sure the baud rate matches the config
  // setting of your XBee.
  XBee.begin(9600);
  Serial.begin(9600);
    // Initialise a 20x4 LCD
  lcd.begin(20, 4);
 
  // Turn on the backlight
  lcd.backlight();
  
  // Write to the LCD
  lcd.print("Hello world");
 
  // Wait for 5 seconds
  delay(5000);
 
  // Clear the LCD
  lcd.clear();
}

void loop()
{
  if (Serial.available())
  { // If data comes in from serial monitor, send it out to XBee
    XBee.write(Serial.read());
  }
  if (XBee.available())
  { // If data comes in from XBee, send it out to serial monitor
    Serial.write(XBee.read());
   lcd.write(XBee.read());
  
  }
}

The data is being transferred correctly between the Xbee modules as checked on a serial.

Then the problem is NOT with the XBees or the data. The problem is how you display the data on the LCD. Quit blaming the XBees.

The print() methods are for dealing with ASCII data. The write() methods are for dealing with binary data. The LCD doesn't know a thing about dealing with binary data.

The read() method returns an int. The write() method expects a byte. Why are you passing a multi-byte variable to a function that expects a single byte?

Since write() method does not work how can i show different words as i want to show around 10 different words on the lcd.

shayaan123:
Since write() method does not work how can i show different words as i want to show around 10 different words on the lcd.

I answered that.