Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Datenaustausch zwischen Delphiprogramm und Arduino Mikrokontroller (https://www.delphipraxis.net/177590-datenaustausch-zwischen-delphiprogramm-und-arduino-mikrokontroller.html)

fox67 14. Nov 2013 20:04

Datenaustausch zwischen Delphiprogramm und Arduino Mikrokontroller
 
Hallo ich bin gerade am Experimentieren mit einem Arduino UNO R3. Für Delphi habe ich die Komponenten Comport 4.11 installiert. Das Senden der Daten von der Anwendung klappt ganz gut(Mit dem Programm schalte ich eine LED auf dem Arduino aus und an). Nun will ich wenn die Verbindung hergestellt ist nachfragen ob die LED schon brennt. UND der Mikrokontroller soll mit 1 oder 0 antworten. Wie kann ich in Delphi die Antwort jetzt empfangen?

Hier mein bisheriger Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if ComPort1.Connected then
   begin
    Button1.Caption := 'Connect';  
    ComPort1.Close ;
    end
  else
    try
    ComPort1.Open;
    Button1.Caption := 'Disconnect';
    except
       showmessage('Fehler');
    end;
   if comport1.Connected then comport1.WriteStr('LEDSTATUS')  ;

   LED := false;
end;

procedure TForm1.Button2Click(Sender: TObject);
var

str : String;
begin
str := '1';


 if comport1.Connected then
 begin
 comport1.WriteStr(str);
 showmessage(str);
 end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
str,str2  : String;
begin
str := '0';


 if comport1.Connected then
 begin
 comport1.WriteStr(str);
 showmessage(str);
 end;
end;
Arduino Code :
Code:
 
   char empfang;
   int  LED=0;
   int  LEDPIN=7;
   
    void setup(){
     Serial.begin(9600);
     pinMode(LEDPIN, OUTPUT);
     
    }

    void loop(){
     
      if(Serial.available())
      {
        empfang = Serial.read();
        if(empfang=='LEDSTATUS'){
        Serial.print(LED);
        }
        if( isDigit(empfang) )
    {
       LED = (empfang - '0');    
       digitalWrite(LEDPIN,LED);
    }
      } 

    }

hathor 14. Nov 2013 20:17

AW: Datenaustausch zwischen Delphiprogramm und Arduino Mikrokontroller
 
Kennt Comport 4.11 den Befehl comport1.ReadByte?

Sonst mach es so:

Delphi-Quellcode:
begin
str := '1';
 if comport1.Connected then
 begin
 comport1.WriteStr(str);
// showmessage(str);
Sleep(200);
ComPort.ReadStr(S,80);
   if Pos('0',s)>0 then...
...
   if Pos('1',s)>0 then...
...

fox67 14. Nov 2013 20:20

AW: Datenaustausch zwischen Delphiprogramm und Arduino Mikrokontroller
 
Ne kennt nicht

blawen 14. Nov 2013 20:47

AW: Datenaustausch zwischen Delphiprogramm und Arduino Mikrokontroller
 
Es müsste doch den Befehl Comport.ReadString(String, Count) geben.

Die Kontrolle, ob überhaupt was ankommt, kannst du mit einem Terminalprogramm machen.

fox67 14. Nov 2013 21:10

AW: Datenaustausch zwischen Delphiprogramm und Arduino Mikrokontroller
 
Was muss ich für Count eingeben?
Delphi-Quellcode:
 if comport1.Connected then
   begin
   comport1.WriteStr('4')  ;

   comport1.ReadStr(str,1);
   showmessage(str);
   end;
Hier bekomme ich nicht als Nachricht.

blawen 14. Nov 2013 22:17

AW: Datenaustausch zwischen Delphiprogramm und Arduino Mikrokontroller
 
Zitat:

Zitat von fox67 (Beitrag 1235980)
Was muss ich für Count eingeben?

Siehe den editierten Beitrag von Hathor.

Zitat:

Zitat von fox67 (Beitrag 1235980)
Hier bekomme ich nicht als Nachricht.

Irgendwie verstehe ich Deine Aussage nicht...

hathor 14. Nov 2013 23:33

AW: Datenaustausch zwischen Delphiprogramm und Arduino Mikrokontroller
 
Zwischen WriteStr und ReadStr muss eine Pause sein für die Verarbeitungszeit des Microcontrollers -> Sleep(200);

fox67 15. Nov 2013 10:27

AW: Datenaustausch zwischen Delphiprogramm und Arduino Mikrokontroller
 
Vielen Dank funktioniert prima. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 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-2025 by Thomas Breitkreuz