LiquidCrystal_I2C

Hallo,
Ich habe seit dem Update auf die neuste Arduino Version ein problem mit meiner Libary und einer meiner Programmierungen. Da ich wusste, dass alle libarys gelöscht werden, habe ich alle Ordner auf einen Stick gezogen und später wieder eingefügt. Bei allen funktionerte alles, abgesehen von LiquidCrystal. Auch andere Versionen davon funktionierten nicht, kann mir jemand helfen?
Und vor allem: Was ist mein Fehler?
PS. Der error zeigt an:
probe1.1:10: error: 'POSITIVE' was not declared in this scope

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

^

exit status 1
'POSITIVE' was not declared in this scope

Ungültige Bibliothek C:\Program Files (x86)\Arduino\libraries\NewliquidCrystal in C:\Program Files (x86)\Arduino\libraries\NewliquidCrystal gefunden

Meine Programmierung(Ich weiß, dass sie schrecklich ist :/)

#include <OneWire.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>

DS3231  rtc(SDA, SCL); 
Time  t;
OneWire  ds(2);             
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int Rate = 950;
int mL = 10000;
int Impuls = 0;
float DelValue = 0;
float Value = 0;
float TempValue = 0;
const int taste1 = 3;
const int taste2 = 4;
const int taste3 = 6;
const int taste4 = 5;
int taststatus1 = 0;
int taststatus2 = 0;
int taststatus3 = 0;
int taststatus4 = 0;
const int ledPin1 = 9;
const int ledPin2 = 11;
const int ledPin3 = 13;
int var = 0;

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  lcd.begin(20,4);    //LCD starten
  rtc.begin();
  pinMode(ledPin1, OUTPUT);  //ledPin1 als output setzen
  pinMode(ledPin2, OUTPUT);  //ledPin2 als output setzen
  pinMode(taste1, INPUT);    //taste1 als input setzen
  pinMode(taste2, INPUT);    //taste2 als input setzen
  pinMode(taste3, INPUT);    //taste3 als input setzen
  pinMode(taste4, INPUT);    //taste4 als input setzen






 

}

void loop()
{

//rtc.setTime(hh, mm, ss)
//c.setDate(DD, MM, YYYY)

t = rtc.getTime();                //Zeit erhalten

unsigned long currentMillis = millis();




Value = mL * 1;
Value = Value / Rate;
taststatus4 = digitalRead(taste4);


taststatus1 = digitalRead(taste1);         //Werte erhöhen
if (taststatus1 == HIGH)
{
  digitalWrite(ledPin1, HIGH);
  var = var + 1;
} else if (taststatus4 == HIGH)
{
  digitalWrite(ledPin1, LOW);
  var = 0;
}
if (DelValue >= 10000)
{
  digitalWrite(ledPin1, LOW);
  var = 0;
}
 if (var >= 1)
{
  DelValue = DelValue + Value;
  Impuls = Impuls + 1;
}

taststatus2 = digitalRead(taste2);        //Werte senken
if (taststatus2 == HIGH)
{
  digitalWrite(ledPin2, HIGH); 
  var = var - 1;
} else if (taststatus4 == HIGH)
{
  digitalWrite(ledPin2, LOW);
  var = 0;
}
if (DelValue <= 0)
{
  digitalWrite(ledPin2, LOW);
  var = 0;
}
  if (var <= -1)
{
  DelValue = DelValue - Value;
  Impuls = Impuls - 1;
}


taststatus3 = digitalRead(taste3);      //Werte zurücksetzen auf 0
if (taststatus3 == HIGH)
{
  digitalWrite(ledPin3, HIGH); 
  Impuls = 0;
  DelValue = 0;
}
else {
  digitalWrite(ledPin3, LOW);
}

                                    //Werte auf den seriellen Monitor projizieren
Serial.print("Impulse:    ");            //"Impulse:" auf der LCD anzeigen
Serial.print(Impuls);      
Serial.print("  mL:   ");               //"mL:" auf der LCD anzeigen
Serial.println(DelValue);



  lcd.setCursor(0,0);                 //Datum und Uhrzeit auf LCD projizieren
  lcd.print(rtc.getDateStr());
  lcd.print("  "); 
  lcd.print(rtc.getTimeStr());

  
  lcd.setCursor(0,2);                 //Werte auf LCD projizieren
  lcd.print(" mL:   ");

if (DelValue <= 0){                //Variable auf LCD anzeigen und bei wert = oder < als 0 4 Leerzeichen anzeigen
 lcd.print ("     ");
 lcd.print (DelValue);
}

else if(DelValue <= 10){     //Variable auf LCD anzeigen und bei wert = oder < als 10 3 Leerzeichen anzeigen
 lcd.print("    ");
 lcd.print(DelValue);
}

else if(DelValue <=100){     //Variable auf LCD anzeigen und bei wert = oder < als 100 2 Leerzeichen anzeigen
 lcd.print("   ");
 lcd.print(DelValue);
}


else if(DelValue <= 1000){   //Variable auf LCD anzeigen und bei wert = oder < als 1000 1 Leerzeichen anzeigen
  lcd.print("  ");
  lcd.print(DelValue);
}
else if(DelValue <= 10000){ //Variable auf LCD anzeigen und bei wert = oder < als 10000 0 Leerzeichen anzeigen
  lcd.print(" ");
  lcd.print(DelValue);
}
Serial.print (TempValue, 2);
}

MFG
PixelWalker

Das steht doch in der Fehlermeldung.
Du setzt die falsche Library ein.

Habe ich das richtig verstanden?
Ist also mein LiquidCrystal nicht das richtige? Wenn ja könnte mir jemand einen Link zur richtigen libary senden?

Bitte setze Deinen Sketch in Codetags (oben links </> im Foreneditor oder [code] davor und [/code] dahinter - ohne die *).
Das kannst Du auch noch nachträglich durch Editieren tun. Bitte mach das, der Sketch ist besser zu lesen, besonders auf mobilen Geräten.

Ich habe mit dieser Lib gute Erfahrungen gemacht.

Gruß Tommy

PixelWalker:
Habe ich das richtig verstanden?
Ist also mein LiquidCrystal nicht das richtige? Wenn ja könnte mir jemand einen Link zur richtigen libary senden?

Grundsätzlich falsch ist die sicher nicht. Nur du musst die Initialisierung auch so einsetzen, wie es in den Beispielen zur Library vorgegeben wird.

Leider gibt es inzwischen etliche LCD libraries, die alle den gleichen Namen tragen, aber im constructor unterschiedliche Angaben erwarten.
Ich habe auch lange Zeit die von F.Malpartida genommen, weil die am zuverlässigsten und i.d.R. klaglos funktionierte (das ist die, die im von @Tommy56 geposteten link zum Wiki enthalten ist).

Inzwischen gibt es aber eine neue library von Bill Perry (hd44780.h), die man auch über den Bibliotheks-Verwalter innerhalb der IDE (unter display und dann scrollen) oder via github hier laden kann. Die prüft dann das angeschlossene LCD Display und bestimmt dann selbständig den constructor.

Etwas tricky ist die richtige Einbindung des I2C Moduls mit der "richtigen" Unterbibliothek (hd44780_I2Cexp), wenn man ein Beispiel vorher testen möchte.