www.mikrocontroller.net

Forum: PC-Programmierung arduino <-> c++ programm


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: fabi s. (fabske)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo zusammen,

wenn das im falschen forum ist dann bitte verschieben.

ich wende mich aus verzweiflung hier her. (mein erste beitrag hier)

seit tagen/wochen versuche ich zu meine arduino (http://www.arduino.cc/) 
mit c++ (visual 2010) eine verbindung herzustellen. das heist, in der 
console von c++ eine zahl reinzuschreiben welche an den arduino gesendet 
wird und dieser dann zb eine led anschaltet. auf dem arduino 
funktioniert alles, getest mit dem tool serial monitor von arduino.

http://msdn.microsoft.com/de-de/library/733szwah%2...
nach gefühlten 203761 anderen möglichkeiten geb ich nun auf und hoffe 
das ihr mir helfen könnt.

mit c++ kenn ich mit "gut" aus.
programmiere schon seit ca 5 jahre mit c++.

grüße

Autor: Der Weise (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
du musst ":COM1" o.ä. wie eine normale Datei mit "CreateFile" öffnen und 
mit WriteFile / ReadFile Daten ein/aus -geben. Kann man wissen mit 5 
Jahren C++ Erfahrung ... Google weiß so etwas auch.

Autor: Washington I. (washington_i)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
zuerst: ich bin kein windowsler..

hier gibts aber beispielcode
http://www.arduino.cc/playground/Interfacing/CPPWindows

wie das mit der console ist - keine ahnung. dafür nehm ich putty.

weitere beispielimplementierungen für c++ sammt zugriff auf den arduino 
findet man hier drinnen: http://www.openframeworks.cc/ - ne library 
sammlung für schnell-mal-ne-c++-anwendung machen

wenn die pc-seite mit einer mit der arduino-ide vergleichbaren IDE 
gemacht werden soll: processing, aber das ist java. hat auch beispiele.

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
fabi s. schrieb:
> http://msdn.microsoft.com/de-de/library/733szwah%2...
> nach gefühlten 203761 anderen möglichkeiten geb ich nun auf und hoffe
> das ihr mir helfen könnt.

was willst du mit einen out oder inp befehlt?

Wie ist denn das Boad mit dem PC verbunden? Über netzwerk, wenn ja muss 
du ich mich sockets beschäfigen, wenn serial dann hilft das weiter

http://msdn.microsoft.com/en-us/library/windows/de...

Autor: fabi s. (fabske)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
danke für eure antworten. ich hoffe ich kann damit etwas anfangen.
hat so etwas noch niemand gemacht und kann ein paar codeschnippsel 
posten?
wie funktioniert das mit dem creatfile?
das board ist mittels usb verbunden.

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
fabi s. schrieb:
> wie funktioniert das mit dem creatfile?

seht alles im dem link von MS sogar als Beispiel.

Autor: fabi s. (fabske)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
ok, es gibt keine fehler mehr aus oder ähnliches.

nur es "hackt" an dem hier: CreateFile failed with error 2.
das steht in der Konsole

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
fabi s. schrieb:
> nur es "hackt" an dem hier: CreateFile failed with error 2.
> das steht in der Konsole

und was sollen wir jetzt machen?

Kenn du den Fehlercode für 2? Schon mal doku gelesen?

Tipp: ERROR_FILE_NOT_FOUND könnte es sein.

Hast du den richtigen COM port angegeben, und wie hast du es angegeben? 
Zeigt doch mal bitte den code.

Autor: fabi s. (fabske)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
> #include <Windows.h>

#include <tchar.h>
#include <stdio.h>

void PrintCommState(DCB dcb)
{
    //  Print some of the DCB structure values
    _tprintf( TEXT("\nBaudRate = %d, ByteSize = %d, Parity = %d, 
StopBits = %d\n"),
              dcb.BaudRate,
              dcb.ByteSize,
              dcb.Parity,
              dcb.StopBits );
}


int main()
{
   DCB dcb;
   HANDLE hCom;
   BOOL fSuccess;
   TCHAR *pcCommPort = TEXT("COM12"); //  Most systems have a COM1 port

   //  Open a handle to the specified com port.
   hCom = CreateFile( pcCommPort,
                      GENERIC_READ | GENERIC_WRITE,
                      0,      //  must be opened with exclusive-access
                      NULL,   //  default security attributes
                      OPEN_EXISTING, //  must use OPEN_EXISTING
                      0,      //  not overlapped I/O
                      NULL ); //  hTemplate must be NULL for comm 
devices

   if (hCom == INVALID_HANDLE_VALUE)
   {
       //  Handle the error.
       printf ("CreateFile failed with error %d.\n", GetLastError());
                                                  system("pause");
    return (1);
   }

   //  Initialize the DCB structure.
   SecureZeroMemory(&dcb, sizeof(DCB));
   dcb.DCBlength = sizeof(DCB);

   //  Build on the current configuration by first retrieving all 
current
   //  settings.
   fSuccess = GetCommState(hCom, &dcb);

   if (!fSuccess)
   {
      //  Handle the error.
      printf ("GetCommState failed with error %d.\n", GetLastError());
                                                  system("pause");
      return (2);
   }

   PrintCommState(dcb);       //  Output to console

   //  Fill in some DCB values and set the com state:
   //  57,600 bps, 8 data bits, no parity, and 1 stop bit.
   dcb.BaudRate = CBR_9600;     //  baud rate
   dcb.ByteSize = 8;             //  data size, xmit and rcv
   dcb.Parity   = NOPARITY;      //  parity bit
   dcb.StopBits = ONESTOPBIT;    //  stop bit

   fSuccess = SetCommState(hCom, &dcb);

   if (!fSuccess)
   {
      //  Handle the error.
      printf ("SetCommState failed with error %d.\n", GetLastError());
                                                system("pause");
      return (3);
   }

   //  Get the comm config again.
   fSuccess = GetCommState(hCom, &dcb);

   if (!fSuccess)
   {
      //  Handle the error.
      printf ("GetCommState failed with error %d.\n", GetLastError());
                                                 system("pause");
      return (2);
   }

   PrintCommState(dcb);       //  Output to console

   _tprintf (TEXT("Serial port %s successfully reconfigured.\n"), 
pcCommPort);
                                                system("pause");
   return main();
}


das system("pause") hab ich nur als "anhaltemodus" reingemacht das ich 
die ausgabe lesen kann.

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
also hast du die doku nicht gelesen

> TCHAR *pcCommPort = TEXT("COM12"); //  Most systems have a COM1 port

ab COM10 muss man anders abeiten - darf diesmal selber lesen.

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Peter II schrieb:
> also hast du die doku nicht gelesen
>
>> TCHAR *pcCommPort = TEXT("COM12"); //  Most systems have a COM1 port
>
> ab COM10 muss man anders abeiten - darf diesmal selber lesen.

Wobei ich noch den Tip geben möchte, dass die grundsätzliche 
Vorgehensweise immer noch die gleiche ist. Lediglich der 'Dateiname' 
muss anders aussehen.

(Was sich die Jungs bei MS dabei gedacht haben, wird mir immer ein 
Rätsel bleiben)

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Karl Heinz Buchegger schrieb:
> (Was sich die Jungs bei MS dabei gedacht haben, wird mir immer ein
> Rätsel bleiben)

ist eigentlich kar, sie können nicht einfach diese DEVICE namen 
vergeben, weil sonst dateien COM10 nicht mehr lesbar sind.

Autor: fabi s. (fabske)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
IHR SET SPITZE!
es funktioniert!!
denn port muss man so angeben: \\\\.\\COM12

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Peter II schrieb:
> Karl Heinz Buchegger schrieb:
>> (Was sich die Jungs bei MS dabei gedacht haben, wird mir immer ein
>> Rätsel bleiben)
>
> ist eigentlich kar, sie können nicht einfach diese DEVICE namen
> vergeben, weil sonst dateien COM10 nicht mehr lesbar sind.

Das ist schon klar.
Aber die Krücke die sie anstelle eingeführt haben, ist auch nicht 
besser.

Aber ist egal. Solange sie nur mit "Dokumente und Einstellungen", 
welches manchmal "Benutzer" heißt und im Filetree als "Users" geführt 
wird, das Chaos weiterhin hoch halten können, spielt das auch keine 
Rolle mehr. Dafür kann ich als Administrator das 'Program' Verzeichnis 
im Netzwerk freigeben so viel ich will, interessiert doch Windows nicht.

(Ganz ehrlich: Manchmal muss man auf backward-Kompatibilität pfeifen. 
Wenn im DOS COM12 ein File war, dann ist derjenige selber Schuld. File 
auf einen vernünftigen Namen umnennen und die Sache ist erledigt.

Autor: fabi s. (fabske)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Nur noch eine Frage, wie kann ich da jetzt zb den wert 2 senden? und 
auch empfangen?

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
fabi s. schrieb:
> Nur noch eine Frage, wie kann ich da jetzt zb den wert 2 senden? und
> auch empfangen?

was hast du die 5 Jahre lang gemacht "Hallo World"
> programmiere schon seit ca 5 jahre mit c++.

lies doch entlich mal die doku wenn sie schon vorhanden ist, dort steht 
alles drin.

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
fabi s. schrieb:
> Nur noch eine Frage, wie kann ich da jetzt zb den wert 2 senden? und
> auch empfangen?

Das ist ein File wie jedes andere auch.
ReadFile 
http://msdn.microsoft.com/en-us/library/windows/de...
WriteFile 
http://msdn.microsoft.com/en-us/library/windows/de...

Autor: fabi s. (fabske)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
ja ok macht sinn ^^
aber wo schreib ich den wert, der gesendet werden soll, rein?
mein englisch ist schon eine weile her :(

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Tja, dann wirds Zeit.

Kann mich nur Peter II anschliessen: Was hast du 5 Jahre lang gemacht?

Wenn du aus dem hier
BOOL WINAPI WriteFile(
  __in         HANDLE hFile,
  __in         LPCVOID lpBuffer,
  __in         DWORD nNumberOfBytesToWrite,
  __out_opt    LPDWORD lpNumberOfBytesWritten,
  __inout_opt  LPOVERLAPPED lpOverlapped
);
nicht anhand der Paramaternamen wenigstens eine erste Idee kriegst, 
welches Argument höchst wahrscheinlich welchen Zweck erfüllt, dann ist 
Hopfen und Malz verloren.

Autor: fabi s. (fabske)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
nur konsolen anwendungen programmiert

Autor: Der Weise (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
fabi s. schrieb:
> nur konsolen anwendungen programmiert
Auch da muss man gelegentlich googlen und doku's lesen...

Autor: fabi s. (fabske)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
nicht unbedingt!
da ich von meinem programmier lehrer die notwendige referenzen bekommen 
habe!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
fabi s. schrieb:
> da ich von meinem programmier lehrer die notwendige referenzen bekommen
> habe!

Tja; so ist das Leben, jetzt musst Du Dir die "notwendigen Referenzen" 
selbst zusammensuchen.

Autor: Reinhard Kern (Firma: RK elektronik GmbH) (rk-elektronik)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Naja, bei der gesteigerten Lebenserwartung sind 5 verschenkte Jahre auch 
nicht mehr so schlimm.

Gruss Reinhard

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net