![]() |
Mehrere Bytes in Comport schreiben
Hallo,
ich bastle grad wieder mal an meinem 'Wunschproject' (Das will ich schon seit bestimmt 2 Jahren proggrammieren, nur bisher hat mir das nötige Grundlagenwissen gefehlt :oops: ) der NXTComander. Mit ihm soll man einen Lego NXT Roboter fernsteuern können. Im Bluetooth SDK für Mindsorms NXT Roboter steht, dass man beispielweise um die Firmware Version zu erhalten 4 Bytes senden muss. Dann ist noch aufgeführt, was diese 4 Bytes enthalten sollen. Nur Wie kann ich 4 Bytes auf einmal in den Comport schreiben? Ich verwende die Komponente TComPort. |
Re: Mehrere Bytes in Comport schreiben
Zitat:
SendString statt SendByte - das Schreiben von Strings (nullterminiert im C-Stil, in Pascal also PChar) ist bei Comports der Normalfall. Gruss Reinhard |
Re: Mehrere Bytes in Comport schreiben
Hi Adrian,
das dürfte so auch funktionieren. An die Funktion übergibst du einfach deinen Befehl als string ;)
Delphi-Quellcode:
procedure SendeBefehl(sBefehl: String[255]);
var aBuff: Array[0..255] of Char; i, Laenge: Integer; begin Laenge := Length(sBefehl); for i := 1 to Laenge do aBuff[i-1] := sBefehl[i]; ComportMain.Write(aBuff, Length(sBefehl)); end; Gruß |
Re: Mehrere Bytes in Comport schreiben
Ich hab es jetzt so probiert:
Delphi-Quellcode:
oder
Comport.WriteStr(PChar('0x00 0x00 TestProg')); // Diese Bytefolge, soll das Programm TestProg auf dem NXT starten
Delphi-Quellcode:
oder
Comport.WriteStr('0x00 0x00 TestProg');
Delphi-Quellcode:
oder
Comport.Write('0x00 0x00 TestProg');
Delphi-Quellcode:
Keines dieser Beispiele hat funktioniert. Ich konnte zwar alle ohne Fehlermeldung kompilieren, doch wenn ich dann auf meinen Button klickte, passierte rein garnichts. Man sah zwar, dass etwas gesendet wurde (das Lämpchen am Bluetoothstick blinkte schneller), aber der Roboter reagierte nicht. Also muss ja irgendetwas mit den Beispielen nicht stimmen. Also wie kann ich Bytes keine Strings in den Comport schreiben? (Das Conected vom TComPort steht auf True)
Comport.Write(PChar('0x00 0x00 TestProg'));
|
Re: Mehrere Bytes in Comport schreiben
Hallo Adrian,
hast du meine Idee versucht? [edit]... ich glaub ich weis wo dein Fehler liegt ;) mit 0x00 ist wahrscheinlich keine Zeichenkette sondern das Zeichen Hex 00 gemeint. Das ganze kannst du dann so lösen:
Delphi-Quellcode:
und damit du das nicht für jeden Befehl soo umständlich machen musst nutzt du meine Funktion von oben, dann sieht das ganze nur noch so aus:
procedure SendeBefehl;
var aBuff: Array[0..255] of Char; begin aBuff[0] := CHR($00); aBuff[1] := CHR($00); aBuff[2] := ' '; aBuff[3] := 'T'; aBuff[4] := 'e'; aBuff[5] := 's'; aBuff[6] := 't'; aBuff[7] := 'p'; aBuff[8] := 'r'; aBuff[9] := 'o'; aBuff[10] := 'g'; ComportMain.Write(aBuff, 11); end;
Delphi-Quellcode:
[/Edit ende] [edit 2] humbug entfernt[/edit 2]
SendeBefehl(CHR($00) + CHR($00) + ' Testprog');
Gruß |
Re: Mehrere Bytes in Comport schreiben
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habs jetzt mal probiert, doch sobald ich auf meinen Senden Button Clicke, kommen folgende Fehlermeldungen (siehe Anhang).
Woran liegt dass, oder wie kann ich es umgehen? |
Re: Mehrere Bytes in Comport schreiben
![]() Der COM Port wurde nicht geöffnet oder das Öffnen ist fehlgeschlagen. Schonmal bei der Komponente Bescheid gegeben, dass sie den Port nach deinen Einstellungen (Baud, Bit/Byte, Parity, Flusskontrolle, etc) öffnen soll? |
Re: Mehrere Bytes in Comport schreiben
Nein, doch als ich es am nächsten Tag wieder probierte, klappte das schreiben in den Comport einwandfrei. (Warum nur? :gruebel: )
Im Bluetooth Manager sieht man auch, dass die entsprechende Anzahl Bytes in den Comport geschrieben wird. Laut Bluetooth NXT SDK, müsste man einen String so in den Comport schreiben: Zitat:
Byte 0 = 0x00 / $00 Byte 1 = 0x09 / $09 Byte 2 = 1 / $1 Byte 3 = 5 / $5 Byte 4 = ??? ... Ich verstehe die erklärung im Bluetooth SDK nicht richtig. Also die Message mus ein string sein und das Null termination Byte haben. Aber was bedeutet das: Zitat:
|
Re: Mehrere Bytes in Comport schreiben
Zitat:
Delphi-Quellcode:
Grüße, Messie
PChar(String) //Nullterminierter String
|
Re: Mehrere Bytes in Comport schreiben
Aha! Danke
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz