0
votes

im using an arduino mega attached to a 20x4 lcd and xbee. LCD is a i2c interface. Im using the following the code to write the data received by the xbee on the LCD.

/*****************************************************************
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());

  }
}

However, it shows black boxes on the LCD instead of words. If i use lcd.print("test"); it shows 'text' which means that the LCD is receiving the data sent from xbee but i cannot use lcd.print as the data received is random. Moreover, how can i clear the screen after every word as all the words come in a single line.

1
And what texts are you sending to the Arduino? How are you sending it? Have you checked the data you send over the serial port?Some programmer dude
Another xbee module is connected to a 7'' lcd and arduino mega. Images are displayed on the lcd and the name of the image is sent to xbee e.g (drinks) is displayed on the serial of xbee attached to the 20x4 lcd. The data is coming on the serial but the text is not coming properly on the 20x4 lcd . The words are breaking e.g █ks for drinks.shayaan123

1 Answers

0
votes

There are two reasons why i think this problem is occurring :-

  1. Probably the data is getting corrupted while getting transmitted, so might have to implement some error check method (eg: checksum), and request again for data if that is the case.
  2. You have to check what is the format of data that is being transmitted from your transmitter module. I mean LCD expects the data to be in ASCII format, is that the same format received from xbee.

Basically you have to check your data at multiple points and find out where exactly the problem occurs. Since you are saying that writing

 lcd.print("test");

does work properly hence i believe the I2C is set correctly, so above mentioned problems are the only things i can think of.

Approach:- Why don't you display the serial data received xbee on serial monitor of arduino and check if the data received is correct or not.