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
Link to post
Share on other sites

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ś? 

Link to post
Share on other sites
(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
Link to post
Share on other sites
(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
Link to post
Share on other sites
(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
Link to post
Share on other sites

@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.

Link to post
Share on other sites

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
Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.