Ich vermute, dass da etwas Entscheidendes fehlt:
Der ARDUINO ist kein Hellseher.
Woher soll er wissen, was er mit den empfangenen Daten machen soll?
Wenn der ARDUINO 3 Bytes für
RGB erwartet, dann musst Du auch 3 Bytes senden:
R:=ScrollBar1.Position;
G:=ScrollBar2.Position;
B:=ScrollBar3.Position;
ComPort1.SENDBYTE(76); // L= 76
ComPort1.SENDBYTE(R);
ComPort1.SENDBYTE(G);
ComPort1.SENDBYTE(B);
Integerwerte kannst Du direkt senden ohne Umwandlung.
Die OnChange-Proceduren kannst Du vereinfachen.
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SynaSer;
type
TForm1 =
class(TForm)
Button1: TButton;
Button2: TButton;
Button4: TButton;
ScrollBar1: TScrollBar;
ScrollBar2: TScrollBar;
ScrollBar3: TScrollBar;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button4Click(Sender: TObject);
procedure ScrollBarChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
R,G,B: integer;
implementation
{$R *.dfm}
procedure TForm1.Button4Click(Sender: TObject);
var
ser:TBlockSerial;
begin
ser:=TBlockSerial.Create; ser.RaiseExcept:= false;
//True;
try
ser.Connect('
COM1');
ser.Config(StrToIntDef('
9600', 9600),8,'
N',2,false,false);
sleep(20);
ser.SENDBYTE(76);
// L= 76
ser.SENDBYTE(R);
ser.SENDBYTE(G);
ser.SENDBYTE(B);
finally ser.Free;
end;
end;
procedure TForm1.ScrollBarChange(Sender: TObject);
//für alle 3 gleich
begin
Label1.Caption:=Inttostr(ScrollBar1.Position);
Label2.Caption:=Inttostr(ScrollBar2.Position);
Label3.Caption:=Inttostr(ScrollBar3.Position);
R:=ScrollBar1.Position;
G:=ScrollBar2.Position;
B:=ScrollBar3.Position;
Button4Click(Self);
end;