Germany
Offline
Edison Member
Karma: 27
Posts: 1495
|
 |
« Reply #15 on: December 11, 2012, 06:04:21 am » |
Könnte man evtl. die neue Funktion F("") irgendwie mit benutzen? Damit wäre die Einbindung leichter. Na klar, F("text") ist zwar keine Funktion sondern ein Makro in WString.h; der einzige Sinn ist, aus "text" den Pseudo-VariablenTyp __FlashStringHelper* zu machen, und als PSTR("text") im Flash abzulegen. Musst du nur eine Methode InitText(const __FlashStringHelper* ptext) hinzufügen. Zum Verwenden auf const prog_char* casten, oder einfach mit print() ausgeben.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 165
|
 |
« Reply #16 on: December 13, 2012, 10:28:09 am » |
So habe jetzt meine Init(const __FlashStringHelper* Text) { _Text3 = Text; } jetzt möchte ich den übergebenen Wert in der Klasse abspeichern, komme aber nicht weiter. Ist das richtig? const __FlashStringHelper* _Text3; Ich möchte den Wert später an anderer Stelle wieder verarbeiten: sprintf(Text, "%s", _Text3); Brauche nochmals Hilfe, komme nicht weiter...
|
|
|
|
|
Logged
|
Arduino 1.0.3|MEGA2560 SSD1289 TFT Touch|UGUI|DS18B20|SD|DS1307 ADNS2610|RFM12|OOK|SSD1303|DHT22
|
|
|
|
Germany
Offline
Edison Member
Karma: 27
Posts: 1495
|
 |
« Reply #17 on: December 14, 2012, 08:58:49 am » |
jetzt möchte ich den übergebenen Wert in der Klasse abspeichern, komme aber nicht weiter. Ist das richtig? const __FlashStringHelper* _Text3; Ja, nur der Name _Text3 ist nicht sehr schön Ich möchte den Wert später an anderer Stelle wieder verarbeiten: sprintf(Text, "%s", _Text3); sprintf kennt keinen __FlashStringHelper ( und auch kein PROGMEM ) print(_Text3); geht direkt, sonst schau nach den Funktionen, mit denen char aus dem PROGMEM geladen oder kopiert werden
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 165
|
 |
« Reply #18 on: December 14, 2012, 11:56:47 am » |
Ja, Text3 auch nur deshalb, weil meine Lib momentan mehrere "Textformate" unterstützt. Wird dann später bereinigt  Die Fuunktion für PROGMEM ist klar: strcpy_P(Text, (char*)pgm_read_word(_Text2)); Dann werde ich mal suchen, was den __FlashStringHelper in ein char Array klopfen kann.
|
|
|
|
|
Logged
|
Arduino 1.0.3|MEGA2560 SSD1289 TFT Touch|UGUI|DS18B20|SD|DS1307 ADNS2610|RFM12|OOK|SSD1303|DHT22
|
|
|
|
Germany
Offline
Edison Member
Karma: 27
Posts: 1495
|
 |
« Reply #19 on: December 14, 2012, 05:47:36 pm » |
den __FlashStringHelper ... gibt es so gar nicht "wirklich". Von einem Pointer auf einen __Flashstringhelper weiss man, dass print() es drucken kann, und dass man diesen Pointer als einen prog_char* ( oder einen PGM_P ) verwenden kann. also z.B. strcpy_P(rambuffer, (prog_char*)Text3 ); --> arduino-1.0.1\hardware\tools\avr\avr\include\avr\pgmspace.h
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 165
|
 |
« Reply #20 on: December 15, 2012, 04:12:23 am » |
Einsame Klasse - so gehts!
|
|
|
|
|
Logged
|
Arduino 1.0.3|MEGA2560 SSD1289 TFT Touch|UGUI|DS18B20|SD|DS1307 ADNS2610|RFM12|OOK|SSD1303|DHT22
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 20
|
 |
« Reply #21 on: December 16, 2012, 01:54:32 pm » |
Damit man einen definierten Start hat, würde ich ein "root" Element im Menu-Objekt definieren, welches immer den ersten Eintrag liefert. Zusätzlich sollte jedes MenuItem entsprechende Methoden getForward(), getBack(), getUp und getDown() haben, damit man auf die angehängten Elemente zugreifen und damit durch den Baum / Graph navigieren kann.
So ein ROOT Element halte ich auch für wichtig. Da beim Menü sich um eine Baum-Datenstruktur handelt. Und die Baumstruktur braucht immer eine Wurzel. Siehe hier: http://de.wikipedia.org/wiki/Datenstruktur#Baum
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 18
Posts: 1297
|
 |
« Reply #22 on: December 17, 2012, 01:28:41 am » |
Allerdings handelt es sich bei der Datensturktur eher um einen gerichteten Graphen, nicht um einen Baum. In einem Baum gibt es keine Schleifen, die aber in der Menustruktur durchaus möglich sind. Z.B. damit ich beim Weiterblättern nach dem letzten Eintrag einer Ebene wieder an deren Anfang heraus komme.
|
|
|
|
|
Logged
|
|
|
|
|
Germany
Offline
Newbie
Karma: 0
Posts: 33
IT-Systemelektroniker Azubi
|
 |
« Reply #23 on: December 19, 2012, 02:06:33 am » |
So ein ROOT Element halte ich auch für wichtig. Da beim Menü sich um eine Baum-Datenstruktur handelt. Und die Baumstruktur braucht immer eine Wurzel.
Also ich habe einen Einstiegspunkt mit begin(int startElement). Allerdings handelt es sich bei der Datensturktur eher um einen gerichteten Graphen, nicht um einen Baum. In einem Baum gibt es keine Schleifen, die aber in der Menustruktur durchaus möglich sind. Z.B. damit ich beim Weiterblättern nach dem letzten Eintrag einer Ebene wieder an deren Anfang heraus komme.
Und wie in diesem Post beschrieben ist dies eher kein Baum sondern ein Graph und das macht es auch möglich endlos durch eine Ebene zu laufen (Also wenn man am letzten Element angekommen ist gehts oben wieder weiter). Dies war auch so von mir gewollt. Wobei mich interessieren würde, wo für ein root Element gut sein soll?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 165
|
 |
« Reply #24 on: December 19, 2012, 05:18:35 am » |
Cronos, du könntest jetzt auch die Texte über den Flash realisieren. Vorlagen sind ja vorhanden 
|
|
|
|
|
Logged
|
Arduino 1.0.3|MEGA2560 SSD1289 TFT Touch|UGUI|DS18B20|SD|DS1307 ADNS2610|RFM12|OOK|SSD1303|DHT22
|
|
|
|
Germany
Offline
Newbie
Karma: 0
Posts: 33
IT-Systemelektroniker Azubi
|
 |
« Reply #25 on: December 19, 2012, 05:31:18 am » |
Cronos, du könntest jetzt auch die Texte über den Flash realisieren. Vorlagen sind ja vorhanden  Ja hab das hier mit bekommen aber war erst mal ziemlich überfordert oO  . Meinst du mit Flash den EEPROM? Zudem hab ich es versucht die Strings durch Char Arrays zu erstetzen, aber dadurch das ich diese zwischen den Klassen hin und her reiche und das nicht ganz will, bin ich erst mal bei Strings geblieben. Ich hätte aber nichts dagegen wenn mir dabei geholfen wird die Lösung mit dem Flash um zusetzen 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 165
|
 |
« Reply #26 on: December 19, 2012, 05:39:12 am » |
Ich habe mir in meiner Lib eine private _GetText Funktion erstellt. Durch diese kann ich immer auf den Text zugreifen.
Der Flash ist der Programmspeicher (ReadOnly-wird beim Upload "gebrannt"/"geflashed" ^^), nicht das EEPROM.
Ich muss nur noch schauen, wie ich die passende char Buffergröße auswählen soll. Nicht, dass der Text im Flash doch zu groß ist und nacher wird nicht richtig dargestellt...
|
|
|
|
|
Logged
|
Arduino 1.0.3|MEGA2560 SSD1289 TFT Touch|UGUI|DS18B20|SD|DS1307 ADNS2610|RFM12|OOK|SSD1303|DHT22
|
|
|
|
Germany
Offline
Newbie
Karma: 0
Posts: 33
IT-Systemelektroniker Azubi
|
 |
« Reply #27 on: December 19, 2012, 05:46:23 am » |
Ich habe mir in meiner Lib eine private _GetText Funktion erstellt. Durch diese kann ich immer auf den Text zugreifen.
Der Flash ist der Programmspeicher (ReadOnly-wird beim Upload "gebrannt"/"geflashed" ^^), nicht das EEPROM.
Ich muss nur noch schauen, wie ich die passende char Buffergröße auswählen soll. Nicht, dass der Text im Flash doch zu groß ist und nacher wird nicht richtig dargestellt...
Aber mach ich das nicht auch? Auser das ich das ganze mit Strings verwalte. Ansonsten hab ich auch eine private getName();
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 165
|
 |
« Reply #28 on: December 19, 2012, 05:59:53 am » |
Teste es mal in der Art. Oder du stellst deine char Array Lösung mal online... // Die Funktion void DeElemente::_GetText(char* Text) { strcpy_P(Text, (prog_char*)_Text); }
// Privater Zeiger const __FlashStringHelper* _Text;
// Aufruf char Text[20]; _GetText(Text);
|
|
|
|
|
Logged
|
Arduino 1.0.3|MEGA2560 SSD1289 TFT Touch|UGUI|DS18B20|SD|DS1307 ADNS2610|RFM12|OOK|SSD1303|DHT22
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 1
|
 |
« Reply #29 on: April 10, 2013, 08:27:21 am » |
Egal was ich mache, ich bekomme die Meldung "Menu" does not name a type. muss natürlich dazu sagen, das ich nicht viel mache, da ich wenig Ahnung habe. Kann mir bitte jemand erklären wie ich vorgehen muss, um das Menü auf meines 16x2 Display Shield zu testen?
|
|
|
|
|
Logged
|
|
|
|
|
|