Ich habe die Suche bemüht aber nichts passendes gefunden :-( Ich Schicke über ein RS232 Wandler ein ASCI Code an mein Atmega8 der wie folgt aussieht: 123:132:22:1 es sind immer 4 zahlen die durch ein : voneinander getrennt sind, die zahlen sind unterschiedlich groß von 0-9999 sind alles dabei Speichern tu ich sie in einer String * 15 Variable wie kann aber ich nun diese Zahlen Kette in 4 variablen Zerlegen das in jeder Variable eine von diesen Zahlenblock drinne steht?
Mit der Instring-Funktion nach ":" suchen und anhand der gefundenen Positionen mit der Midstring-Funktion die Fragmente heraustrennen. Dann mit der Value-Funktion Zahlen (Integer, Word) daraus machen. Das wird aber vermutlich allerhand Flash belegen und Rechenzeit kosten. ...
mm.. rechenzeit ist schlecht, das programm ist algemein schon aufwendig und langsam :-( somal ich nicht nur eine vond iese zahlenketten habe sondern vielelicth auch mal 30,40,50 dann ist es vielleicht besser das ich die zahlen einzeln über die schnittstelle schicke als in solsch ein block
Manchmal ist es besser, auf vorgefertigte Bascom-Funktionen zu verzichten und das Problem auf Art des ASM-Programmierers zu lösen. Also mittels UART-RX-Interrupt einzelne Bytes in einen Buffer (Array) einlesen, dabei das letzte (neueste) Zeichen auf Trennzeichen prüfen (":", CR) und bei Auftreten des Trennzeichens das bisher Empfangene kopieren (und entwerten) und von der Mainloop zur Zahl formen zu lassen. Interessant wäre vielleicht auch noch, den PC die Zahlen mit Führungsnullen senden zu lassen, so dass alle Zahlen die gleiche Anzahl Stellen haben. Dann könntest Du vllt. mit Overlay auf die einzelnen Abschnitte zugreifen. ...
Ich kann zwar kein BASCOM aber hier eine Loesung wie ich sie in 'C' machen wuerde int Value[4]; int n; // Value auf 0 setzen for(n=0;n < 4;n++) Value[n] = 0; // Alle Zeichen des String testen auf Ziffer oder ':' n = 0; while (*Str) { if(isdigit(*Str)) Value[n] = Value[n] * 10 + (*Str-'0'); if(*Str == ':') n++; Str++; if(n >= 4) break; } Deine Werte stehen anschliessend in Value[0],Value[1] .... Gruss Helmi
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.