LCD Hintergrundbeleuchtung per Taste ein aus schalten

Erst mal hallo in die Runde.

Ich habe folgendes Problemchen ich möchte gerne die Hintergrundbeleuchtung eines LCD Displays (2004) von AZ-Delivery 16 x 2 LCD I²C Display Bundles
per Taster ein auschalten.

Mein Gedanke:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LCD.h>

#define I2C_ADDR    0x27
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin,BACKLIGHT_PIN,POSITIVE);

// constants won't change. They're used here to set pin numbers:
const int buttonPin = 12;     // the number of the pushbutton pin
// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode ( BACKLIGHT_PIN, OUTPUT );
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(BACKLIGHT_PIN, HIGH);
  } else {
    // turn LED off:
    digitalWrite(BACKLIGHT_PIN, LOW);
  }
}

Der effekt leider gleich Null Schaltet nix. Rein Theoretisch solte doch jetzt die LCD LED ein und aus gehen oder Denkfehler ?

Ich verstehe leider auch nicht ganz die Dokumentation vom Hersteller PIN 3 Soll die LED fürs Display sein schau ich in die Bibliothek des I2C dann steht da eine Hex Adresse für die LED wie versteht man das ?

Danke für eure Hilfe

Wie wäre es, wenn du einen Link zum Display postest? Bei AZ-Delivery finde ich kein Display mit der 2004er Bezeichnung in der Größe und somit auch keine Dokumentation/Datenblatt/Schaltplan.

Es gibt viele I2C-Backplanes und genau so viele verschiedene LiquidCrystal_I2C.h.

Gib uns bitte einen Link zu der von Dir verwendeten Lib.
Der Pin 3 bezieht sich auf den Anschluss des LCD an die I2C-Backplane, nicht auf den Pin vom Arduino.

Die LCD-Lib hat meist sowas:

lcd.backlight();

lcd.noBacklight();

Gruß Tommy

Upps sorry

hier der Link

Die Bibliothek hab ich diese genommen

https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);
void setup()
{
lcd.begin(20, 4);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(">AZ-Delivery.de<");
lcd.setCursor(0,1);
lcd.print(">20x4 & FC-113!<");
}
void loop()
{
lcd.setBacklight(HIGH);
delay(1000);
lcd.setBacklight(LOW);
delay(1000);
}

bei dem Probe Sketch gehts mit licht an aus nur leider erschliesst sich mir nicht wie ich das mit einem Taster mache weil lcd.setBacklight(LOW); als write geht nicht

Tommy56:
Es gibt viele I2C-Backplanes und genau so viele verschiedene LiquidCrystal_I2C.h.

Gib uns bitte einen Link zu der von Dir verwendeten Lib.
Der Pin 3 bezieht sich auf den Anschluss des LCD an die I2C-Backplane, nicht auf den Pin vom Arduino.

Die LCD-Lib hat meist sowas:

lcd.backlight();

lcd.noBacklight();




Gruß Tommy

Kannst du mir das mit dem PIN mal bitte näher erläutern komme gerade nicht ganz mit, ich hab doch eigenlich nur Vcc GND SDA SCL womit ist dann PIN 3 gemeint der der direkt am LCD Display liegt ? wenn ja wie soll ich den nenn ansprechen über die I2C Platine auf dieser ist noch eine Brücke wenn man die öffnet geht das Display aus hisse ja eventuell mit Transitor über den Arduino dann durchschalten.

Bei Deiner Lib heißt die Funktion:

setBacklight ( uint8_t value );

Wobei value LOW oder HIGH sein kann.

In dieser Zeile gibst Du an, wie Dein Backpack-I2C-Modul mit dem Display verbunden ist.
Für genauere Infos lies die

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);

Die beiden letzten Werte 3, POSITIVE geben die Backlight-Steuerung an: Pin 3, Positive Polarität.
Du hast die Steuerung doch im Beispiel schon drin.

Wie Du einen Taster abfragst und entprellst, ist in den Beispielen der IDE beschrieben.
Wenn Du mit einem Taster aus- und wieder einschalten willst, musst Du Dir den aktuellen Zustand in einer (globalen) Variablen merken.

Gruß Tommy

leider erschliesst sich mir nicht wie ich das mit einem Taster mache

In deinem ersten Post schaltest du die Beleuchtung immerhin ein solange der Taster gedrückt ist.
Das könntest du zumindest auf deine Library anpassen.

Die eigentliche Aufgabe ist aber, dass du nur einen der beiden Wechsel im Taster-Zustand, und dann noch entprellt, hernimmst um den Zustand der Beleuchtung umzudrehen und die entsprechende Library-Funktion aufzurufen.

@Tommy
Eine static-Variable reicht dafür - ok, braucht den gleichen Platz, wie eine Globale - also wieder Nichts gespart - nur man 'sieht Sie halt nicht überall'.

MfG

Leider nein sie ist dauerhaft an. So hatte ich mir das vorgestellt, Taster drücken an Taster los aus.
Mir fehlt die Idee wie ich das schreibe bei einer LED gebe ich ja den PINmode an und kann den auf High oder Low geben. geht aber irgendwie nicht mit dem LCD.
Und wie passe ich das mit der Bibliothek an ?

Hi

Du nimmst eine beliebige LCD-Library, Die Dir die Möglichkeit bietet, das Backlight zu schalten.
Je nach Zustand (AN/AUS, merken) prüfst Du, ob der Taster 'anders herum' betätigt ist - wenn JA, dann schaltest Du das Backlight eben AUS/AN und merkst Dir wieder, wie das Backlight nun ist.
Dabei ist's egal, ob der Taster prellt - das AN/AUS-Schalten geschieht dann eben mit dem Prellen auch ... davon stirbt Keiner.

MfG

postmaster-ino:
@Tommy
Eine static-Variable reicht dafür - ok, braucht den gleichen Platz, wie eine Globale - also wieder Nichts gespart - nur man 'sieht Sie halt nicht überall'.

Da hast Du durchaus recht. Da es mir aber so vorkam, dass der TO schon mit einer globalen Variable überfordert ist, wollte ich da nicht noch static oben auf packen.

Gruß Tommy

senseman:
Leider nein sie ist dauerhaft an. So hatte ich mir das vorgestellt, Taster drücken an Taster los aus.
Mir fehlt die Idee wie ich das schreibe bei einer LED gebe ich ja den PINmode an und kann den auf High oder Low geben. geht aber irgendwie nicht mit dem LCD.
Und wie passe ich das mit der Bibliothek an ?

Das mit PinMode macht ja die Library für dich. Also einfacher geht es wirklich nicht.
Du musst nur deinen Tasterzustand zwischenspeichern und den Wert an die entsprechende Anweisung für die Displaybeleuchtung weitergeben.

Wenn mans weist ist es einfach ;) Wenn ich es denn dann wüste, würde ich nicht fragen ganz einfach. Nun ja wenigstens hab ich jetzt mal das Tasten Drücken raus. Nur leider schaltet das LCD bei gedrückter Taste ab. Umgekehr wäre mir lieber einer zufällig ne Idee wo der Fehler liegt ?

#include <OneButton.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7); // 0x3f is the I2C bus address - always check this before starting a project


// constants won't change. They're used here to set pin numbers:
const int buttonPin = 9;     // the number of the pushbutton pin
const int Backlight =  3;      // the number of the LED pin

OneButton button(buttonPin, false);

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status
bool backlight = false; 

void setup() {
  lcd.setBacklightPin(3,POSITIVE);
  
  lcd.begin(20, 4);
  lcd.clear();
  lcd.setBacklight(LOW); // NOTE: You can turn the backlight off by setting it to LOW instead of HIGH
 
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
   lcd.setBacklight(HIGH);
  } else {
    // turn LED off:
    lcd.setBacklight(LOW);
}
}

Umstellen der Werte HIGH und LOW sowie False war ohne Erfolg auch setbacklight (LOW) im Void setup war nicht was ich will

Dann muss es heißen

If (buttonState == LOW)

Edit:

Sorry....war eben im falschen Zug. :wink:

Sollte so sein:

  if (buttonState == HIGH) {
    // turn LED on:
   lcd.setBacklight(LOW);
  } else {
    // turn LED off:
    lcd.setBacklight(HIGH);
}

Leider nein
Das hatte ich bereits versucht die Zustände zu tauschen.

senseman:
Leider nein
Das hatte ich bereits versucht die Zustände zu tauschen.

Dann ist noch was anderes faul, was wir hier nicht sehen.

Die gezeigte Änderung dreht die Funktion um, somit sollte es funktionieren.

Was genau macht denn die Schaltung nach dieser Änderung ?

Sagen wir es mal so.
bei meinem Code habe ich ungedrückt eine Helöligkeit von 100% bei gedrückter Taste 0%. Bei der genannten Änderung ungedrückt 100% gedrückt 60-70% Helligkeit. es schaltet also nicht mehr komplett die Beleuchtung ab.
Hab leider keinen PLan wie ich hier Bilder hochlade bzw. wohin und dann verlinken.
Dann wäre noch interessant woher weis die IDE in welchem Verzeichnis die Bibliotheken liegen vielleicht hab ich da ein Problem

Das steht alle in "How to use this forum - please read".

Das mit den Bildern ist hier erklärt.

Hänge doch einfach mal serielle Ausgaben zu Deinem Buttonstate in den Sketch, damit Du siehst, was passiert.

Gruß Tommy

Hi

Und wenn Du Die uns zeigen willst, bitte nicht als Bild :wink:

MfG