Italia
Eingangshalle

COM Port vom Arduino lesen

 

Member
4968348
Hallo zusammen,

bin neu hier im Foro und habe mal 'ne Frage zum o.g. Thema
Ich versuche circa 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 corre da falsch ?

Hier mal der Quelltext: ( XProfan11 , teilweise aus der Aiuto-File 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' per 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 10 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 aumento 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 6 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 aumento wird.


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

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 circa den Gerätemanager den Port herausfinden. Leider funktioniert nur Port 1 - 9, warum ??? Getestet mit Win10

Ich benutze das Prog dazu, um circa 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 5 Tagen
Downloadcounter0
Download
 
vor 5 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 disponibile

    @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 5 Tagen  
 



Answer


Topictitle, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

92 Views

Untitledvor 0 min.
Member 4968348Gestern (12:09)
RudiB. vor 4 Tagen
Jürgen Strahl vor 4 Tagen
E.T. vor 5 Tagen

Themeninformationen

Dieses Thema hat 2 subscriber:

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


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Eingangshalle  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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