Deutsch
Eingangshalle

COM Port vom Arduino lesen

 

Member
4968348
Hallo zusammen,

bin neu hier im Forum und habe mal 'ne Frage zum o.g. Thema
Ich versuche über den virt. Port meine vom Arduino gesendete
Zeichenkette zu lesen.
Mit dem "hauseigenen" seriellen Monitor der IDE und auch einem anderen
Termialprogramm (RS232 Terminal) klappt das wunderbar.
Leider macht das XProfan Prog etwas Probleme.
Bei dem 1. Durchlauf wird die empfangende Zeichenkette nicht angezeigt.
Bei den folgenden Durchläufen wird jeweils die empf. Zeichenkette vom vorherigen (!) Durchlauf korrekt angezeigt usw.

Was läuft da falsch ?

Hier mal der Quelltext: ( XProfan11 , teilweise aus der Hilfe-Datei entnommen)

'============================================================================
' COM Empfang
'============================================================================

Declare a$, f%, ende% , Sendestring$ , Empfangstring$ , Durchlauf%

Proc GetComInput
Parameters id%
Declare x$ , Empf$
x$ = @ReadCom$(id%, 1)
@ComError(id%)
Print x$;

WhileNot x$ = ""
x$=@ReadCom$(id%,1)
@ComError(id%)
print x$;
EndWhile

EndProc

Window 0, 0 - 600, 600

f% = @OpenCom("COM5", 100, 100)

ende% = 0
Durchlauf% = 1

GetComInput f%
WhileNot ende%

a$ = @Input$("Zeichen 's' für senden", "", "s")

If a$ = "" ' Ende mit Abbruch
ende%=1

ElseIf a$ = "s" ' Zeichen senden
print @Format$("Duchlauf 00 : ",Durchlauf%);
print @Format$("Wert gesendet 00 : ",Durchlauf%);
Sendestring$ = @Format$("00000",Durchlauf%)

@WriteCom(f%,Sendestring$)

sleep 100
print "empfangen = ";
GetComInput f% ' empfangene Zeichen lesen

INC Durchlauf%
a$ = ""
print
Endif
EndWhile

@CloseCom(f%)
End

Nachtrag:
Arduino UNO bei mir am COM 5 (USB) angeschlossen
Das Verhalten zeigt sich im BS Win XP
Im BS Win11 funkt es garnicht mit dem Profan-Prog.

Mit dem hauseigenen ser. Monitor der Arduino IDE sehr gut
Der Arduino Sketch dürft also funktionieren
 
vor 9 Tagen  
 




E.T.
Kanns nicht testen, aber mal drüber geschaut:

Der erste Aufruf von "GetComInput" erfolgt ohne das "@WriteCom(f%,Sendestring$)"  vor der Hauptschleife.

Erst im 2. Aufruf in der Hauptschleife ist das "@WriteCom(f%..."  dabei, da ist f% allerdings noch 1 vom 1. Durchlauf, weil erst später in der Schleife erhöht wird.

So probiert:
...
' GetComInput f%
WhileNot ende%
...

Da beginnt die "Anzeige" mit Durchlauf 1

(getestet ohne Fehlermeldungen unter Win10, allerdings auch kein "Gerät" angeschlossen)
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
vor 5 Tagen  
 




Member
4968348
Hallo Mario,

[

E.T. (01.06.2025)
Kanns nicht testen, aber mal drüber geschaut:

Der erste Aufruf von "GetComInput" erfolgt ohne das "@WriteCom(f%,Sendestring$)"  vor der Hauptschleife.

So probiert:
...
' GetComInput f%
WhileNot ende%
...


... hat keinen Erfolg gebracht

E.T. (01.06.2025)
Erst im 2. Aufruf in der Hauptschleife ist das "@WriteCom(f%..."  dabei, da ist f% allerdings noch 1 vom 1. Durchlauf, weil erst später in der Schleife erhöht wird.


'f%' ist der Rückgabewert von @openCom, also das Port-Handle ! und wird in der Schleife auch nicht erhöht

Ich habe das Problem mitlerweile bis auf einige Schönheitsfehler gelöst, siehe Quelltext weiter unten.
Du schriebst: du hast kein "Gerät" zum testen. Du benötigst nicht unbedingt ein Arduino Board mit entsprechenden Prog, um das Ganze zu testen.
Wenn du ein " USB to Serial Adapter with CH340" hast ....so etwas...)



einfach am Adapter Pin TxD mit Pin RxD verbinden und über den Gerätemanager den Port herausfinden. Leider funktioniert nur Port 1 - 9, warum ??? Getestet mit Win10

Ich benutze das Prog dazu, um über ein Arduino einen Schrittmotor zu steuern. Ich sende ein 'Befehl' und das Board sendet dann den Status zurück .

Hier der überarbeitete Quelltext:

23 kB
Hochgeladen: vor 4 Tagen
Ladeanzahl0
Herunterladen
 
vor 4 Tagen  
 




Member
4968348
... achso,

So ist der Quelltext besser lesbar
'====================
' COM Empfang
'====================
Declare Eingabe$, Port$ , Port_Hnd%, ende% , Sendestring$ , Empfangstring$

Proc GetComString

    Parameters id%
    Declare Zeichen$ , Empf$

    While 1

        Zeichen$ = @ReadCom$(id%, 1)
        sleep 100'notwendig, warum ???
        @ComError(id%)
        casenot Zeichen$ = "" : break'Schleife erst verlassen, wenn Zeichen anliegt

    endwhile

    @Set("Decimals",0)

    Whilenot Zeichen$ = ""'Schleife solange Zeichen vorhanden sind

        Empf$ = Empf$ + Zeichen$
        Zeichen$=@ReadCom$(id%,1)'Zeichen einlesen
        @ComError(id%)

    EndWhile

    return Empf$

EndProc

Window 0, 0 - 800, 600
Def $Port "COM5"'an / von diesen Port wird gesendet / empfangen
Def $Port_Parameter ":9600,N,8,1"'Port Settings
print "    Zeichen senden und empfangen auf Port: " + $Port + ":\n"
Port_Hnd% = @OpenCom($Port, 100, 100)

ifnot Port_Hnd% = -1' Port ist verfügbar

    @setCom(Port_Hnd%, $Port + $Port_Parameter)
    ende% = 0

    WhileNot ende%

        Eingabe$ = @Input$("beliebige (Alpha)Zeichenkette eingeben", "", "beliebige Zeichen")

        If Eingabe$ = ""' Ende mit <Abbruch>

            ende%=1

        else

            Sendestring$ = Eingabe$
            @WriteCom(Port_Hnd%,Sendestring$)'Zeichenkette senden
            print " gesendet wurde : "; Sendestring$
            Empfangstring$ = GetComString(Port_Hnd%)'empfangene Zeichenkette
            print "empfangen wurde : "; Empfangstring$
            clear Empfangstring$
            print

        Endif

    EndWhile

else

    print "Port " + $Port + " nicht verfügbar"
    waitinput

endif

@CloseCom(Port_Hnd%)
End
 
vor 4 Tagen  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

89 Betrachtungen

Unbenanntvor 0 min.
Member 4968348vor 13 min.
RudiB.Vorgestern (19:38)
Jürgen StrahlVorgestern (05:27)
E.T. vor 4 Tagen

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Member 4968348 (3x)
E.T. (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie