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%28v=vs.80%29.aspx 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
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.
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.
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/desktop/aa363201%28v=vs.85%29.aspx
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.
fabi s. schrieb: > wie funktioniert das mit dem creatfile? seht alles im dem link von MS sogar als Beispiel.
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
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.
> #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.
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.
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)
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.
IHR SET SPITZE! es funktioniert!! denn port muss man so angeben: \\\\.\\COM12
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.
Nur noch eine Frage, wie kann ich da jetzt zb den wert 2 senden? und auch empfangen?
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.
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/desktop/aa365467(v=vs.85).aspx WriteFile http://msdn.microsoft.com/en-us/library/windows/desktop/aa365747(v=vs.85).aspx
ja ok macht sinn ^^ aber wo schreib ich den wert, der gesendet werden soll, rein? mein englisch ist schon eine weile her :(
Tja, dann wirds Zeit. Kann mich nur Peter II anschliessen: Was hast du 5 Jahre lang gemacht? Wenn du aus dem hier
1 | BOOL WINAPI WriteFile( |
2 | __in HANDLE hFile, |
3 | __in LPCVOID lpBuffer, |
4 | __in DWORD nNumberOfBytesToWrite, |
5 | __out_opt LPDWORD lpNumberOfBytesWritten, |
6 | __inout_opt LPOVERLAPPED lpOverlapped |
7 | );
|
nicht anhand der Paramaternamen wenigstens eine erste Idee kriegst, welches Argument höchst wahrscheinlich welchen Zweck erfüllt, dann ist Hopfen und Malz verloren.
fabi s. schrieb: > nur konsolen anwendungen programmiert Auch da muss man gelegentlich googlen und doku's lesen...
nicht unbedingt! da ich von meinem programmier lehrer die notwendige referenzen bekommen habe!
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.
Naja, bei der gesteigerten Lebenserwartung sind 5 verschenkte Jahre auch nicht mehr so schlimm. Gruss Reinhard
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.