Knifflige Frage! Seriell auslesen?



  • Ich möchte über die serielle Schnittstelle meines PC´s einen Buchstaben senden, den dann zb. ein anderer computer empfangen kann!
    ich hab schon irgendwie serial.cpp bzw. serial.h probiert, und auch was gemacht, aber es geht irgendwie überhaupt nicht richtig!
    kann mir wer von euch vielleicht was senden, mit dem ich zb. einfach nur ein oder mehrere buchstaben raussende und auf nem anderen computer empfange!
    also ich will "B" senden --> compilieren des sende codes --> senden --> compilieren des empfangscodes auf anderen pc --> empfangen : "B"
    irgendwie sowas!

    PLS help!

    ich bin echt verzweifelt!
    hab schon auf einigen seiten und anleitungen geschaut, aber das ging dann nicht!
    ich verwende Dev C++ und würd einfach so einfach wies geht über die serielle etwas senden!



  • Nimm am besten eine fertige Klasse, die serielle Schnittstelle hat einige Stolpersteine. Such mal auf codeproject.com nach CSerial.

    Wenn du es selbst machen willst, dann verwende alle möglichen SetComm... Funktionen (z.B. für Baudrate usw., Timeouts setzen...) im Vorfeld und kommuniziere dann per CreateFile/WriteFile/ReadFile.

    P.S.: Dev-C++ ist veraltet, buggy und wird nicht mehr weiterentwickelt. Sieh dich besser nach Alternativen um (z.B. Visual Studio 2008 Express).



  • Also, damit die leute nicht glauben ich bin eine faule ***, hier mal was ich mir dachte!

    #include <windows.h>
    #include <stdio.h>
    #include <mmsystem.h>
    #include <cstdlib>
    #include <iostream>
    #include "Serial.h" //einlesen der Headerdatei
    #include "Serial.cpp" //implementieren der .cpp datei
    
    using namespace std;
    
    CSerial COMPort; // für serielle übertragung auf den AVR
    
    //Definieren der variabeln
    unsigned char out_byte; 
    
    int main(int argc, char *argv[])
    {
    
       COMPort.Open(1,19200); // Hier wird der COM Port geöffnet erste Zahl = Comportnummer z.B. COM1, zweite Zahl = Übertragungsrate
    
              char h_str [10]; 
              h_str [1] = 'H';
              h_str [2] = 'A';
              h_str [3] = 'L';
              h_str [4] = 'L';
              h_str [5] = 'O';
    
              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
    
              //printf("%s",h_str);
              //getchar();
    
        COMPort.Close();
        return EXIT_SUCCESS;
    
    }
    

    damit müsste ich eigentlich über COM1 HALLO senden, passt das soweit?
    oder werde ich damit nix erreichen?
    und wenn nicht, wie würds richtig gehen?

    und außerdem, was muss dann der andere PC machen, damit er das empfangen kann?

    lg

    Miguel



  • verdammt - das ding heißt cstdio !! (standard-header haben keine endung!)

    außerdem: nutz cpp-tags - da wird der code au gehighlighted - nicht, wie bei den code-tags -.-

    Zu deinem Interface bzw. der Benutzung an sich:

    char h_str[10];
    strcpy (&h_str[0], "HALLO"); //sieht doch echt hübscher aus, als deins - und es funktioniert :P
    COMPort.SendData(h_str, sizeof(h_str));
    
    /*ich würd dir std::string ans herz legen (so hast du nämlich schon den ersten fehler: die '\0' fehlt
    oder, wenn du binär senden möchtest, dann std::vector <char>
    
    unter der annahme, dass es nur um zeichenketten geht:
    */
    
    std::string str;
    str = "HALLO";
    COMPort.SendData (str, str.length());
    

    allerdings müsstest du davor die länge des folgenden blocks übertragen (auch bei deinem bsp, da der empfänger das ja nicht wissen kann).
    falls du nur strings schicken möchtest, dann würde es auch das terminierungszeichen ('\0' bzw 0) tun, also:

    std::string str ("asd");
    COMPort.SendData (str.c_str(), str.length()+1); //+1 für '\0'
    

    dann könntest du allerdings auch gleich die länge weglassen, da du die ja (indirekt) mitschickst:

    std::string str ("asd");
    COMPort.SendData (str.c_str());
    

    bb

    PS:
    zu Dev C++:
    Es wird seit 2005 nicht mehr weiterentwickelt - nimm code::blocks (den nachfolger) oder den MSVC 2008 Express Edition - oder such nen gcc für windows - ich würd dir allerdings MSVC empfehlen...



  • #include "Serial.cpp"

    *hust* Sowas macht man nicht! Man linkt die Datei bzw kompiliert sie mit aber man included keine .cpp!
    FAQ zu DevCPP: http://www.c-plusplus.net/forum/viewtopic-var-t-is-237002.html
    rya.



  • Ja, das mit Dev habe ich beseitigt!
    habe jetzt Microsoft Visual 2008 express!
    gefällt mir viel besser!
    das programm funktioniert jetzt besser, danke für die verbesserungen!
    nur ne frage noch:
    also, wenn ich es kompiliere jetzt, dann sollte es an die COM1 eigentlich HALLO senden! da es keine fehler gibt, denke ich, es geht auch!
    und wie kann es die andere seite empfangen? muss die dasselbe einfach kompilieren?



  • #include <windows.h>
    #include <stdio.h>
    #include <mmsystem.h>
    #include <cstdlib>
    #include <iostream>
    #include "Serial.h" //einlesen der Headerdatei
    #include "Serial.cpp" //implementieren der .cpp datei
    
    using namespace std;
    
    CSerial COMPort; // für serielle übertragung auf den AVR
    
    //Definieren der variabeln
    unsigned char out_byte; 
    
    int main(int argc, char *argv[])
    {
            COMPort.Open(1,19200);
    		char h_str[10];
    		strcpy (&h_str[0], "HALLO");
    		COMPort.SendData(h_str, sizeof(h_str));
    
    		std::string str ("asd");
    		COMPort.SendData (str.c_str(), str.length()+1);
    		str = "HALLO";
    
    		printf("%s",h_str);
    		getchar();
    
    		COMPort.Close();
    		return EXIT_SUCCESS;
    
    }
    

    so, das wärs jetzt! also ich finde gut so weit!
    nur noch funktionieren muss es!
    wenn es echt geht, dann wär ich sooo froh!



  • Du kannst ruhig sagen, wenn du was nicht verstehst und einfach nur versuchst, es zu copy&pasten...

    aber zu erst mal:
    #include "Serial.cpp" //implementieren der .cpp datei
    so was macht man nicht... die *.cpp ist so aufgebaut:

    /* *.cpp */
    #include "*.h"
    
    //implementation
    

    CSerial COMPort; // für serielle übertragung auf den AVR
    wieso ne globale variable?

    //Definieren der variabeln
    unsigned char out_byte;
    das ist keine definition - das nennt sich deklaration - und du nutzt es nicht mal ^^

    strcpy (&h_str[0], "HALLO");
    COMPort.SendData(h_str, sizeof(h_str));
    
    std::string str ("asd");
    COMPort.SendData (str.c_str(), str.length()+1);
    str = "HALLO";
    

    Du hast keinen Schimmer, oder?!

    bb



  • Hm...
    ja, irgendwie nicht!
    es ist echt ne harte nuss für mich!
    aber ich muss das erledigen und hab keinen dunst von dem!

    naja

    lg

    Miguel



  • Hm...
    Also, ich versuchs nochmal!
    ich habe deine ausbesserungen (danke nochmal) mehr oder weniger eingebaut bzw. verstanden! bis auf das mit den serial.cpp, dass man das nicht einbauen soll!
    nun ist meine frage aber, wie ich, wenn ich es jetzt aussende, auf nem anderen pc wieder empfange!

    lg

    Miguel


Anmelden zum Antworten