Announcement

Collapse
No announcement yet.

Senden von Hex-Werten via Serialport

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Dann debugge das Prpgramm und prüfe was gesendet wird aus den Bytes
    Christian

    Comment


    • #17
      Du solltest unbedingt für das Senden eine eigene Sub erstellen und denn Wert welcher gesendet werden soll als Variable mit übergeben.
      Dann auf die Sub einen Breakpoint setzen und mal schauen, was reingegeben wird.

      Comment


      • #18
        Also ich habe mir das nun mal im Einzelnschritt angeschaut und die Variable Bytes(1) ist in dem moment wo in die Serialfunktion gesprungen wird ein String mit dem Wert "0". Daher wird er warscheinlich auch mit dem Hexwert 30 abgesendet.

        Comment


        • #19
          Beitrag #10

          Du musst ihn in eine Zahl verwandeln
          Christian

          Comment


          • #20
            So langsam zweifel ich echt hier an allem. Ich glaube so langsam dass der Fehler irgendwo anders liegt. Leider.

            Also wenn ich über ein Terminalprogramm wie z.b. HTerm Hexwerte sende dann funktioniert es wie es soll aber mit meinem eigenen programm nicht.

            Das Problem ist einfach, dass mein Gegenspieler ein Mikrocontroller ist auf dem das Debugen freilich kein Vergnügen ist, da dies kaum möglich ist.

            Comment


            • #21
              Von vorne:

              Erwartet dein Gegenspieler "0A" (String) oder 0A (Zahlenwert)?
              Christian

              Comment


              • #22
                Okay. Mein Gegenspieler erwartet 0A als Zahlenwert.

                Comment


                • #23
                  Dann wandle den String um
                  Christian

                  Comment


                  • #24
                    Wenn wir aneinander vorbei reden dann tut es mir Leid aber ich habe einfach mal folgendes versucht:
                    Code:
                    Sub Button2Click(sender As Object, e As EventArgs)
                    		serialPort1.WriteLine("data")
                    		Dim test As Integer
                    		test = 16
                    		For i = 0 To 7
                    			serialPort1.Write(test)
                    		Next
                    	End Sub
                    Dies ist ja ein Integer das Problem ist nun, dass er scheinbar einmal die 1 und dann die 6 sendet. Und nicht die 16 als Dec Wert was ja 10 in Hex wäre.

                    Comment


                    • #25
                      Ich kenne die write-Methode nicht. Könnte es sein, dass ein Umwandlung in einen String erfolgt?

                      Hiernach gibt es keine Methode von write, die einen int erwartet

                      http://msdn.microsoft.com/de-de/libr...(v=VS.80).aspx
                      Christian

                      Comment


                      • #26
                        endlich habe ich es:

                        folgendes funktioniert:
                        Code:
                        serialPort1.Write(New Byte() {3},0,1)
                        Jetzt muss ich nochmal schauen wie ich dies mit meinem array verbinde aber sollte ja keine Probleme geben

                        EDIT:
                        komischer weise geht
                        Code:
                        Dim Buffer(8) As Byte
                        		Buffer(1) = 16
                        		For i = 0 To 7
                        			serialPort1.Write(Buffer(1),0,1)
                        		Next
                        nicht. Aber ist doch auch ein Byte?

                        Comment


                        • #27
                          Originally posted by snaper View Post
                          komischer weise geht
                          Code:
                          Dim Buffer(8) As Byte
                                  Buffer(1) = 16
                                  For i = 0 To 7
                                      serialPort1.Write(Buffer(1),0,1)
                                  Next
                          nicht. Aber ist doch auch ein Byte?
                          Da wird ein Buffer(Acht) deklariert, Buffer(Eins) wird die 16 zugewiesen und dann wird in einer Schlefe von 0 bis 7 dieses Buffer(Eins) 8x ausgegeben. Was soll das?


                          Und was bewirkt eigentlich
                          serialPort1.Write(New Byte() {3},0,1)
                          Günther

                          Comment


                          • #28
                            Originally posted by Günther Weber View Post
                            Da wird ein Buffer(Acht) deklariert, Buffer(Eins) wird die 16 zugewiesen und dann wird in einer Schlefe von 0 bis 7 dieses Buffer(Eins) 8x ausgegeben. Was soll das?


                            Und was bewirkt eigentlich
                            serialPort1.Write(New Byte() {3},0,1)
                            Also dass ich 8 mal das selbe ausgegeben habe war nur zu testzwecken. Undi ch muss gestehen dass mir die Sache mit New Byte etc auch äußerst komisch vorkam aber hab ich beim googeln gefunden und ist wohl die einfachste wenn nicht sogar einzige möglichkeit integer werte auszugeben ohne großen aufwand.

                            Comment


                            • #29
                              Originally posted by snaper View Post
                              ...Und ich muss gestehen dass mir die Sache mit New Byte etc auch äußerst komisch vorkam aber hab ich beim googeln gefunden und ist wohl die einfachste wenn nicht sogar einzige möglichkeit integer werte auszugeben ohne großen aufwand.
                              1) Was man bei Google oder in Wikipedia findet, muß nicht unbedingt wahr sein.

                              2) Mit New Byte() wird Speicherplatz für ein Byte reserviert, und wenn {3} dahinter steht wird diesem Byte der Wert 3 zugewiesen. Hab ich über Google rausgefunden, aber ich glaube 1) trifft in diesem Fall nicht zu... Jedenfalls, mit serieller Datenausgabe hat das nichts zu tun.

                              3) Ein Byte ist kein Integerwert. Ein Byte besteht aus 8 Bit und kann die Werte 0 bis 255 oder -127 bis +127 darstellen. Ein Integer besteht aus mindestens 2 Bytes und deckt einen dementsprechend größeren Wertebereich ab. Den kann man nicht als 8 Bit seriell übertragen sondern muß die einzelnen Bytes nacheinander senden.
                              Günther

                              Comment


                              • #30
                                Originally posted by Günther Weber View Post
                                1) Was man bei Google oder in Wikipedia findet, muß nicht unbedingt wahr sein.

                                2) Mit New Byte() wird Speicherplatz für ein Byte reserviert, und wenn {3} dahinter steht wird diesem Byte der Wert 3 zugewiesen. Hab ich über Google rausgefunden, aber ich glaube 1) trifft in diesem Fall nicht zu... Jedenfalls, mit serieller Datenausgabe hat das nichts zu tun.

                                3) Ein Byte ist kein Integerwert. Ein Byte besteht aus 8 Bit und kann die Werte 0 bis 255 oder -127 bis +127 darstellen. Ein Integer besteht aus mindestens 2 Bytes und deckt einen dementsprechend größeren Wertebereich ab. Den kann man nicht als 8 Bit seriell übertragen sondern muß die einzelnen Bytes nacheinander senden.
                                Da ich normal nicht in VB.net entwickle und ich nur ein einzige Aufgabe damit erledigen wollte hab ich nicht auf sinn oder unsinn der codeschnipsel geachtet. Für mich war es wichtig, dass es funktioniert. Normale nutze ich C++ und durch das .NET framework ist doch einiges anders(leider).

                                Comment

                                Working...
                                X