So ist das klar, also wenn man alle Dinge umbenennt, aber es gibt ja auch die Möglichkeit die Schnittstelle so zu gestalten das verschiedene Klassen unterstützt werden können.
Hallo,
danke erstmal für die Arbeit mit der Lib. Ich hätte da mal eine Anfängerfrage.
Kann ich der Callback Funktion eines MenuItems auch einen oder mehrere Parameter mitgeben ?
Also Bsp.:
LCDMenuLib_element(0 , Item , Item_1 , "Information 1" , FUNC_SETTING_G(1) );
In der MENU_FUNTION hab ich das auch entsprechend angepasst:
void FUNC_SETTING_G(int nr)
{
....
Aber das compiliert natürlich nicht ;(
B_Arduino:112: error: variable or field 'FUNC_SETTING_G' declared void
B_Arduino.ino: In function 'void LCDMenuLib_7_function()':
B_Arduino:112: error: void value not ignored as it ought to be
Hi,
nein das geht nicht. Du kannst du mit globalen Variablen arbeiten. Die Funktionen werden automatisch durch die Lib aufgerufen und aktivier. Da die Lib aber nicht weiß welche Variablen übergeben werden sollen, dürfen einfach keine Übergeben werden, da ansonsten die Lib für jeden einzeln angepasst werden müsste.
Sowas dachte ich mir.
Anderer Ansatz: bekomme ich innerhalb der Callback Funktion die ID des
Menüpunktes herraus aus dem diese aufgerufen wurde ? Das würde ja dann auch das Problem lösen.
Hi, ja das geht:
LCDML.getFunction()
Die Funktion sollte dir die ID des Menüpunktes liefern.
Es wird wohl mal Zeit, das ich die Dokumentation anpasse an alle Änderungen/Möglichkeiten
Funktioniert , vielen Dank
Nabend,
zuerst einmal vielen Dank und großes Lob für diese tolle Lib. Sie ist (fast) genau passend für mein aktuelles Projekt.
Das fast oben bezieht sich auf mein kleines Problem:
Da mir die Pins auszugehen drohen habe ich mir eine I2C-Platine für mein LCD bestellt. Dieses nutzt eine erweiterte Version der LiquidCrystal-Lib, die du ja auch in Deiner benutzt. Die Befehle sind kompatibel, aber die Initialisierung macht mir Probleme. Bisher habe ich folgendes geändert:
- include der LiquidCrystal_I2C.h anstatt LiquidCrystal.h in allen Dateien
- include der Wire.h in der Hauptdatei
- Ersetzen von LiquidCrystal lcd(_LCDMenuLib_PIN........) durch LiquidCrystal_I2C (0x20) //Adresse des Displays.
Aber trotzdem wirft er mit Fehlermeldungen um sich.
Leider bin ich noch nicht wirklich fit im Programmieren. Würde mich daher freuen, wenn du mal versuchen könntest die modifizierte LCD-Lib in dein Menü einzubauen oder zumindest ein kurzes Workaround tippen, was ich an deiner Lib ändern muss, um ein LCD über I2C anzusprechen.
Beste Grüße
Christopher
Die Lib ist noch nicht zu I2C kompatibel, ich arbeite im Moment daran, aber es dauert ein wenig, da sonst auch viel zu tun ist. Beim Umschreiben kann ich keine Hilfestellung geben, da jeder sonst mit eigenen Wünschen kommt. Ich werde das innerhalb der nächsten zwei Wochen nochmals mit I2C testen und die Beta Lib dann hier zum testen zur Verfügung stellen.
Hi, ging doch schneller als gedacht.
Ich habe eine neue Beta Version. In dieser befinden sich nun zwei Beispiele. Das erste ist auch das alte mit der normalen LiquidCrystal Lib. Das zweite arbeitet mit der LiquidCrystal_I2C Lib (LiquidCrystal_New).
Falls ihr I2C verwenden solltet, müsst ihr in der LCDMenuLib_config.h die Variabel LCDMenuLib_cfg_lcd_type auf das verwendete LCD anpassen. I2C fängt mit den Werten ab 10 an. Die Beschreibung der Zahlenwerte steht oberhalb der Variable. Standardmäßig ist der Wert auf 0 gesetzt. Dies entspricht der normalen LiquidCrystal Lib im 4Bit Modus.
Wenn ihr das Anpassen der Variable vergessen habt, bekommt ihr eine Fehlermeldung die sagt, dass einige Konstanten nicht definiert sind.
Bitte testet mal die Version.
Bekannte Probleme:
- Scollbalken wird Fehlerhaft dargestellt.
-
- Der Bug ist in der nächsten Version behoben, zudem belegt die nächste Version etwas weniger RAM und ca 400KB weniger Flash Speicher.
Edit:
- Lib erneut hochgeladen
Hi,
klasse, dass du dich so schnell um die I2C-Einbindung gekümmert hast.
Leider finde ich weder die Variable LCDMenuLib_cfg_lcd_type noch das zweite Beispiel das du in der Beta aus deinem letzten Post.
Beste Grüße
Ops, ich habe die alte Lib nochmal hochgeladen. Die Datei ist nun aktualisiert.
Ah jetzt ja. Besten Dank für die schnelle Antwort. Ich spiele mal ein bisschen mit deiner Lib rum.
Dankö!
Guten Abend,
gibt es die Möglichkeit, das die CallBack Funktion noch mal aufgerufen wird, wenn ein Menüpunkt abgebrochen wird.
Zur Erklärung: Ich möchte einen automatischen Messzyklus unterbrechen sobald der User über das Menü Einstellungen an den Parametern vornimmt.
Das löse ich derzeit über eine Variable die gesetzt wird, sobald das Einstellungsmenü aufgerufen wird. Jetzt möchte ich diese ja wieder löschen.
LCDML.FuncEnd(... wird ja nicht beim Backbutton aufgerufen ...
Hi, nein die gibt es so nicht, da ansonsten der Menüpunkt wieder angezeigt werden würde.
Ich würde es so machen, dass in der Variable die du schon verwendest einen Zeitwert mit millis() abspeichert wirt. Solange der Menüpunkt aktive ist wird in diesem die Variable immer mit dem aktuellen Zeitwert + einem Puffer von 500 ms überschrieben. Der Variable Typ sollte "long" sein.
//im Menü
variable = millis()+500;
in der Loop Schleife kannst du dann abfragen, ob der Wert noch aktualisiert wird.
void loop()
{
// ... Initialisierung menü und so ..
//..
//
if(variable < millis()) {
// messung läuft
} else {
// messung steht
}
}
Das ganze ist nur Pseudo-Code, also so nicht lauffähig, soll aber darstellen wie es funktionieren könnte.
Spätestens nach 500 ms läuft dann deine Messung wieder.
Mit der Lib 1.2.1 funzt weder das eine noch das andere Beispiel.
Bei l2c gibts dass:
'_LCDMenuLib_LCD_dat3' was not declared in this scope
Hmm, irgendwie ist das Verrückt und Merkwürdig. Ich kann beide Beispiel kompilieren und das ohne I2C auch testen. Was hast du denn in der Config eingestellt ?
In der I2C Version gibt es kein _LCDMenuLib_lcd_dat 3. Wenn der Fehler kommt wurde die LCDMenuLib_config.h nicht angepasst. Hast du den Wert: **_LCDMenuLib_cfg_lcd_type ** richtig eingestellt ?
Was für konfig? Ich hab die neue LCD Lib eingefügt und die beiden Beispiele geöffnet. Beim kompilieren gibts dann die Fehler.
Geh mal in das Lib Verzeichnis und öffne die Config Datei. Im Moment ist es leider noch so, aber anders kann ich die Includes nicht einbinden.
Hey Jamelo ich habe entdeckt dass du an einer kicker Geschwindigkeitsmessung gearbeitet hast. Ich habe das selbe Projekt vor. habe auch schon viel Zeit reingesteckt allerdings ist das als arduino Neuling nicht sehr einfach. Deshalb wollte ich dich fragen ob du mir helfen könntest. Eventuell mit dem Programmtext
Hi,
hast du dir diesen Thread schon angeschaut und auch die PDF Dokumente durchgelesen ?
Projektvorstellung: Geschwindigkeitsanzeige am Kicker / Tischfussball
Damit solltest du beginnen und dann können wir die Diskussion auch in dem Thread weiterführen, da hier ein anderes Thema besprochen wird. Die Software zu der Hausarbeit befindet sich im "rar" Archiv.