Sorry! Sorry! Sorry!
Erst suchen und lesen, bevor eine neue Anfrage gestartet wird.
Eine ähnliche Anfrage war schon da; mit eleganterer Lösungen: https://www.roboternetz.de/phpBB2/viewtopic.php?t=21925
Nichts für Ungut.
Gruss
Ali
Hallo noch ein Mal!
In einem Word steht eine belibige Dezimalzahl, die ich über I2C zu einer LCD senden möchte. LCD verlangt ASCII-Zeichen. Über I2C kann ich aber nur einzellne Zeichen (Byteweise) senden.
(Der Bascom-Befehl I2CSEND sendet leider keine Strings-Variable.)
Ich kann natürlich so vorgehen:
Die Zahl im Word kann ja max. 5 Stellen besitzen.
Wenn die "ZAHL1" ist.
Ziffer1 = ZAHL1 / 10 000 (Integer-Division)
ZAHL2 = ZAHL1 - Ziffer1 * 10 000
Ziffer2 = ZAHL2 / 1000
ZAHL3 = ZAHL2 - Ziffer2 * 1000
Ziffer3 = ZAHL3 / 100
ZAHL4 = ZAHL3 - Ziffer3 * 100
Ziffer4 = ZAHL4 / 100
ZAHL5 = ZAHL4 - Ziffer4 * 10
Ziffer5 = ZAHL5 / 1
Und danach Ziffer1 bis Ziffer5 mit dem Bascom-Befehl CHR in ASCII umwandeln und einzelln über I2C an LCD senden.
Natürlich müsste ich kontrollieren und verhindern, dass die führenden Nullen nicht gesendet werden.
Kennt jemand bessere Verfahren, die mit wenigem Programmcode auskommen?
Gruss
Ali
Sorry! Sorry! Sorry!
Erst suchen und lesen, bevor eine neue Anfrage gestartet wird.
Eine ähnliche Anfrage war schon da; mit eleganterer Lösungen: https://www.roboternetz.de/phpBB2/viewtopic.php?t=21925
Nichts für Ungut.
Gruss
Ali
Ich weis nicht ob Dein Problem noch aktuell ist, aber es geht auch folgendermaßen:
Durch Overlay deklariere ich Variable Ausgabe die auf den selben Speicher wie die Variable Text zugreift. Dadurch brauche ich nicht zwischen Ascii und einem Byte konvertieren. Mit Len(text) prüfe ich aus wievielen Zeichen die Zahl besteht, du wolltest ja keine führenden Nullen ausgeben.Code:Dim Text As String * 5 Dim Ausgabe(5) As Byte At Text Overlay hauptprogramm: Text = Str(Zahl1) Gosub CursorPositionieren Gosub LCDAusgabe End LCDAusgabe: For i = 1 To Len(Text) J=Ausgabe(i) Gosub "Das Byte J auf LCD Ausgeben" Next i Return
Zu beachten ist allerdings das zwischen 1 und 5 Zeichen ausgegeben werden, wenn Du nicht regelmäßig das Display clearst stehen eventuell noch Zeichen auf dem LCD wenn die Zahl kleiner geworden ist.
Das Problem ist zwar nicht mehr aktuell.
Aber trotzdem vielen Dank, Thorvard .
Es ist auch eine sehr schöne Lösung.
Merke ich mir auf jeden Fall.
Ich habe die Lösung von Linux_80 verwendet. Der Link steht oben.
Originalcode von Linux_80 ist:
DIM MyString AS STRING * 20
DIM MyArray(21) AS BYTE AT MyString OVERLAY
Mehr nicht.
Wirklich sehr originell.
Genial Einfach, einfach genial. =D>
Gruss
Ali
Is das selbe in Grün Nur etwas mit Beispielcode ausgeschmückt.
Lesezeichen