Serielle Schnittstelle Daten Empfangen/Senden



  • Hallo,

    Ich habe gerade in einem anderen Thread gesehen das auch jemand versucht Daten über die Serielle Schnittstelle zu senden, Ich bin gerade dabei so quasi dasselbe zu basteln. Ich möchte mit einer GUI den Arduino steuern, also Daten empfangen und auch senden. A soll man befehle eintippen können, jedoch sollen auch über Tasten feste befehle gesendet werden, über LEDs (warscheinlich kleine Icons) wird dann ua. der Status angezeigt. Bin leider noch ein ziemlicher Neuling bei Qt (mein erstes Projekt).

    Als Basis dient mir das Terminal beispiel.
    Ein Problem habe ich dort bspw. schon im Design Modus. Dort wird quasi alles als schwarze Terminal fläche genutzt, jedoch hätte ich das Terminal eigentlich einfach als schwarze (oder weisse) Fläche bzw. Textbox im unteren Bereich? Wie verschiebe ich das ganze? Leider ist es keine Box, es wird wohl anscheinend einfach das ganze Fenster genutzt. Wie kann ich das ganze ändern?

    Wenn ich Buttons oder sonstiges in diese gepunktete Fläche ziehe und das Programm dann starte sind diese Buttons nicht vorhanden, meine hinzugefügten Checkboxen in dem "Settingsdialog" jedoch schon, es wird also alles übernommen.

    Grüße


  • Moderators

    Hallo!

    Die Größe und Position von Widgets werden üblicherweise von Layout-Elementen automatisch verwaltet. Guck am besten mal die "Doku":http://qt-project.org/doc/qt-4.8/layout.html hier und dieses "Beispiel":http://qt-project.org/doc/qt-4.8/examples-layouts.html an.

    Gruß!



  • Hi, Danke für die schnelle Antwort.

    Ich habe mittlerweile herausgefunden das es am QPlainTextEdit liegt, dies füllt einfach automatisch die komplette Fläche aus. QPlainTextEdit wird einfach in der Console Klasse gestartet und überdeckt alles was man sich im UI Editor zurecht gebastelt hat.

    Nun suche ich eine Möglichkeit dieses QPlainTextEdit das durch Console erzeugt wird zu entfernen und den Text in eine Textbox (auch PlaintTextEdit?) umzuleiten welche ich im UI Editor eingefügt habe.

    EDIT: Gerade herausgefunden das die UI einfach mit folgendem befehl überschrieben wurde:
    @setCentralWidget(console);@

    Nungut, jetzt geht es daran meinen Text in meine UI TextEdit zu schreiben :)

    EDIT2: So, es funktioniert nun, musste ja einfach nur @ui->textBox->append(data);@ in die readData funktion einfügen.

    Nun habe ich folgendes "Problem", das ist mir schon beim Console beispiel aufgefallen, irgendwie wird nicht der komplette String empfangen, bzw zwischendurch kommt eine Leerzeile (?). Kann auch am Arduino Code liegen, denn ich sende einmal etwas per print() und darauffolgend mit println() (sodass er am Ende einen Zeilenumbruch mitsendet).

    Momentan kommt es nämlich so an:
    @Num
    mer:
    89

    Numm
    er:
    90

    Nu
    mmer
    : 91

    @
    Es sollte jedoch so aussehen:
    @
    Nummer: 89
    Nummer: 90
    Nummer: 91
    @

    EDIT3:
    Problem gelöst indem ich einfach die Baudrate auf 115200 hochgesetzt habe :)

    So, hoffe das hilft!



  • Ich erstelle doch nochmal einen neuen Reply da ich oben das Problem mit dem abgeschnittenen Text doch noch nicht gelöst hattee. Wie mir gerade aufgefallen ist, triggert readyRead() wenn mindestens ein Byte im Buffer ist, dadurch wird meine funktion mehrfach und auch nur mit Bruchstücken aufgerufen...
    Hinzu kommt das ich mein Gerät später mit 9600 Baud betreiben muss....

    Dazu habe ich mir folgende Funktion gebastelt, diese habe ich mit längeren Datenblöcken bis hinunter auf 600 Baud getestet. Als Trennvariable nutze ich das &

    @while (serial->bytesAvailable()!=0){
    QByteArray data = serial->read(1);
    if (data.contains("&"))
    {
    tempString = tempString + "\n";
    logString =tempString + logString;
    tempString = "";
    }
    else {
    tempString += data;
    }
    }@


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.