?
Danke für die links nach langem hin und her habe ich doch noch ein passendes Tutorial gefunden
welches sich einfach auf meine Anforderungen anpassen lässt.
Ich weis leider nicht mehr wo ich es gefunden hatte aber falls dennoch jemand Interesse hat:
Hier der Code für den Borland C++ Builder:
cpp:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "U_Projekt.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
bool CommFlag;
char InBuffer[101];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int port =3;
DCB dcbCommPort;
BOOL bPort;
COMMTIMEOUTS Timeouts;
DWORD BytesRead;
Memo1->Clear();
Memo1->Lines->Add("Es wird versucht eine Verbindung mit COM-Port: "
+ IntToStr(port) +
" Herzustellen");
AnsiString Port = "COM" +IntToStr(port);
handle = CreateFile(Port.c_str(),
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
0);
if (handle != INVALID_HANDLE_VALUE)
{
Memo1->Lines->Add(" -Verbindung Hergestellt.");
Memo1->Lines->Add("");
Memo1->Lines->Add("Auslesen des COM-Portes: "+IntToStr(port));
dcbCommPort.DCBlength = sizeof(DCB);
GetCommState(handle, &dcbCommPort);
if(!BuildCommDCB("baud=9600 parity=N data=8 stop=1", &dcbCommPort))
{
handle = NULL;
Memo1->Lines->Add(" -Fehler");
return;
}
if(!SetCommState(handle, &dcbCommPort))
{
CloseHandle(handle);
handle = NULL;
Memo1->Lines->Add(" -Fehler");
return;
}
Timeouts.ReadIntervalTimeout = MAXDWORD;
Timeouts.ReadTotalTimeoutConstant = 0;
Timeouts.ReadTotalTimeoutMultiplier = 0;
Timeouts.WriteTotalTimeoutConstant = 250;
Timeouts.WriteTotalTimeoutMultiplier = 1;
if(!SetCommTimeouts(handle, &Timeouts))
{
CloseHandle(handle);
handle = NULL;
Memo1->Lines->Add(" -Fehler");
return;
}
CommFlag = true;
Button1->Enabled = false;
Button2->Enabled = true;
Memo1->ReadOnly = false;
Memo1->SetFocus();
while(CommFlag)
{
Application->ProcessMessages();
ReadFile(handle, InBuffer, 100, &BytesRead, NULL);
if(BytesRead)
{
InBuffer[BytesRead] = 0;
Memo1->SetSelTextBuf(InBuffer);
}
}
CloseHandle(handle);
handle = NULL;
Button1->Enabled = true;
Button2->Enabled = false;
Memo1->ReadOnly = true;
}
else Memo1->Lines->Add(" -Es Konnte keine Verbindung hergestellt werden");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
CommFlag = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
CommFlag = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1KeyPress(TObject *Sender, char &Key)
{
// If a Memo1 key is pressed, transmit it out the serial port.
// Set the key to 0 so it will not echo in Memo1.
if(handle) TransmitCommChar(handle, Key);
Key = 0;
}
//---------------------------------------------------------------------------
header:
//---------------------------------------------------------------------------
#ifndef U_ProjektH
#define U_ProjektH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // Von der IDE verwaltete Komponenten
TButton *Button1;
TButton *Button2;
TMemo *Memo1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Memo1KeyPress(TObject *Sender, char &Key);
private: // Benutzer-Deklarationen
public: // Benutzer-Deklarationen
__fastcall TForm1(TComponent* Owner);
HANDLE handle;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
und hier noch den Code für den Arduino dieser war nicht inhalt des Tutorials sondern
enstand vor wenigen minuten zum Testen des Codes:
char Data[8];
char PIN[14];
void setup() {
Serial.begin(9600);
for(int pin = 0; pin <= 13; pin += 1)
{
pinMode(pin, OUTPUT);
}
PIN[0]='0';
PIN[1]='1';
PIN[2]='2';
PIN[3]='3';
PIN[4]='4';
PIN[5]='5';
PIN[6]='6';
PIN[7]='7';
PIN[8]='8';
PIN[9]='9';
}
void loop() {
if (Serial.available()==7)
{
for (int i=0;i<=7;i+=1)
{
Data[i] = Serial.read();
}
Serial.print(Data[0]); //D
Serial.print(Data[1]); //8
Serial.print(Data[2]); //8
Serial.print(Data[3]); //
Serial.print(Data[4]); // =
Serial.print(Data[5]); //
Serial.print(Data[6]); //1
Serial.println("");
if (Data[0]=='D'){
for(int i = 0; i <= 13; i += 1) {
if (Data[1]=='0'&&Data[2]==PIN[i]){
if (Data[6]=='1') digitalWrite(i, HIGH);
if (Data[6]=='0') digitalWrite(i, LOW);
}
if (Data[1]=='1'&&Data[2]==PIN[i]){
if (Data[6]=='1') digitalWrite(i+10, HIGH);
if (Data[6]=='0') digitalWrite(i+10, LOW);
}
}
}
}
}
Beide Codes sind zwar noch verbesserungs bedürftig bzw. müssen noch leicht für meine zwecke angepasst werden am im groben und
ganzen sollte es auch so Funktionieren.
Die Ausgänge am Arduino lassen sich somit mit dem Code "D08 = 1" an und "D08 = 0" ausschalten.
Da ich mein problem somit gelöst habe kann hier gerne zu gemacht werden.
gruß,
Crue