PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Teil eines über UART empfangenen Textes ignorieren?



Barracuda_cy
04.08.2009, 15:23
Aaaaalso, ich bekomme über UART von einem Modem einen Text, der grösste Teil davon ist unwichtig.
Hier mal der Text:

+CMGL: 1,"REC UNREAD","xxxxxxxxxx",,"09/08/04,15:50:23+08"

Test1

Alles was auf der 1. Zeile steht ist für mich unwichtig, nur was in der 2. Zeile steht (hier eben als Beispiel "Test1") ist für mich wichtig. Wie bekomme ich BASCOM dazu, die erste Zeile - die Anzahl der Zeichen ist ja immer dieselbe, zu ignorieren und die 2. Zeile in eine Variable zu schreiben?

Vielen Dank für Anregungen und Codeschnippsel schon im Voraus!

Liebe Grüsse

Barracuda_cy
04.08.2009, 15:39
ich glaub ich komm dem ganzen langsam auf die schliche, hab mal in der BASCOM hilfe nachgeschaut:

http://avrhelp.mcselec.com/index.html?string.htm

kanns nur noch nicht ganz richtig anwenden, das heisst ihr dürft gerne weiter eure anregungen schreiben aber einfach als zeichen das ich auch dran bleibe;)

peterfido
04.08.2009, 15:44
Was hast Du denn schon? Es ist einfacher bestehendes zu verbessern, als komplett neu anzufangen

Barracuda_cy
04.08.2009, 15:50
ah, hi peterfido :D

Aaaaalso, mein bescheidener anfang:

ACHTUNG: Habe die ganze Konfigurationssache obendran zwecks Platzeinsparung weggelassen

Hier mein Code:


Cls
Dim B1 As String * 10
B1 = String(9 , 10)
Lcd B1
End

Also eigentlich sollte dieses BEISPIEL doch auf den Text warten, die ersten neun Zeichen rauspicken und die dann aufm LCD ausgeben?

edit-----

aufm LCD werden 9 schwarze vierecke angezeigt, unabhängig von der Kontrasteinstellungen

peterfido
04.08.2009, 15:57
Sorry, aber da fehlt mir so einiges...
Nicht mal eine Schleife finde ich da...
Auch keine Empfangsroutine...

Falls das im ersten Post eine Telefonnummer ist, würde ich die unkenntlich machen...

peterfido
04.08.2009, 16:10
Probier mal das. Fehlt noch die LCD init...


$hwstack = 32
$swstack = 10
$framesize = 40

Dim B As Byte
Dim Empfang As String * 20


Do
B = Inkey()
If B <> 0 Then
If B = 13 Then
If Left(empfang , 4) = "+CMGL" Then
nop
Else
Cls
Locate 1 , 1
Lcd Empfang
End If
Empfang = ""

Else
If B <> 10 Then
Empfang = Empfang + Chr(b)
End If
End If

End If


Loop

End

Che Guevara
04.08.2009, 16:11
Probier mal das:



$regfile = "m32def.dat"
$crystal = 16000000
$baud = 19200



Dim Text As String * 67
Dim Auswahl As String * 5

Text = "+ Cmgl : 1 , REC UNREAD , xxxxxxxxxx , 09/08/04,15:50:23+08 , test1"



Do

Auswahl = Mid(text , 63 , 5)

Print Auswahl


Loop

End


Gruß
Chris

Barracuda_cy
04.08.2009, 16:56
Aber eigentlich kann doch mein Programm so nicht ganz falsch sein da ich ja nur 9 anstatt 10 "Kästchen" auf dem LCD rauskriege?!
An was liegt das aber das es kästchen sind und nicht buchsataben oder Zahlen?!

Lg

peterfido
04.08.2009, 17:02
Woran das liegt, kann Dir so ohne Code keiner sagen.... Mir fehlt auch die Motivation alle möglichen Ursachen dafür zu posten... Hast Du die anderen Vorschläge jetzt schon versucht? Funzt das LCD, wenn du ein "Hallo" oder so ausgibst?

Am besten die Vorschläge testen und/oder kompletten Code einstellen.

Barracuda_cy
04.08.2009, 17:30
ja, die vorschläge von euch hab ich (natürlich) getestet, ohne erfolg:(

Das LCD geht, das hab ich schon ausprobiert

Barracuda_cy
05.08.2009, 11:04
Der Code der mir die 2 Schwarzen Kästchen angibt ist hier:

Dim A As String * 6
A = Input
A = String(2 , 6)
Cls
Locate 1 , 1
Lcd "A"
Wait 1
Cls
Locate 1 , 1
Lcd A
End

liebe grüsse

CPU_Heizer
05.08.2009, 13:21
Die Funktion "String(m, n)" gibt eine Zeichenkette von m-Mal dem Zeichen n zurück.
"A = String(2, 6)" gibt also 2 mal das Zeichen mit dem Ascii-Code 6 zurück, also zwei schwarze Kästchen.

So wie ich dich verstehe, musst du die Zeile "A = String(2, 6)" hierdurch ersetzen:



Dim B as Integer
B = Len(A)
B = B - 60 '60 mit der Länge des Textes ersetzen, den du weg haben willst
A = Right(A, B)

Barracuda_cy
06.08.2009, 12:37
Also, habs jetzt rausbekommen - es klappt:D

aber wie kann ich jetzt bascom sagen das es einen Teil des Strings ignorieren soll?

@CPU_Heizer: könntest du bitte deinen obigen Code erläutern, dann führt er mich bestimmt zum ziel;) (wenns geht idiotensicher :$)

CPU_Heizer
06.08.2009, 21:31
Was klappt? Das, dass du vom Modem den String empfängst?
Poste mal den Code.

Also, angenommen, A ist dein empfangener String:
+CMGL: 1,"REC UNREAD","xxxxxxxxxx",,"09/08/04,15:50:23+08"
Test1

"Dim B as Integer":
Neue Integer-Variable namens B (Du hast gesagt Idiotensicher xD)

"B = Len(A)":
In B wird die Länge vom String A reingeschrieben. In unserem Fall ist die Länge 65, also wird in B die Zahl 65 reingeschrieben.

"B = B - 60":
Hier wird 60 von B abgezogen. Also enthält B jetzt die Zahl 5.

"A = Right(A, B)":
Jetzt werden soviel letzte Zeichen aus dem String A gepickt, wie B angibt. Und da B 5 enthält, werden die 5 letzten Zeichen von A herrausgepickt, also "Test1".