Serial Port Programmierung



  • Hey,

    bin grad dabei via libserial unter ubuntu mein virtuellen ComPort anzusprechen.
    Kurz vorweg: Ich habe einen kleinen Mikrocontroller als Serielle Schnittstelle (ComPort) eingerichtet, als PingServer. D.h. er nimmt maximal 1024bytes auf einmal auf und sendet diese gleich weider zurück.
    Ich habe das ganze schon unter diversen SerialTerminals getestet und eine 10_mb_test_file aus Zufallszahlen an den Mikrocontroller gesendet und exakt wieder zurück bekommen. Also müsste von der Hardwareseite aus alles passen..

    Ziel meines kleinen Programms ist es, eben diese 10mb_Datei an den Mikrocontroller zu senden und wieder zu empfangen, und aus den empfangen Daten eine log-Datei mit Zeitstempeln zu erstellen.

    Momentan hackt es aber noch am Anfang.

    Code sieht momentan so aus:

    #include<SerialStream.h>
    #include<cstdlib>
    #include<fstream>
    #include<iostream>
    #include<string>
    #include<sstream>
    using namespace std;
    using namespace LibSerial;
    
    int main(){
    
     //Define SerialStream ser
     SerialStream ser;
     //open ser if possible
     ser.Open("/dev/ttyACM0");
     if ( ! ser.good() )
      {
       cerr << "[" << __FILE__ << ":" << __LINE__ << "] "
        << "Error: Could not open serial port"
        << endl ;
       exit(1) ;
      }
     //set BaudRate of ser, max=115200 
     ser.SetBaudRate(SerialStreamBuf::BAUD_9600);
     if(!ser.good()){
      cerr<<"Error: Cannot set the Baudrade"<<endl;
      exit(1);
     }
     //Setting the character size, 8bit usually
     ser.SetCharSize(SerialStreamBuf::CHAR_SIZE_8);
     //Set number of stopbits
     ser.SetNumOfStopBits(1);
    
     //open testfile
     ifstream myfile;
     myfile.open("frei.mp3",ios::binary|ios::in);
     if(!myfile){
     cerr<<"Could not open file"<<endl;
     exit(1);
     }
     //copy textfile into buffer;
     stringstream strm;
     strm<<myfile.rdbuf();
     string buffer=strm.str();
    
     const int BUFFER_SIZE = 100;
     char input_buffer[BUFFER_SIZE] ;
     char output_buffer[BUFFER_SIZE] ;
    
     for(int i=0;i<BUFFER_SIZE;i++){
      input_buffer[i]=69;
     }
    
      ser.write(input_buffer,BUFFER_SIZE);
      ser.read(output_buffer,BUFFER_SIZE);
      cout<<output_buffer<<endl;
    
     //SerialStream close
     ser.Close();
    }
    

    Ausgabe:

    ....@....-Aspire-X3900:~/Hexagon$ sudo ./a.out 
    EEEEEEEEEEEEEEEE�=`
    

    (Lasst euch von myfile nicht stören, ist ja alles für später.)

    Die Ausgabe ist total komisch oder? Ich sende ein char Array der Größe 100 mit dem Inhalt 'E' und zurück bekomme ich zu wenig 'E'..

    Kann mir hier jemand helfen?


Anmelden zum Antworten