2016-04-09 21 views
2

Ich versuche, einige Daten zu meinem 16 * 2 LCD-Modul anzuzeigen, aber es werden einige zufällige Zeichen angezeigt. Ich habe einen einfachen Code, mit dem ich mein LCD-Display getestet habe und es funktioniert perfekt. Code:Arduino 16 * 2 LCD zeigt zufällige Zeichen anstelle des erwarteten Textes

#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(); 
} 

Allerdings habe ich mehr Dinge auf das Steckbrett jetzt - die LCD, Micro-SD-Leser, Potentiometer und einen LM35 Temperatursensor und diesen meinen 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); 
} 

Ich erhalte Die Ergebnisse werden im seriellen Monitor angezeigt, aber das LCD zeigt zufällige Zeichen an, die verschlüsselten Text ähneln. Was habe ich falsch gemacht? Ich habe mehrere Beiträge auf dieser Website und anderen Websites angeschaut, aber sie sind nicht so nützlich:

This one made sense but not useful in my case.

This one too!.

And this one

Antwort

1

Wenn Sie einen Blick auf die Dokumentation von Serial nehmen, heißt es:

Alle Arduino-Boards haben mindestens eine serielle Schnittstelle (auch als UART oder USART bekannt): Serien. Es kommuniziert über die digitalen Pins 0 (RX) und 1 (TX) sowie über USB mit dem Computer. Wenn Sie diese Funktionen verwenden, können Sie daher auch nicht die Pins 0 und 1 für den digitalen Eingang oder Ausgang verwenden.

Daher sollten Sie Ihr Programm neu anordnen, so dass die LCD nicht Stift nicht verwendet 1.

+0

Und genau wie die Dinge geschehen. Danke vielmals! Geändert von Pin 1 zu Pin 3 sind die Änderungen: ////////// LCD // Initialisierung der Pins - RS, E, Rest der Daten Pins LiquidCrystal lcd (3, 2, 4, 5, 6 , 7); –

+0

Gern geschehen! –