Ich habe vor kurzer Zeit schon einmal hier etwas gefragt, aber die Frage
hat sich dann von selbst erledigt und ich habe mich mit dem Thema
befasst und soweit so gut, es funktioniert teilweise auch mehr oder
minder perfekt!
Mein Ziel vorerst einmal:
Ich sende über den Com port daten von einem pc und will mir die daten
einfach anzeigen lassen auf dem anderen, also so wie : prinft("hallo"),
so soll es mir dann in dem Fenster die gesendeten daten ausgeben!
Mein sende code(funktioniert, mit einigen Terminalprogrammen getestet)_
1
#include<windows.h>
2
#include<stdio.h>
3
#include<mmsystem.h>
4
#include<cstdlib>
5
#include<iostream>
6
#include"Serial.h"
7
8
usingnamespacestd;
9
10
CSerialCOMPort;
11
12
intmain(intargc,char*argv[])
13
{
14
COMPort.Open(5,19200);
15
16
std::stringstr("Hallo! Hoffe ihr koennt mir helfen!");
17
COMPort.SendData(str.c_str(),str.length()+1);
18
printf("%s",str.c_str());
19
getchar();
20
21
COMPort.Close();
22
returnEXIT_SUCCESS;
23
24
}
Ich würde mich freuen, wenn ihr mir vielleicht senden könntet, wie ich
die daten auf dem anderen pc einlesen kann! so ein befehl wie
COMPort.ReadData, oder so, wäre toll, wenn es den gibt, habe nur nichts
genaues gefunden!
nur vorgefertigte komplizierte programme, die nicht funktionieren bzw.,
die ich
nirgends implementieren kann, weil sie einfach zu kompliziert sind!
ich möchte einfach alle daten, die ich hier sende, auf dem anderen pc
anzeigen lassen!
lg
The Hero/Noob
So, habe mir mit der Hilfe der Befehle auf der Seite(siehe oben), das
zusammengestellt, nur es gibt mir immer gesendete Bytes 0 aus!
Die ansteuerung, also das senden funktioniert allerdings, habe ich mit
Terminalprogrammen probiert! nur es empfängt niemals die daten
anscheinend mithilfe dieses programms!
kann mir wer behilflich sein?
sendeprogramm(funktioniert) : oben
Empfangsprogramm(funktioniert nicht) : gleich hier drunter!
danke
Hi!
Vorweg: Grausame Durchmischung von C und C++! Das ist absoluter Murks
und deine Probleme scheinen nicht bei dem Serial-Handling zu liegen
sondern meilen weit weiter vorne! Arbeite einmal ein ordentliches C++
oder C Tutorial durch (entscheide dich bitte für EINE der beiden
Sprachen).
Dein Problem hier wird sein, dass du beim Empfangen nicht darauf
wartest, ob überhaupt Daten da sind. Essentielle Einstellungen bezüglich
Blocking und Timeouts seh ich in dem Code nicht, keine Ahnung was da
"Standardwerte" sind. Normalerweise stellt man die serielle
Schnittstelle ersteinmal so ein wie man sie haben will, bevor man Daten
überträgt.
Matthias
Die Probleme mit dem durchmischen, hab ich mittlerweile gelöst!
hab anfangs C programmiert, und dann aus einigen gründen bin ich
umgestiegen!
hab ich dann nicht bedacht!
danke dafür erstmal!
und noch eine frage!
hab ein C++ Buch Grundlagen und fortgeschrittene Programmierung, aber da
steht sowas nicht drin!
könntest du mir nicht vielleicht etwas helfen und mir zeigen wie du das
machen würdest! bzw. wie ich auf daten warte?
Hi!
Ich hab grad nicht so viel Zeit, möchte dir aber dennoch kurz Hilfe zur
Selbsthilfe geben:
Schau mal in der Codesammlung nach dem Bootloader von Peter Danneger. Da
ist eine Linuxversion eines Codes gepostet, der die serielle
Schnittstelle (allerdings unter C) hinreichend initialisiert und mit dem
man gut arbeiten kann. Ansonsten gibts da auch diverse Windows
Versionen, die zumindest funktionieren. Die com.c dabei solltest du dir
mal anschauen, das kannst du testweise 1 zu 1 übernehmen und dann deinen
Wünschen anpassen. Dein Code oben sieht auch so schon so aus, als
würdest du eine spezielle Klasse zum Com-Zugriff benutzen? Lies
vielleicht mal die Dokumentation dazu.
Für weitere Hilfe bin ich leider jetzt nicht da, fahre morgen früh ne
Woche weg... Aber das klappt sicher alles irgendwie noch :-)
Matthias
Edit: Du kannst deine Receive-Funktion auch in ner Schleife aufrufen,
bis sie Daten empfangen hat. Wenn du dann noch eine Zeit-Funktion mit
einbeziehst, kannst du dir eine Funktion bauen, die z.B. 100 ms auf
Daten wartet, werden keine weiteren Daten mehr empfangen, so gibst du
den Datenblock zurück.