LCD Keypad Shield Ansteuerung nicht möglich

Hallo,

ich habe mir ein LCD Keypad Shield besorgt, dass leider keinerlei Herstellerangaben aufweißt... nun versuche ich vergeblich es anzusteuern.

Ich vermute, aufgrund eines Blickes auf die Rückseite:

dass LiquidCrystal lcd(8, 9, 4, 5, 6, 7); in etwa richtig sein könnte. Habe auch schon die 9 durch 8-13 ersetzt (da ich da keine Leiterbahn erkennen konnte)

Jemand ideen/tipps ? Nach anschalten und auch nach hochladen des codes sieht das display immer so aus:

Das wird doch sicher den Standard Hitachi HD44780 Controller haben. Da gehen dann alle Standard Libs und mit den Tastern musst du halt mal schauen auf welchen Pins die liegen. Multimeter hilft da.

Mit diesem Code versuche ich aktuell mit ide1.04 mein glück

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("langer TEST");
}

void loop() {}

Du musst das Display auch mit init() initialisieren und im sagen, dass der z.B. 2x16 Zeichen im 4 Bit Modus machen soll. Oder ist das bei dir nur begin().

?? Das kommt aber in keinem der Beispiele auf Arduino.cc noch in iwelchen von dfrobots/sainsmart oder anderen forenbeiträgen vor
Denke eigtl auch dass die sache mit lcd() und begin() getan ist.

Sorry, bei dir ist das dann begin(). Hatte ich übersehen. Ich habe ein I2C Display, da sind die Methoden etwas anders :s

Sollte eigentlich funktionieren, da 4-Bit der Standardmodus ist.

Was aber ist, dass du eigentlich nicht clear() machen kannst vor begin(). Die Initialisierung ist aufwändig und dauert etwas. Davor kann man keine anderen Kommandos senden.

Dürfte ja das gleiche Board wie das Sainsmart sein. Bei dem hats bei mir mit dem folgenden Code funktioniert.

//Sample using LiquidCrystal library
#include <LiquidCrystal.h>
 
/*******************************************************
 
This program will test the LCD panel and the buttons
Mark Bramwell, July 2010
 
********************************************************/
 
// select the pins used on the LCD panel
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int multiplikator = 1;
boolean waspressed = false;
int count = 0;
 
// define some values used by the panel and buttons
int lcd_key     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5
 
// read the buttons
int read_LCD_buttons()
{
 adc_key_in = analogRead(0);      // read the value from the sensor 
 // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
 // we add approx 50 to those values and check to see if we are close
 if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
 if (adc_key_in < 50)   return btnRIGHT;  
 if (adc_key_in < 195)  return btnUP; 
 if (adc_key_in < 380)  return btnDOWN; 
 if (adc_key_in < 555)  return btnLEFT; 
 if (adc_key_in < 790)  return btnSELECT;   
 return btnNONE;  // when all others fail, return this...
}
 
void setup()
{
 lcd.begin(16, 2);              // start the library
 lcd.setCursor(0,0);
 lcd.print("Vince ist doof!"); // print a simple message
}

void loop()
{  
 lcd.setCursor(9,1);            // move cursor to second line "1" and 9 spaces over
 //lcd.print(millis()/1000);      // display seconds elapsed since power-up
 lcd.print(count);
 
 lcd.setCursor(13,1);
 lcd.print(multiplikator);
 
 
 lcd.setCursor(0,1);            // move to the begining of the second line
 lcd_key = read_LCD_buttons();  // read the buttons
 
 switch (lcd_key)               // depending on which button was pushed, we perform an action
 {
   case btnRIGHT:
     {
     lcd.print("RIGHT ");
     break;
     }
   case btnLEFT:
     {
     lcd.print("LEFT   ");
     break;
     }
   case btnUP:
     {
     lcd.print("UP    ");
     if(!waspressed) {
       multiplikator++;
       waspressed = true;
     }
     break;
     }
   case btnDOWN:
     {
     lcd.print("DOWN  ");
     if(!waspressed) {
       if (multiplikator > 0) {
         multiplikator--;
       }
       waspressed = true;
     }
     break;
     }
   case btnSELECT:
     {
     lcd.print("SELECT");
     break;
     }
     case btnNONE:
     {
     lcd.print("NONE  ");
     waspressed = false;
     break;
     }
 }
 count++;
}

@Worldleader: Dieser Code dürfte leider nicht helfen, da du die selbe Library und Pin Kofiguration wie ich verwendest, mit welcher es ja nicht geht.. Habe es natürlich eben getestet - nichts :frowning:

Nachdem es eigentlich funktionieren müsste mit dem Pinup (da ich ja auch jedes andere ausprobiert habe..) hab ich es einfach mal noch mit etwas mehr gewalt auf den Arduino gesteckt... und siehe da.

Es funktioniert. Vielen Dank für Deinen Code, denke werde Ihn als Grundlage nehmen :slight_smile:

//EDIT nochmal hervorgehoben

Die Buttonwerte stimmen bei mir so leider garnicht überein.. hab auch gerade kein Multimeter da. Kann ich mir nicht einfach adc_key_in anschauen?

Klar:
In der 2. Zeile von loop
anstelle von

//lcd.print(millis()/1000); 
lcd.print(count);

einfach

lcd.print(adc_key_in);

Könntest du mal ie Codezeile adc_key_in = analogRead(0); gegen adc_key_in = analogRead(A0); tauschen?

[edit] Laut Sprachreferenz sollte 0 aber funktionieren...

muhkuharduino:
Mit diesem Code versuche ich aktuell mit ide1.04 mein glück

Der Code ist für ein LCD-Keypad-Shield vollkommen korrekt.

Bitte kontrolliere, wie Du das Shield aufgesteckt hast und achte insbesondere darauf, dass nicht einzelne Beinchen z.B. nach innen weggeknickt sind.