Hallo zusammen,
ich trau mich kaum, weil mein Problem so trivial daher kommt.
Von meinem Stromzähler kommen laufend serielle Daten über Softwareserial in einen NANO. Ich möchte einen Datenstromausschnitt von ca. 1000 Zeichen in ein Char-Array einlesen und dieses Array anschliessend -nach Datenübernahme- auswerten.
Soweit:
#include <SoftwareSerial.h>
SoftwareSerial zaehler(2,3); // RX , TX
void setup()
{
Serial.begin(9600);
zaehler.begin(9600); // IR-Lesekopf
lesen();
}
void lesen()
{
int pos=0;
char buffer[1010]; // soll den Datenstrom aufnehmen
Serial.println("einlesen");
while (pos <= 1000) //einlesen
{ buffer[pos]= zaehler.read();
Serial.print(buffer[pos],HEX); // zur Kontrolle... geht! -----> 1)
pos++;
}
Serial.println("prüfen");
for (int pos=0; pos<=1000; pos++)
{
Serial.print(buffer[pos],HEX);} // identischer Inhalt --> 2)
}
void loop(){ } // brauch ich im Monent nicht
Mein Problem:
Die serielle Monitorausgabe zeigt identische Daten.
Wenn ich im Einleseteil die serielle Ausgabe 1) weglasse, dann bekomm ich bei der Prüfung 2) keine Werte angezeigt.
Das selbe passiert, wenn ich in beiden Fällen nur die HEX Formatierung weglasse.
Ich kann mit dem gefüllten(?) Char Array nicht weiter arbeiten!
Wo ist mein Denkfehler?
Ich würde die Einlese-Schleife beseitigen und loop() frei laufen lassen.
Wenn eingelesen werden soll, werden Zeichen in den Puffer übernommen, wenn welche da sind.
Wenn der Puffer voll ist, kann man ihn verarbeiten.
Dein Nano hat gerade mal 2K SRAM ... und du willst die Hälfte mit deinem Char array belegen.
Welche Daten interessieren dich wirklich?
Parse die Daten schon beim einlesen - und halte nur jene im Speicher die du wirklich brauchst.
Irgendwas willst ja vermutlich dann auch noch machen, irgendwo darstellen oder ausgeben. Das wird alles zusätzlichen Speicher brauchen ...
Wegen dem Seriellen Monitor.
Derzeit beschreibt er eine Zeile. Und ich hab das genau so übernommen.
Und nur noch einen zusätzlichen Serial.println() eingefügt, damit er wenigstens das "prüfen" auf einer neuen zeile sieht.
Hi noiasca,
Speicher spielt keine Rolle. Der Nano soll die Daten einlesen, und eine Info daraus (Zählerstand) wegschreiben. Natürlich geht das eleganter- ich bin am Thema dran.
Danke.
Hab ich in einer der zahlreichen Vorversuchen ausprobiert.....
Wahrscheinlich stimmt mein ganzer Denkansatz zum Thema nicht.
Bin weiter dran und melde mich asapst.