简体   繁体   中英

20x4 lcd with arduino and xbee

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM