könnt ihr mir sagen wie ich z.b. nen "leeres" array definiere und ob das so funzen wird oder das einfach ne totale Katastrophe ist? hab grad keine arduino ide bei mir...
ziel ist es bis zu 30 Ereignisse irgendwo zu hinterlegen und auf dem tft später als "log" darstellen... also sprich immer nur die aktuellsten und die größer 29 sollen überschrieben werden.
ich hoffe man kann aus meinem salat erkennen was ich will..
Aber wenn du es eh nur im RAM haben willst, dann bau dir die Datenstructur und schreib die Daten da rein.
Wenn der index > 29 ist, stellst du ihn auf 0 und weiter gehts.
Du machst da auch ganz, ganz großen Unsinn mit dem Speicher. Du hast ein lokales Array buff. Dann hast du ein globales Array aus Zeigern. Und diese Zeiger zeigen immer auf das gleiche lokale Array. Das kann so einfach nicht funktionieren
ziel ist es bis zu 30 Ereignisse irgendwo zu hinterlegen und auf dem tft später als "log" darstellen... also sprich immer nur die aktuellsten und die größer 29 sollen überschrieben werden.
Deine gewünschte Datenstruktur nennt sich Ringpuffer
Außerdem solltest du dir vielleicht mal structs ansehen. Gerade wenn du nicht mit C Strings umgehen kannst vielleicht die bessere Wahl.
mpl1337:
mein Due hat noch genug ram von daher stört es mich nicht wenn der Logger ins ram brüllt. hauptsache ich komme einfach an die logs wieder.
Das wird so eben nichts wenn du ein Array hast dass auf lokalen Speicher zeigt. Lokale Variablen hören am Ende ihres Scopes auf zu existieren! Und du kannst in C/C++ nicht Arrays mit = zuweisen/kopieren. Das sind keine Objekte. Eine Array Variable ist ein Zeiger auf das erste Element. Das ist nichts Arduino-spezifisches, sondern liegt an der Programmiersprache.
Du kannst sowas machen:
struct Element
{
byte hour;
byte minute;
byte second;
byte day;
byte month;
byte year; //oder short für 4-stellige Jahreszahlen
char text[20];
};
Und dann ein Array daraus. Das struct hat dann Platz für 19 Zeichen Text (+ Terminator). Und bei dem Text musst du aufpassen dass du nicht über das Ende des Arrays hinaus schreibst. Also Funktionen wie strncpy() oder snprintf() für das Kopieren verwenden! Dann werden nur n Zeichen kopiert.
Bei dem Index hast du zwei Optionen:
1.) Du machst einfach if (index >= 30) index = 0
2.) Du machst bei jedem Inkrementieren eine Modulo-Division:
index = (index + 1) % 30;
Der Modulo ist der Rest einer ganzzahligen Division:
29 % 30 = 29
30 % 30 = 0
mpl1337:
mein strukturiertes denken in sachen arduino ist noch am anfang und am lernen =)
Ein wichtiger Punkt. Und vorher solltest du dich noch mit den Basics beschäftigen. Spart dir später viel Zeit und Nachfragen ein. Danach kommt das mit der Struktur.
ElEspanol:
Ein wichtiger Punkt. Und vorher solltest du dich noch mit den Basics beschäftigen. Spart dir später viel Zeit und Nachfragen ein. Danach kommt das mit der Struktur.
Ja das ist das Problem... Die Basics sind langweilig.... Ich wurde seit meiner Geburt ins kalte wasser geworfen.. Eltern konnten kein Wort Deutsch... Schule... Keiner lernte mit mir. Ausbildung... Nach wenigen Tagen ohne Gesellen auf Baustelle geschickt. Meister... Kurz erklärt...du musst überleben und dich nicht mit lapalien kaputt schlagen sagte mir man immer, Jetzt kapier das wichtigste oder Schmier ab Ich würde gerne bei 0 anfangen... Andere fangen mir hello World oder LED blink an. Bei mir war es der avr net io mit ETH644. Und gleich mal das Aquarium ans Netzwerk gehängt und hat nach etlichen fragen in Foren und Freundeskreisen geklappt
Das ist zu spezifisch als dass man das alles so ohne weiteres in eine allgemeine Lib gießen könnte. Jedenfalls nicht ohne tief in die C++ Trickkiste zu greifen.
Aber es ist kein Problem dass selbst zu schreiben: