Also, hi leute, ich bin total verzweifelt, und hoffe ihr könnt mir
helfen!
Ich möchte über die serielle Schnittstelle "einfach" daten senden!
Ich möchte Daten mittels C++ über die serielle Schnittstelle raussenden!
(genauer gesagt an den AVR)
ich definiere mir zum beispiel "h" und möchte dann eben dieses h
raussenden und der andere PC oder eben der AVR soll das empfangen über
die serielle! ich hab hier mal was das senden betrifft was
zusammengebastelt!
es gibt zwar keine Fehler, aber ich weiß noch nicht ob es daten sendet,
bzw. wie der andere das dann empfangen kann!
ich muss dazu sagen, dass ich was solche, schon etwas schwerere dinge
nicht so bewandert bin in c++, deshalb eine praktische erklärung, das
ich mir was vorstellen kann, wie ich das dann einbinde wäre nett!
ich hoffe ihr könnt mir weiterhelfen und ich werde bald in der lage sein
"hallo" über die serielle rauszusenden und auf nem anderen pc zu
empfangen!
1
#include<windows.h>
2
#include<stdio.h>
3
#include<mmsystem.h>
4
#include<cstdlib>
5
#include<iostream>
6
#include"Serial.h" //einlesen der Headerdatei
7
#include"Serial.cpp" //implementieren der .cpp datei
8
9
usingnamespacestd;
10
11
CSerialCOMPort;// für serielle übertragung auf den AVR
12
13
//Definieren der variabeln
14
unsignedcharout_byte;
15
16
intmain(intargc,char*argv[])
17
{
18
19
COMPort.Open(1,19200);// Hier wird der COM Port geöffnet erste Zahl = Comportnummer z.B. COM1, zweite Zahl = Übertragungsrate
20
21
charh_str[10];
22
h_str[1]='H';
23
h_str[2]='A';
24
h_str[3]='L';
25
h_str[4]='L';
26
h_str[5]='O';
27
28
COMPort.SendData(h_str,sizeof(h_str));// SendData( Daten die gesendet werden sollen, größe der Daten) beispiel SendData(h_str,2) Sendet die ersten beiden FElder von h_str
Ob das, was in Serial.h und Serial.cpp richtig ist, weißt du besser als
die Leser hier. Aber auch dein main enthält noch Fehler:
Arrays beginnen immer mit dem Index 0. h_str besteht auso aus den
Elementen h_str[0], h_str[1], ..., h_str[9]. Deswegen müssen die
Zuweisungen folgendemaßen aussehen:
1
h_str[0]='H';
2
h_str[1]='A';
3
h_str[2]='L';
4
h_str[3]='L';
5
h_str[4]='O';
sizeof(h_str) ist 10, weil h_str aus 10 Elementen der Größe 1 besteht.
Du möchtest aber wahrscheinlich nicht 10 Zeichen senden, sondern nur 5,
nämlich die Buchstaben des Worts "HALLO". Also muss es heißen
1
COMPort.SendData(h_str,5);
Vielleicht funktioniert die Sache damit ja schon. Hast du einen zweiten
PC, mit dem du die Daten empfangen und anzeigen lassen kannst? Wenn
nicht, kannst du auch an der Schnittstelle des PC die Tx- und
Rx-Leitungen miteinander verbinden (Loopback) und in dein obiges
Programm nach COMPort.SendData() geeignete Anweisungen zum Empfang von
Daten einfügen. Wenn du alles richtig gemacht hast, müssten du damit die
gesendeten Daten wieder zurückgelesen werden.
Um die Tx- udn Rx-Leitungen zu verbinden, steckst du einfach eine
Sub-D-Buchse, bei der du Pin 2 und Pin 3 mit etwas Lötzinn überbrückt
hast, in den COM-Port des PC.
CSerialCOMPort;// für serielle übertragung auf den AVR
15
16
unsignedcharout_byte;
17
18
intmain(intargc,char*argv[])
19
{
20
COMPort.Open(1,19200);
21
charh_str[5];
22
strcpy(&h_str[0],"HALLO");
23
COMPort.SendData(h_str,sizeof(h_str));
24
25
std::stringstr("asd");
26
COMPort.SendData(str.c_str(),str.length()+1);
27
str="HALLO";
28
29
printf("%s",h_str);
30
getchar();
31
32
COMPort.Close();
33
returnEXIT_SUCCESS;
34
35
}
hoffe ich habe jetzt das mit dem nullbyte beseitigt, sonst weiß ich
nicht genau was de meinst! das mit .cpp einbinden, hab ich eh oben im
programm geschrieben versteh ich net ganz was du meinst!
Noch eine frage, da du dich anscheinend ganz gut auskennst!
wie kann ich das dann von nem anderen pc einlesen?
'Linker' ist eigentlich recht eindeutig, befrag mal dein Handbuch.
> COMPort.Open(1,19200);> char h_str[5];> strcpy (&h_str[0], "HALLO");
'&h_str[0]' ist quasi gleich 'h_str'. Aber kannst du mir sagen, wo das
Nullbyte hin soll?
> std::string str ("asd");
Hatten wir weiter oben nicht 'using namespace std'?
> Noch eine frage, da du dich anscheinend ganz gut auskennst!> wie kann ich das dann von nem anderen pc einlesen?
Ich kann ein bisschen C++, ein bisschen mehr C und unter Linux les ich
ein Byte von einer Schnittstelle genauso, wie ich eines aus einer Datei
lese.