简体   繁体   中英

Arduino 16*2 LCD displaying random characters instead of expected text

I'm trying to display some data to my 16*2 LCD module but there are some random characters being shown. I have some simple code that I used to test my LCD display and it works perfectly. Code:

#include<LiquidCrystal.h>


// initializing pins - RS, E, rest of data pins
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);

void setup() {
  lcd.begin(16, 2);
}

void loop() {
  lcd.print("Testing");   // thats the top row string
  delay(1800);

  lcd.setCursor(2, 1);   // move to the 2nd row, 1st col
  lcd.print("Display this!");
  delay(1800);
  lcd.clear();

  lcd.setCursor(7, 1);
  delay(400);
  lcd.blink();
  lcd.setCursor(6, 1);
  delay(400);
  lcd.setCursor(5, 1);
  delay(400);
  lcd.setCursor(4, 1);
  delay(400);
  lcd.setCursor(3, 1);
  delay(400);
  lcd.setCursor(2, 1);
  delay(400);
  lcd.setCursor(1, 1);
  delay(400);
  lcd.setCursor(0, 1);
  lcd.noBlink();
  lcd.print("Silly Isn't It?");

  lcd.cursor();
  delay(1800);
  lcd.noCursor();

  lcd.clear();
}

However, I have more things on the breadboard now - the LCD, micro SD reader, potentiometer and an LM35 temperature sensor and this my code:

#include<LiquidCrystal.h>
#include <SD.h>
#include <SPI.h>

////////// LCD
//initializing pins - RS, E, rest of data pins
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);


const int CS_PIN = 10;
const int POW_PIN = 8;
int refreshRate = 2000;       // for reading vals

////////// LEDs
int ledPinR = 11;
int ledPinG = 12;
int ledPinY = 13;

////////// LM35
float temp;
int tempPin = A0;

void setup() {

  ////////// LED
  pinMode(ledPinR, OUTPUT);
  pinMode(ledPinG, OUTPUT);
  pinMode(ledPinY, OUTPUT);

  ////////// LCD
  lcd.begin(16, 2);
  lcd.print("please wait...");   //thats the top row string
  delay(2000);
  lcd.clear();
  lcd.blink();


  ////////// SD
  Serial.begin(9600);
  Serial.println("\nNow Initializing SD card...");
  pinMode(CS_PIN, OUTPUT);
  pinMode(POW_PIN, OUTPUT);
  digitalWrite(POW_PIN, HIGH);

  if(!SD.begin(CS_PIN)){
    Serial.println("\nSomething went wrong. Probably card failure, card format, or something else.");
    return;
  }

  Serial.println("\nCard ready!");
  File commandFile =  SD.open("tempLevels.txt");

  if(commandFile){
    Serial.println("\nNow Reading Command File...");

    while(commandFile.available())
    {
      refreshRate = commandFile.parseInt();
    }

    Serial.print("\nTapiwa, the refresh rate is: ");
    Serial.print(refreshRate);
    Serial.print(" ms");

    commandFile.close();
  }

  else{
    Serial.println("Oops! Failing to read command file!");
    return;
  }
}

void loop() {

  ////////// LM35
  temp = analogRead(tempPin);
  float mV = (temp / 1024.0) * 5000;
  float tempVal = mV / 10;

  Serial.println("\nTemperature is: ");
  Serial.println(tempVal);  

  File dataFile =  SD.open("log.csv", FILE_WRITE);          // dont know about that .csv format

  if(dataFile)
  {
    dataFile.print("\nTemperature is: ");
    dataFile.print(tempVal);
    dataFile.println("Deg");
    dataFile.close();

    Serial.println("\nSaved in DataFile >> Temperature is: ");
    Serial.print(tempVal);
  }

  else
  {
    Serial.println("DataFile error! Reading not saved");
    Serial.println("Could not open log file! Not on SD card!");
  }

  lcd.print("Temp: ");
  lcd.setCursor(2, 1);   // 2nd row, 1st col
  lcd.print(tempVal);
  delay(2000);

  lcd.clear();
  delay(refreshRate);
}

I'm getting the results in the serial monitor but the LCD displays random characters which resemble encrypted text. Where did I go wrong? I've looked at at multiple posts on this site and other sites but they are not that useful:

This one made sense but not useful in my case .

This one too! .

And this one

If you take a look at the documentation of Serial , it says:

All Arduino boards have at least one serial port (also known as a UART or USART): Serial. It communicates on digital pins 0 (RX) and 1 (TX) as well as with the computer via USB. Thus, if you use these functions, you cannot also use pins 0 and 1 for digital input or output .

Thus, you should rearrange your scheme so that the LCD doesn't use pin 1.

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