Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TComport senden funktioniert nicht (https://www.delphipraxis.net/164123-tcomport-senden-funktioniert-nicht.html)

8bit Liebhaber 29. Okt 2011 13:45

Delphi-Version: 2009

TComport senden funktioniert nicht
 
Guten Tag,

ich baue gerade ein VU Meter mit jeweils 10 LEDs. Diese sind an einen AVR angeschlossen, der über RS232 die Daten vom PC empfangen soll. Nun bin ich soweit, dass die Hardware funktioniert. Also mit hterm o.ä. kann ich ein Hexbyte senden und das wird korrekt angezeigt. Folgendes vielleicht zum Bytemuster:
Es wird nur ein Byte empfangen, dabei sind jeweils 4 Bit für ein Kanal. In Hexadezimal ist es dann die erste und zweite Ziffer.

Doch nun funktioniert das ganze in Delphi nicht so mit dem Byte senden. Dabei sieht mein Code so aus:
Delphi-Quellcode:
//senden
procedure TForm1.SendClick(Sender: TObject);
  var ByteSenden: Byte;
  const LEDsRight: array[0..10] of Byte = ($00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A);
  const LEDsLeft: array[0..10] of Byte = ($00,$10,$20,$30,$40,$50,$60,$70,$80,$90,$A0);
begin

  ByteSenden := (LEDsLeft[BarLeft] + LEDsRight[BarRight]);
  Comport1.Write(ByteSenden, 1);
end;
BarRight und BarLeft sind globale Integervariablen mit den Werten für den Ausschlag also 0-10.

Meine beiden Bargraphanzeigen leuchten nicht so wie sie sollen. Es leuchten nur ein paar LEDs mitten in der Anzeige. Mit hterm funktioniert jedoch alles bestens.

Weiß jemand was ich falsch mache?

Bummi 29. Okt 2011 14:35

AW: TComport senden funktioniert nicht
 
einfacher wäre : ByteSenden := BarLeft shl 4 + BarRight;

Stimmen die anderen Parameter Baudrate, Stopbit etc ?

Neumann 29. Okt 2011 14:45

AW: TComport senden funktioniert nicht
 
Das verwenden von Comport.write(buffer,count) scheint mir nicht richtig zu sein, da buffer ein Zeiger ist.

Man muss den Buffer anlegen und dann den Bytewert übergeben.

Oder man versucht es mit writestr('1') usw.

8bit Liebhaber 29. Okt 2011 15:23

AW: TComport senden funktioniert nicht
 
Wie würde das mit dem Buffer denn funktionieren?

8bit Liebhaber 30. Okt 2011 20:23

AW: TComport senden funktioniert nicht
 
keiner eine Idee?

himitsu 30. Okt 2011 20:39

AW: TComport senden funktioniert nicht
 
Wie ist denn die Prozedur Write des TComport deklariert?
(ich hab keine Lust mir das Teil extra runterzuladen)

Aber wenn es ein Pointer ist, dann solltest du auch einen Pointer übergeben.
Also den Zeiger auf deine Daten und nicht den Zeigers selber (bzw. dessen erstes Adressbyte).
Delphi-Quellcode:
Comport1.Write(@ByteSenden, 1);
.


Ansonsten nutzt du ja Binärwerte, also solltest du diese auch binär verrechnen und nicht logisch.
Delphi-Quellcode:
ByteSenden := LEDsLeft[BarLeft] or LEDsRight[BarRight];
// bzw.
ByteSenden := (BarLeft shl 4) or BarRight;

Furtbichler 31. Okt 2011 06:33

AW: TComport senden funktioniert nicht
 
Da es kompiliert, wird das mit dem Zeiger wohl nicht stimmen.
... Kompiliert es denn? :gruebel:

Ich tippe auf Comport, Baudrate, Databits, Stopbits, Parity, Handshake.

8bit Liebhaber 31. Okt 2011 12:02

AW: TComport senden funktioniert nicht
 
Funktioniert jetzt. Hab aus Versehen vergessen bei der TComComboBox mit der Baudrate den TComport zu verweisen und somit hat er mit ComComboBox2.ApplySettings die Einstellungen nicht übernommen.

Weiß noch jemand von euch, wie ich den Soundausschlag aus Windows auslesen kann? Möchte gerne jeden Sound den man hört visualisieren und nicht nur wenn man eine Datei in meinem Programm abspielt.

himitsu 31. Okt 2011 12:36

AW: TComport senden funktioniert nicht
 
Zur BASS-Lib gibt es genügend Beispiele, für die gewünschten Werte.
Als Input müstest du dann einfach nur den Stereo-Mix/Mixer wählen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz