Benötige Hilfe bei anzeigen des Tasterstatus auf einem i2C LCD Display 16x2

Ich habe mehrere Platinen mit 6 Taster und einem IR-Sensor bekommen. Diese möchte ich für eventuell spätere Projekte nutzen. Das ganz habe ich mit einem Arduion Uno verbunden (erst mal nur die Taster). Taster 1, 2, und 4 an A0 und Taster 3, 5 und 6 an A2.
Beim auslesen der Werte über den Seriellen Monitor haben die Taster folgende Werte
Taster1 564
Taster2 680
Taster3 768
Taster4 1002
Taster5 877
Taster6 543..
Jetzt versuche ich den Tasterstatus auf einem I2C LCD 16x2 anzuzeigen.
Mein Sketch läuft, aber nicht richtig. Die Anzeige des LCD bringt nicht die volle Helligkeit und sie flimmert.
Kann mir jemand hefen?

//von riesadiver1
// funktioniert nicht richtig,


#define ANALOG_PIN2 A2
#define ANALOG_PIN0 A0
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2);
//in “20, 4” ändern wenn 20x04 benutzt wird
bool button1;
bool button2;
bool button3;
bool button4;
bool button5;
bool button6;

void setup() {
  // Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  pinMode(ANALOG_PIN0, INPUT);
  pinMode(ANALOG_PIN2, INPUT);
}

void loop() {

  if (analogRead(ANALOG_PIN0) > 560 && analogRead(ANALOG_PIN0) < 570) {
    button1 = true;
    lcd.setCursor(0, 0);
    lcd.print("Button 1");
    delay(100);
    lcd.setCursor(0, 1);
    lcd.print("gedrueckt");
    delay(100);
    //Serial.println(analogRead(ANALOG_PIN0));
  } else {
    (button1 = false);
  }
  if (analogRead(ANALOG_PIN0) > 670 && analogRead(ANALOG_PIN0) < 690) {
    button2 = true;
    lcd.setCursor(0, 0);
    lcd.print("Button 2");
    delay(100);
    lcd.setCursor(0, 1);
    lcd.print("gedrueckt");
    delay(100);
    //Serial.println(analogRead(ANALOG_PIN0));
  } else {
    (button2 = false);
  }
  if (analogRead(ANALOG_PIN2) > 760 && analogRead(ANALOG_PIN2) < 785) {
    button3 = true;
    lcd.setCursor(0, 0);
    lcd.print("Button 3");
    delay(100);
    lcd.setCursor(0, 1);
    lcd.print("gedrueckt");
    delay(100);
    //Serial.println(analogRead(ANALOG_PIN2));
  } else {
    (button3 = false);
  }
  if (analogRead(ANALOG_PIN0) > 990 && analogRead(ANALOG_PIN0) < 1010) {
    button4 = true;
    lcd.setCursor(0, 0);
    lcd.print("Button 4");
    delay(100);
    lcd.setCursor(0, 1);
    lcd.print("gedrueckt");
    delay(100);
    //Serial.println(analogRead(ANALOG_PIN0));
  } else {
    (button4 = false);
  }
  if (analogRead(ANALOG_PIN2) > 870 && analogRead(ANALOG_PIN2) < 885) {
    button5 = true;
    lcd.setCursor(0, 0);
    lcd.print("Button 5");
    delay(100);
    lcd.setCursor(0, 1);
    lcd.print("gedrueckt");
    delay(100);
    //Serial.println(analogRead(ANALOG_PIN2));
  } else {
    (button5 = false);
  }
  if (analogRead(ANALOG_PIN2) > 535 && analogRead(ANALOG_PIN2) < 550) {
    button6 = true;
    lcd.setCursor(0, 0);
    lcd.print("Button 6");
    delay(100);
    lcd.setCursor(0, 1);
    lcd.print("gedrueckt");
    delay(100);
    //Serial.println(analogRead(ANALOG_PIN2));
  } else {
    (button6 = false);
  }
  if ((button1 && button2 && button3 && button4 && button5 && button6) == false) {
    lcd.clear();
  }
}

Deshalb flimmert dein Display, alten wert nur mit

lcd.print("   ");

Überschreiben, die länge muss so lang sein wie dein Text

Du solltest die Analogeingänge am Anfang der loop() funktion in Variablen einlesen und diese variablen zu kontrolle der Grenzwerte verwenden. Dauerndes Einlesen kann zu inkonsistenten Werten führen weil zB zwischen den beiden Konrollen ein Taster gedrückt wurde.
Grüße Uwe

Danke für eure Tips. Wenn ich diese Woche Zeit finde, werd' ich mich wieder reinknien.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.