Benötige Hilfe bei Fehler "expected primary-expression before ')' token"

Guten Tag,

nun um gleich zur Sache zu kommen. Ich benötige Hilfe bei der Fehlermeldung "expected primary-expression before ')' token". Das Programm basiert auf der Library
http://forum.arduino.cc/index.php?topic=135828.0
welche ich nach meinem Gebrauch umgeschrieben habe.
Der Fehler kommt bei dem Befehl "myMenu.addLCD(&LiquidCrystal_I2C);"

#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Menu.h>
#include <MenuItem.h>

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

Menu myMenu;

//MenuItems
//
MenuItem item000 ("Kelvin",     000, 000, 000, 000, 001);
MenuItem item001 ("Celsius",    001, 001, 001, 000, 002);
MenuItem item002 ("Fahrenheit", 002, 002, 002, 001, 003);
MenuItem item003 ("Rankine",    003, 003, 003, 002, 004);
MenuItem item004 ("Delisle",    004, 004, 004, 003, 005);
MenuItem item005 ("Reaumur",    005, 005, 005, 004, 006);
MenuItem item006 ("Newton",     006, 006, 006, 005, 007);
MenuItem item007 ("Romer",      007, 007, 007, 006, 007);

int readButton; // Variable to store the last pressed Button
int select;

int links = 3;
int unten = 4;
int Taster = 5;
int oben = 6;
int rechts = 7;


void setup()
{

  pinMode(links, INPUT_PULLUP);
  pinMode(unten, INPUT_PULLUP);
  pinMode(Taster, INPUT_PULLUP);
  pinMode(oben, INPUT_PULLUP);
  pinMode(rechts, INPUT_PULLUP);

  lcd.begin(16, 2);
  lcd.backlight();

  myMenu.addLCD(&LiquidCrystal_I2C); //an dieser Stelle wird der Fehler angezeigt.

  // Add the items to the menu
  myMenu.addItem(item000);
  myMenu.addItem(item001);
  myMenu.addItem(item002);
  myMenu.addItem(item003);
  myMenu.addItem(item004);
  myMenu.addItem(item005);
  myMenu.addItem(item006);
  myMenu.addItem(item007);


  myMenu.begin(000);

}

void loop() {

  if (unten == LOW) {
    myMenu.goDown();
  }

  if (oben == LOW) {
    myMenu.goUp();
  }

  if (rechts == LOW) {
    myMenu.goForward();
  }

  if (links == LOW) {
    myMenu.goBack();
  }

  if (Taster == LOW) {
    select = myMenu.select();
  }

  switch (select) {
    case 000:
      Kelvin();
      break;

    case 001:
      Celsius();
      break;

    case 002:
      Fahrenheit();
      break;

    case 003:
      Rankine();
      break;

    case 004:
      Delisle();
      break;

    case 005:
      Reaumur();
      break;

    case 006:
      Newton();
      break;

    case 007:
      Romer();
      break;
  }

  readButton = 1000;

}

Wenn man es mit dem Beispiel vergleicht sieht man da ich das Programm einfach auf meine Liquid Cristal Library umgeschrieben habe das ich einen I²C benutze. Leider habe ich nichts brauchbares im WWW gefunden.

Jetzt folgt noch eine weiterer Tab welcher jedoch keine Rolle spielt. Denke es ist sinnvoll das gesamte Programm zu posten, falls es jemand interessiert.

void Kelvin()
{
  while (links == HIGH)
  {
    DHT.read22(DHT22_PIN);
    float K = T + 273.15;
    lcd.setCursor(0, 0);
    lcd.print("Luftfeu.(%):");
    lcd.print(H, 1);
    lcd.setCursor(0, 1);
    lcd.print("Temp.Kelvin:");
    lcd.print("    ");
    lcd.setCursor(12, 1);
    lcd.print(K, 1);
    delay(300)
  }
}

void Celsius()
{
  while (links == HIGH)
  {
    DHT.read22(DHT22_PIN);

    float C = T;
    lcd.setCursor(0, 0);
    lcd.print("Luftfeu.(%):");
    lcd.print(H, 1);
    lcd.setCursor(0, 1);
    lcd.print("GradCelsius:");
    lcd.print("    ");
    lcd.setCursor(12, 1);
    lcd.print(C, 1);
    Serial.println(C, 1);
    delay(300);
  }
}

void Fahrenheit()
{
  while (links == HIGH)
  {
    DHT.read22(DHT22_PIN);

    float F = T * 1.8 + 32;
    lcd.setCursor(0, 0);
    lcd.print("Luftfeu.(%):");
    lcd.print(H, 1);
    lcd.setCursor(0, 1);
    lcd.print("GradFahren.:");
    lcd.print("    ");
    lcd.setCursor(12, 1);
    lcd.print(F, 1);
    delay(300);
  }
}

void Rankine()
{
  while (links == HIGH)
  {
    DHT.read22(DHT22_PIN);

    float Ra = T * 1.8 + 491.67;
    lcd.setCursor(0, 0);
    lcd.print("Luftfeu.(%):");
    lcd.print(H, 1);
    lcd.setCursor(0, 1);
    lcd.print("GradRankine:");
    lcd.print("    ");
    lcd.setCursor(12, 1);
    lcd.print(Ra, 1);
    delay(300);
  }
}

void Delisle()
{
  while (links == HIGH)
  {
    DHT.read22(DHT22_PIN);

    float De = (100 - T) * 1.5;
    lcd.setCursor(0, 0);
    lcd.print("Luftfeu.(%):");
    lcd.print(H, 1);
    lcd.setCursor(0, 1);
    lcd.print("GradDelisle:");
    lcd.print("    ");
    lcd.setCursor(12, 1);
    lcd.print(De, 1);
    delay(300);
  }
}

void Reaumur()
{
  while (links == HIGH)
  {
    DHT.read22(DHT22_PIN);

    float Re = T * 0.8;
    lcd.setCursor(0, 0);
    lcd.print("Luftfeu.(%):");
    lcd.print(H, 1);
    lcd.setCursor(0, 1);
    lcd.print("GradReaumur:");
    lcd.print("    ");
    lcd.setCursor(12, 1);
    lcd.print(Re, 1);
    delay(300);
  }
}

void Newton()
{
  while (links == HIGH)
  {
    DHT.read22(DHT22_PIN);

    float N = T * 0.33;
    lcd.setCursor(0, 0);
    lcd.print("Luftfeu.(%):");
    lcd.print(H, 1);
    lcd.setCursor(0, 1);
    lcd.print("Grad Newton:");
    lcd.print("    ");
    lcd.setCursor(12, 1);
    lcd.print(N, 1);
    delay(300);
  }
}

void Romer()
{
  while (links == HIGH)
  {
    DHT.read22(DHT22_PIN);

    float Ro = T * 0.525 + 7.5;
    lcd.setCursor(0, 0);
    lcd.print("Luftfeu.(%):");
    lcd.print(H, 1);
    lcd.setCursor(0, 1);
    lcd.print("Grad  Romer:");
    lcd.print("    ");
    lcd.setCursor(12, 1);
    lcd.print(Ro, 1);
    delay(300);
  }
}

Ich hoffe das wir schnell zu einer Lösung des Problems kommen. Und dann bleibt mir nur noch übrig:
Mit freundlichsten Grüßen,
Oliver.

LiquidCrystal_I2C ist eine Klasse, kein Objekt. & macht daher keinen Sinn.

meinst du &lcd ??

lcd hatte ich ganz zu Beginn auch stehen, da kam dann immer die Meldung "no matching function for call to 'Menu::addLCD(LiquidCrystal_I2C&)' "
Daher dachte ich mir, das ich LiquidCrystal_I2C herreinschreiben muss.

Hallo,

wenn es um das Aufbauen eines Menüs mit I2C-LCD geht und du nicht zwingend das von dir eingesetzte Menü verwenden muss, dann empfehle ich dir dieses hier:

http://forum.arduino.cc/index.php?topic=73816.0

Ich setze es selber in einigen Projekten ein und kann sagen, dass ist super und sehr flexibel.
Sieh es dir mal an.

Ich kann mir vollkommen frei aussuchen welches Menü ich hole. Momentan habe ich es geschafft das keine Fehlermeldung mehr kommt habe etwas kleines an der Lib geändert, alle LiquidCristal habe ich in LiquidCristal_I2C umgewandelt. Zwar sind die Fehlermeldungen weg und es wird auf dem Bildschirm angezeigt, jedoch ist keine Funktion vorhanden.

Du empfehlst mir eine Menülibrary welche ich auch gefunden hatte, mit der kam ich leider überhaupt nicht zurecht und habe überhaupt nicht verstanden wie diese funktionieren soll. Vielleicht sollte ich mir nochmal diese Bibliotheke anschauen.

Jetzt mache ich jedoch erst einmal Feierabend und überlege mir dann Morgen meine weitere Vorgehensweise.

Vielen Dank für eure bisherigen Bemühungen. :slight_smile:

Zu dem von mir vorgeschlagenen Menu kann ich nur sagen, es ist sehr umfangreich und du musst die Doku dazu lesen.
Wenn du Fragen dazu hast, wird der Autor oder irgend einer hier im Forum deine Fragen beantworten. Da das Menü schon oft eingesetzt wurde, gibt es auch viele die helfen können.
Du must nur alles richtig konfigurieren (entsprechend der Beschreibung) und es sollte laufen.

Guten Morgen,

nun denn ich habe mich mal an diese Library gewagt. Nun bin ich an einem Punkt an welchem ich nicht mehr ganz weiter komme.

Zuerst einmal verstehe ich nicht ganz was die Library DogLCD macht, daher habe ich sie einfach mal weg gelassen, da ich dazu nichts gefunden habe.

Nun zum wirklichen Problem, bei der Anweisung:

// you have to select the class settings in LCDMenuLib___config.h in the lib folder

// there are options for 
// - 4bit 
// - 8bit
// - i2c
// - shift register
// - dog lcd

Da verstehe ich zwar das ich in den Lib-Ordner gehen soll und da die Sachen einstellen zu habe, jedoch
verstehe ich im Ordner nicht so ganz wie das funktioniert. Ich poste mal den Text im Ordner:

/* ******************************************************************** */
/*																		*/
/*						LCDMenuLib (LCDML)								*/
/*																		*/
/* ******************************************************************** */
/* Autor:			Nils Feldkämper										*/
/* Create:			03.02.2008											*/
/* Edit:			14.05.2015											*/
/* ******************************************************************** */

/* ******************************************************************** */
/* ============															*/
/* Description:															*/
/* ============															*/
/* With this library, you can create menus with layers on base on the   */
/* Nested-Set-Model. For every menu element can be create a function    */
/* to control the content. This function is called automatical from the */
/* library and can runs in a loop, without blocking other programm parts*/
/* ******************************************************************** */

/* ******************************************************************** */
/* ======================												*/
/* Beschreibung (german):												*/
/* ======================												*/
/* Mit der Lib können LCD Menüs über mehrere Ebenen mit Hilfe des   	*/
/* Nested Set Models generiert werden. Jeder Menüpunkt kann mit einer   */
/* Funktion hinterlegt werden die durch die Lib aufgerufen wird, sobald */
/* der Menüpunkt aktiviert wird.										*/
/* ******************************************************************** */

/* ******************************************************************** */
/* error reporting (english / german)									*/
/*	https://github.com/Jomelo/LCDMenuLib/issues							*/
/* support (german):													*/
/* 	http://forum.arduino.cc/index.php?topic=73816.0						*/
/* ******************************************************************** */

/************************************************************************/
/* Features:															*/
/* - max 254 menu elements												*/
/* - max 254 menu elements per layer								    */
/* - max 6 layers from root, configurable in LCDMenuLib___config.h		*/
/* - max support for 6 buttons up, down, left, right, back/quit, enter  */
/* - min 3 buttons needed up, down, enter                               */
/* - control over, analog buttons, digital buttons, encoder, ir, ...    */
/* - separation of structural and functional level                      */
/* - scrollbar when more menu elments in a layer then rows, configurable*/
/* - last cursor pos is saved											*/
/* - possibility to jump from one menu elment directly to another       */
/* - support for many different lcd librarys in LCDMenuLib___config.h   */
/*		4bit lcd support												*/
/* 		8bit lcd support												*/
/* 		i2c lcd support													*/
/* 		shift register lcd support										*/
/*		DogLcd support													*/
/* - max 254 simple threads can be used									*/
/*   this threads are working in the background to check temp or other  */
/*   sensors or other things											*/
/*																		*/
/*																		*/
/* - no support for gaphic displays 									*/
/************************************************************************/
#ifndef LCDMenuLib___config_h
#	define LCDMenuLib___config_h

/* config */
#	define _LCDML_DISP_cfg_cursor_deep				6		// save the last position of the cursor until layer xx
#	define _LCDML_DISP_cfg_cursor					0x7E	// cursor char
#	define _LCDML_DISP_cfg_max_string_length		20		// max string length witch can be display



/* **************************************************************************************************** */
/*	0:100  LiquidCrystal (orginal)																		*/
/* **************************************************************************************************** */
// =========================
// 4 bit mode and 8 bit mode
// =========================
#	define _LCDMenuLib_cfg_lcd_type	0	// 4Bit												(tested)
//#	define _LCDMenuLib_cfg_lcd_type	1	// 4Bit with rw										(tested)
//#	define _LCDMenuLib_cfg_lcd_type	2	// 4Bit with backlight								(tested)
//#	define _LCDMenuLib_cfg_lcd_type	3	// 4Bit with rw,backlight							(tested)
//#	define _LCDMenuLib_cfg_lcd_type	4	// 8Bit												(tested)
//#	define _LCDMenuLib_cfg_lcd_type	5	// 8Bit with rw										(tested)
//#	define _LCDMenuLib_cfg_lcd_type	6	// 8Bit with backlight								(tested)
//#	define _LCDMenuLib_cfg_lcd_type	7	// 8Bit with rw,backlight							(tested)


/* **************************************************************************************************** */
/*	100:200  LiquidCrystal_new Version (extern)															*/
/* **************************************************************************************************** */
// =========================
// 4 bit mode and 8 bit mode
// =========================
//#	define _LCDMenuLib_cfg_lcd_type	100	// 4Bit												(tested)
//#	define _LCDMenuLib_cfg_lcd_type	101	// 4Bit with rw										(tested)
//#	define _LCDMenuLib_cfg_lcd_type	102	// 4Bit with backlight								(tested)
//#	define _LCDMenuLib_cfg_lcd_type	103	// 4Bit with rw,backlight							(tested)
//#	define _LCDMenuLib_cfg_lcd_type	104	// 8Bit												(tested)
//#	define _LCDMenuLib_cfg_lcd_type	105	// 8Bit with rw										(tested)
//#	define _LCDMenuLib_cfg_lcd_type	106	// 8Bit with backlight								(tested)
//#	define _LCDMenuLib_cfg_lcd_type	107	// 8Bit with rw,backlight							(tested)
// =========================
// I2C
// =========================
//#	define _LCDMenuLib_cfg_lcd_type	110	// I2C												(tested)
//#	define _LCDMenuLib_cfg_lcd_type	111	// I2C with backlight								(tested)
//#	define _LCDMenuLib_cfg_lcd_type	112	// I2C with e,rw,rs									
//#	define _LCDMenuLib_cfg_lcd_type	113	// I2C with e,rw,rs,backlight
//#	define _LCDMenuLib_cfg_lcd_type	114	// I2C with e,rw,rs,dat4,dat5,dat6,dat7
//#	define _LCDMenuLib_cfg_lcd_type	115	// I2C with e,rw,rs,dat4,dat5,dat6,dat7,backlight 
// =========================
// shift register
// =========================
//#	define _LCDMenuLib_cfg_lcd_type	120	// SR
// =========================
// shift register 2W
// =========================
//#	define _LCDMenuLib_cfg_lcd_type	130	// SR2W
// =========================
// shift register 3W
// =========================
//#	define _LCDMenuLib_cfg_lcd_type	140	// SR3W												(tested)
//#	define _LCDMenuLib_cfg_lcd_type	141	// SR3W with backlight								(tested)
//#	define _LCDMenuLib_cfg_lcd_type	142	// SR3W with control lines							(tested)
//#	define _LCDMenuLib_cfg_lcd_type	143	// SR3W with control lines, backlight				(tested)


/* **************************************************************************************************** */
/*	200:300  DogLCD (extern)																			*/
/* **************************************************************************************************** */
// =========================
// 4 bit mode
// =========================
//#define _LCDMenuLib_cfg_lcd_type 200


#endif

Da es ja dabei um den LCD-Display geht ist es vielleicht wichtig zu wissen, das es 16x2 mit jeweils 5x8 Pixel und es über ein I²C angesteuert wird.

Wenn mir jemand eine Erklärung geben könnte wäre ich sehr erfreut.

Mit freundlichen Gruß,
Oliver.

Du musst die zu deinem Display passenden Zeilen wieder frei geben (Auskommentierung entfernen). Und bitte lies die Dokumentation, da ist alles beschrieben. Wenn du das DocLcd nicht verwendest, brauchst du die Lib auch nicht.

Nachtrag:

Fragen zur "LCDMenuLib" bitte auch direkt im Thread posten, dann können die da besser bearbeitet werden.