Skocz do zawartości

Kurs Qt – #2 – komunikacja z Arduino przez UART


Pomocna odpowiedź

@Dejwuch Jeśli dobrze zrozumiałem w czym problem to szukasz czegoś takiego:

#include <iostream>

class DummyQIODevice
{
public:
    int write(const char *data, int maxSize = 1)
    {
        m_data = *data;

        return maxSize;
    }

    int read(char *data, int maxSize = 1)
    {
        *data = m_data;

        return maxSize;
    }

private:
    char m_data{0};
};

int main()
{
    constexpr unsigned char dataToWrite = 0x15; // 21 (DEC)
    DummyQIODevice device;
    device.write(reinterpret_cast<const char *>(&dataToWrite));

    unsigned char readedData = 0;
    device.read(reinterpret_cast<char *>(&readedData));

    std::cout << "Did I read the same value? " << std::boolalpha << (readedData == dataToWrite)
              << " dataToWrite = " << static_cast<int>(dataToWrite)
              << " readedData = " << static_cast<int>(readedData) << '\n';

    return 0;
}

DummyQIODevice stworzone tylko po to, żeby pokazać mechanizm. 

dataToWrite - może być równie dobrze typu char lub uint8_t, nie ma to większego znaczenia ciągle to jest jakiś bajt. Ale żeby to zadziałało to typy muszą się zgadzać więc dlatego trzeba tam wjechać z reinterpret_cast, albo dataToWrite musi być typu const char.

Czy to rozwiązuje Twój problem? Jeśli nie to podrzuć jakieś minimal example Twojego programu - będzie łatwiej.

  • Lubię! 1
  • Pomogłeś! 1
  • 2 tygodnie później...
  • 1 miesiąc później...

Cześć. Według kursu trzeba użyć klasy QSerialPortInfo. Próbowałem zrobić wszystko tak jak jest tam napisane, ale wyskakiwał mi błąd. Pobrałem pliki załączone do kursu, próbuje uruchomić i wyskakuje mi dużo błędów:  

 Project ERROR: Unknown module(s) in QT: serialport

 QSerialPortInfo' file not found

i wiele innych które są na imgur https://imgur.com/a/wjm06Ng. Wygląda to tak, jakbym nie miał na swoim dysku pliku klasy QSerialPortInfo. Nie wiem dlaczego tak jest, mam Qt w wersji 6.0, czyli najnowszą, bo tak pisało w kursie. Zainstalowałem wszystkie pliki oprócz nie potrzebnych kompilatorów. Pomoże mi ktoś? 

(edytowany)

@zsakul009 Wszystko zrobiłeś dobrze. Natomiast problem stanowi tutaj Qt. 

21 minut temu, zsakul009 napisał:

mam Qt w wersji 6.0

Qt6 jest co prawda najnowszą wersją ale faktycznie jest to na razie beta. Wiele modułów jak np. serialport nie są jeszcze zaimplementowane/obsłużone w wersji 6.

Dlatego rozwiązaniem Twojego problemu jest zainstalowanie najnowszej wersji Qt ale wersji oznaczonej numerem 5.

P.S. dopiero wersja Qt 6.2 (prawdopodobnie) będzie posiadała wszystkie moduły.

Edytowano przez Matthew11
  • Lubię! 2
(edytowany)
27 minut temu, Matthew11 napisał:

zainstalowanie najnowszej wersji Qt ale wersji oznaczonej numerem 5.

Próbowałem to zrobić. Z instalatora online Instalowało mi się 4h do 20% więc zwątpiłem. Pobrałem z instalatora offline i dzieje się to samo. Spróbuje odinstalować wszystko co związane z Qt na dysku, i pobiorę wersje 5.

Edit. I co mam zaznaczyć oprócz kompilatora żeby mieć wszystkie biblioteki i wszystko co potrzebne?

 

 

Pozdrawiam.

Edytowano przez zsakul009
(edytowany)

@zsakul009

Na Linuxie instaluje tylko:

1572184153_Screenshotfrom2021-01-1215-41-46.thumb.png.b4c953d6ba789ca582decf2f15b8a1cc.png

Kompilator - GCC - mam pobrany przez menedżer pakietów.

Na Windowsie:

1.thumb.png.578e5531909afb382e8d2b77c59c9f4d.png2.thumb.png.c9e2afe67c61f6c80ce62f5cbd2069e1.png

Na Windowsie ja mam akurat pobrane Qt (to jest faktyczna biblioteka Qt) dla MinGW i MSVC - jak nie masz takiej potrzeby nie musisz pobierać Qt dla MSVC. Dodatkowo w Developer and Designer Tools możesz (a właściwie instalator robi to domyślnie) pobrać kompilator -MinGW - co jest najwygodniejszą opcją. 

Edytowano przez Matthew11
Dodano konfigurację dla Windows
  • Lubię! 1
  • Pomogłeś! 1

@Matthew11 Dziękuje ci naprawdę! Tak jak pisałem wcześniej usunąłem wszystko co związane z Qt i zainstalowałem od nowa wersje 5.15.2 i MinGW. Po pierwszym teście klasa QSerialPortInfo działa! Dzięki.

  • 4 tygodnie później...

Super kurs, dzisiaj zacząłem i jak na razie wszystko jest dla mnie jasne, mimo mojej kiepskiej znajomości CPP i ogólnie informatyki.

Chciałem tylko zwrócić uwagę na małego buga - gdy będziemy wybierać przycisk szukaj więcej niż raz, to wszystkie dostępne porty będą się wielokrotnie powtarzać w ComboBoksie.

 

Poradziłem se z tym w ten sposób.

void MainWindow::on_pushButtonSearch_clicked()
{
   .....

    while(ui->comboBoxDevices->count()!=0){

       ui->comboBoxDevices->removeItem(0);
    }



   ....
}

W metodzie on_pushButtonSearch_clicked() wstawiłem pętlę while przed pętlą for dodającą nowe porty.

Pętla sprawdza ile elementów zawiera ComboBox i będzie usuwało element zerowy tak długo, aż liczba elementów nie będzie wynosić 0. Z racji tego, że po każdym wykonaniu instrukcji w pętli rozmiar comboboksa zmniejsza się o 1, było problematyczne dla mnie zrobienie tego w pętli for.

 

Pozdrawiam autora i mam nadzieję, że bug nie pojawił się już na którejś ze wcześniejszych stron.

  • Lubię! 2
  • 9 miesiące później...

proszę o błyskawiczną pomoc. robiłem tak jak robić miałem i nagle mi nie wykrywa biblioteki serial port. załączyłem screeny. nazwy buttonów są inne ale reszta jak w kursie. podejrzewam że tą bibliotekę trzeba zwyczjnie zainstalować ale nie wiem jak to zrobić. proszę o szybką pomoc bo aplikacja jest robiona dla robota na zawody robomotion a czasu już niewiele😬

testowy-komunikacjaUART_0_mainwindow.cpp @ testowy-komunikacjaUART_0 - Qt Creator 06.11.2021 19_51_41.png

testowy-komunikacjaUART_0_mainwindow.cpp @ testowy-komunikacjaUART_0 - Qt Creator 06.11.2021 19_51_54.png

Raczej nic nie powinno się doinstalowywać. W pliku z rozszerzeniem pro masz dodany port szeregowy poprawnie.
Nie pamiętam dlaczego, ale ja w projekcie sprzed dwóch lat używałem coś takiego:
 

#include "QtSerialPort/qserialportinfo.h"


Możesz spróbować, może zadziała.

9 minut temu, erulission napisał:

Podczas instalacji Qt musisz zaznaczyć moduł SerialPort 🙂 może tego ci brakuje. Odpal Qt Maintenance Tool i doinstaluj brakujący element

image.thumb.png.8bae4f0082ae87471868099cc20673bd.png

a gdzie znaleźć Qt Maintenance tool (jak głupie pytanie to nie bijcie)

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...