Forum: Mikrocontroller und Digitale Elektronik Warten bis String A eine gewisse Länge hat (BASCOM)


von Kurt W. (bascomania)


Lesenswert?

Guten Tag

Ich habe ein problem weshablb ich hier schreibe^^

Also:

Ich bekomme einen String von der länge 81 über die UART-Schnittstelle. 
(mit Interruupt.

Wie kann ich mein Programm warten lassen (also das es nichts anderes 
macht ausser die Interrupts und halt warten bis der String die Länge 81 
hat?)

Hier mein Code

Do
D = Right(a , 1)
If D = Chr(010) Then
      If Len(a) = 17 Then
      B = Right(a , 14)
      B = Left(b , 4)
         If B = "CMTI" Then
         Cls
         Lcd "CMTI"
         A = ""
         Print "at+cmgr=1"
      Do
      If Len(a) = 81 Then
      Until Len(a) = 81
      A = Right(a , 9)
      A = Left(a , 1)
      Cls
      Lcd A
      Do
      Print A;
      Loop
      Wait 1

End If
End If
End If
End If
Loop

(nur die wichtige Stelle...)

Zur Erklärung:

Der Atmega wird über einen 17 Zeichen langen String darüber informiert, 
dass es Neuigkeiten gibt. Dieser String zeichnet sich durch nen LF am 
Ende aus.
Um die Neuigkeiten zu erhalten, schickt er dann den AT-Command 
"at+cmgr=1" und erhält darauffolgend den String, allerdings soll er 
warten bis der vollständig angekommen ist (81 Zeichen)

Oder gibts fürs ganze noch ne schönre Lösung?

Grüsse


habs glaub geschafft jungs, danke trotzdem!

von Charly B. (charly)


Lesenswert?

dim laenge as byte
Do
D = Right(a , 1)
If D = Chr(010) Then
      If Len(a) = 17 Then
      B = Right(a , 14)
      B = Left(b , 4)
         If B = "CMTI" Then
         Cls
         Lcd "CMTI"
         A = ""
         Print "at+cmgr=1"
      Do
      If Len(a) = 81 Then
      Until Len(a) = 81   <- ???????????????
      A = Right(a , 9)
      A = Left(a , 1)
      Cls
      Lcd A
      Do
      Print A;
      Loop
      Wait 1

End If
End If
End If
End If
laenge = len(a)
Loop until laenge = 81


viel erfolg

von ah (Gast)


Lesenswert?

Oder gibts fürs ganze noch ne schönre Lösung?


Ja. Gibt es. Ich nehme an diese Aufgabe laeuft repetitiv durch. Was 
geschieht wenn jemand den Stecker zieht ? Mach einen Timeout rein, von 1 
Sekunde oder so. Der Timeout started mit dem Anfang der Meldung. Wenn 
vor Ablauf des Timeouts, das Ende nicht kam, beginn von vorne.

von Sven P. (Gast)


Lesenswert?

Wollte das vielleicht mal ein Ringpuffer werden...?

von Avr N. (avrnix) Benutzerseite


Lesenswert?

Im Bascom gibt unter c:\programme\mcs...\sample\

rs232buffer Programme wäre ggf. eine bessere Lösung

http://www.comwebnet.de

von Kurt W. (bascomania)


Lesenswert?

Okay

lohnt sich manchmal hallt doch nochmal in den Thread reinzuschauen;)

Danke, werd mir die Beispiele anschaun.

Was ist ein Ringpuffer? :S

von Hannes L. (hannes)


Lesenswert?

> Was ist ein Ringpuffer? :S

Eine Warteschlange für "vernachlässigte" Bytes. ;-)

...

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
Noch kein Account? Hier anmelden.