Moin! Ich versuche derzeit einem Tc35 Handymodul mittels AT Befehlen die Telefonbucheinträge zu entlocken. Mit AT+CPBR=1 geht garnix, da kommt immer Error zurück. Bei At+Cpbr=2 kommt manchmal die Nummer, aber was ja garnicht geht, oft auch nur ein "Ok" zurück! Ich habe testweise 10 Nummern auf der Sim gespeichert. Kennt jemand dieses Verhalten? PS: Sms Versand im Textmodus geht super!
Ich habe nunmal weiter geforscht warum es zu diesem Verhalten kommt. Mein bascom Programm kommt offenbar mit den gesendeten Zeichen nicht klar. Es kommt immer zum Ende der ausgegebenen Einträge die Bin-Zeichen "10" , gefolgt von der "13". Also steht immer ein LF und ein CR hintereinander. Kann man dem Modem in seinen Einstellungen irgendwie beibringen, dass nur das CR am Ende des Strings ausgegeben wird? Bzw., ist jemand bekannt wie ich "Case" dazu nutzen kann das LF auszufiltern? Case ist doch eine "Fall"-Verzweigung, welche mir a.G. eines angegebenen Zeichen eine Verzweigung ausführt? Danke für eure Hilfe, vielleicht hat ja einer nen Beispielcode für das Lesen des Telefonbucheintrags mittels AT+CPBR=... parat :-) Danke!
Uwe Neubert schrieb: > Bzw., ist jemand bekannt wie ich "Case" dazu nutzen kann das LF > auszufiltern? Case ist doch eine "Fall"-Verzweigung, welche mir a.G. > eines angegebenen Zeichen eine Verzweigung ausführt? Vielleicht geht was mit CONFIG INPUT ??? http://avrhelp.mcselec.com/configinput.htm Ist aber Raterei ohne Code.
Hier ist der Code. Er soll im Terminalprogramm lediglich anzeigen was der Controller empfangen hat: Dim I As Byte , B As Byte Dim Sret As String * 66 , Stemp As String * 20 Dim Status As Byte Config Serialin = Buffered , Size = 17 Enable Interrupts Print "ATE0" Waitms 2000 Waitms 2000 Print "AT+CMGF=1" Sret = "" Print "at+cpbr=1" Getline Sret Print "Inhalt nach SPbr1 ist:" Waitms 100 Print Sret Waitms 500 'get line of data from buffer Sub Getline(s As String) S = "" Do B = Inkey() Select Case B Case 0 Case 13 Case 10 : If S <> "" Then Exit Do Case Else S = S + Chr(b) End Select Loop End Sub Waitms 500 'flush input buffer Sub Flushbuf() Waitms 100 Do B = Inkey() ' flush buffer Loop Until B = 0 End Sub Return
Vielleicht so? (nicht syntax gecheckt)
1 | Sub Getline(s As String) |
2 | S = "" |
3 | Do |
4 | B = Inkey() |
5 | Select Case B |
6 | Case 0 'mach nichts wenn inkey eine 0 zurückliefert |
7 | Case 13 : S = S + Chr(b) 'CR wird noch an S angehangen |
8 | Exit Do 'dann Schleife/Sub verlassen |
9 | Case 10 'mach nichts bei LF |
10 | Case Else : S = S + Chr(b) 'alle anderen Zeichen an S anhängen |
11 | End Select |
12 | Loop |
13 | End Sub |
Kenne das Modem nicht: Wird am Ende jeden der 10 Telefonbucheinträge ein LF CR ausgegeben? Oder erst ein LF CR am Ende der kompletten Ausgabe? Wenn es nicht klappt müßtest du mal genau beschreiben, wie Getline arbeiten soll. Getline läuft bei dir solange in der Schleife, bis die Abbruchbedingung kommt (LF). Dafür kannst du auch INPUT nehmen und mit CONFIG INPUT auf LF CR als Input komplett konfigurieren.
Dieses doofe Modem spuckt das so aus: Cpbr1:LF CR, Nummerneintrag, LF CR Das ist halt doof beim Einlesen da man im Text immer die Abbruchbedingungen hat. Das Siemens machts halt so. Ich hab auch Wavecom Modems, die spucken nur ein CR am Schluss und fertig. Für das Projekt ist aber das Siemens vorgesehen :-(
Uwe Neubert schrieb: > Dieses doofe Modem spuckt das so aus: > Cpbr1:LF CR, Nummerneintrag, LF CR Was soll Getline mit LF CR, Nummerneintrag, LF CR genau machen? Erstes LF verwerfen Erstes CR verwerfen Erstes Komma verwerfen Nummerneintrag in S schreiben Zweites Komma verwerfen . . Beschreib genau, was Getline machen soll!!!
Tilt schrieb: > Erstes LF verwerfen > Erstes CR verwerfen > Erstes Komma verwerfen > Nummerneintrag in S schreiben > Zweites Komma verwerfen > . > . > > Beschreib genau, was Getline machen soll!!! Falls nur das erste LF und erstes CR stören könnte man einfach noch eine Schleife vorne vorsetzen:
1 | Sub Getline(s As String) |
2 | |
3 | do |
4 | b = Inkey() |
5 | if b = 13 then exit do 'nach erstem CR Schleife verlassen |
6 | loop |
7 | |
8 | S = "" |
9 | Do 'Zeichen sammeln |
10 | B = Inkey() |
11 | Select Case B |
12 | Case 0 'mach nichts wenn inkey eine 0 zurückliefert |
13 | Case 13 : S = S + Chr(b) 'CR wird noch an S angehangen |
14 | Exit Do 'dann Schleife/Sub verlassen |
15 | Case 10 'mach nichts bei LF |
16 | Case Else : S = S + Chr(b) 'alle anderen Zeichen an S anhängen |
17 | End Select |
18 | Loop |
19 | End Sub |
Insgesamt nicht schön, könnte aber funktionieren?
Ich habe eben beide modems verglichen, sie spucken 1:1 dasselbe aus. Ich werde deinen Vorschlag heute Abend testen. Dankedir erstmal!!!
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.