Skocz do zawartości

Matthew11

Użytkownicy
  • Zawartość

    168
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    8

Matthew11 zajął 1. miejsce w rankingu.
Data osiągnięcia: 23 lipca 2021.

Treści użytkownika Matthew11 zdobyły tego dnia najwięcej polubień!

Reputacja

213 Mistrz

1 obserwujący

O Matthew11

  • Ranga
    5/10

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Kraków
  • Programuję w
    C, C++

Ostatnio na profilu byli

5 597 wyświetleń profilu
  1. Nie dodałeś importu modułu w pliku .pro. Czyli system budowania - qmake - nie wie,że ma ładować nagłówki i linkować moduł QSerialPort. W linii QT += core gui dodaj serialport
  2. Prawdopodobnie nie kliknąłeś modułu QSerialPort przy instalacji albo nie dodałeś do pliku .pro modułu serialport. To pierwsze rozwiążesz uruchamiając narzędzie Qt Maintenance Tool i w danej wersji Qt w podzakładce Additional Libraries kliknij Qt Serial Port. Od którejś wersji Qt dodatkowe moduły trzeba "ręcznie" wybrać przy instalacji.
  3. Sprawdź TyTools - działa na OS X. Używam tego narzędzia od dawna.
  4. To wskazuje, że aplikacja wysyła dane poprawnie - skoro dioda RX miga, a to implikuje, że problem może być jednak po stronie programu na Arduino. Ja w takich sytuacjach polecam na szybko sklecić program typu "echo" (1). Czyli na Arduino każdy znak, która odbierasz odsyłasz z powrotem. Do testu weź jakikolwiek monitor portu szeregowego TeraTerm czy nawet monitor wbudowany w Arduino IDE - efekt powinien być taki, że dokładnie to samo co wyślesz powinno wrócić do monitora portu - wtedy wiesz, że Twój program na mikrokontrolerze poprawnie odbiera i wysyła dane - i dopiero wtedy można szukać dalej.
  5. @dzemdobrek Twój problem nie dotyczy wgrywania programu tylko występuje już na etapie kompilacji (a dokładnie linkowania). Wygląda to na taką sytuację w której masz plik main.cpp (z funkcjami loop() i setup()) właściwego projektu i masz też drugi plik, ale o innej nazwie, który też zawiera funkcje setup() i loop(). Natomiast wadą i równocześnie zaletą PlatformIO jest to, że kompiluje on wszystkie pliki źródłowe jakie napotka w projekcie - dlatego jeśli masz taką sytuację w której przekopiowałeś pliki jednego projektu do drugiego i zmieniłeś nazwę pliku main.cpp z tego drugiego projektu to będz
  6. @morteusz Udało się? Jeśli jednak się nie udało to: Sprawdź po której stronie jest problem po stronie płytki czy aplikacji - do każdej części kursu na samym jego dole jest link do pobrania gotowych programów z kursu. Zobacz czy na projekcie z kursu wszystko działa poprawnie, jeśli nie to problem jest albo w a) wersji Qt albo b) po stronie płytki. Jeśli na projekcie z kursu też nie działa to użyj jakikolwiek monitor portu szeregowego np. popularny TeraTerm i zobacz czy on jest w stanie się połączyć z portem i coś wysłać lub coś odbierać z płytki. Jeśli TeraTerm sobie ni
  7. Matthew11

    Tablice dynamiczne c++

    Tak jak napisał @ethanak jeśli nie będziesz zmieniał kompilatora (np. pod MSVC tego nie skompilujesz) lub nie będziesz używał flag, które wyłączają rozszerzenia (--pedantic) możesz zostawić program tak jak jest. Ja mimo wszystko użyłbym tablicy o wystarczającym do tego zadania rozmiarze - raczej jesteś w stanie określić jaki rozmiar będzie miał pakiet.
  8. Matthew11

    Tablice dynamiczne c++

    Oczywiście w zależności od przypadku użycia możemy na wszystko odpowiedzieć "to zależy". Natomiast w tym konkretnym przypadku - czyli zapisywaniu odebranych danych w jakimś buforze - prawdopodobnie najlepszą opcją pozostaje skorzystanie ze statycznego bufora. Nie mniej kiedy, nie mamy innej możliwości i pozostaje tylko dynamiczna alokacja pamięci i dodatkowo mamy dostępny C++11 wtedy inteligentne wskaźniki są według mnie bezpieczniejszą opcją niż użycie naked new/delete (czy malloc/free) - mniej wycieków pamięci i mniej problemów z ręcznym jej zwalnianiem.
  9. Matthew11

    Tablice dynamiczne c++

    Jak mówimy o C++ i kompilator ma dostępny C++11 to możemy wykorzystać dobrodziejstwa smart pointerów (a konkretnie std::unique_ptr) do dynamicznej alokacji, żeby potem nie musieć ręcznie zwalniać pamięci. auto charArray = std::unique_ptr<char[]>(new char[10]); std::unique_ptr ma metodę get(), która zwraca klasyczny wskaźnik do zaalokowanego zasobu. Pełny przykład: #include <memory> #include <iostream> class Test { public: Test() { std::cout << "ctor\n"; } ~Test() { std::cout << "dtor\n"; } }; int main() { auto testArray = std::uni
  10. Jeśli jakieś biblioteki załóżmy, że jedna z nich to będzie SoftwareSerial i będzie jeszcze jakiś HardwareSerial i BetterSerial to jeżeli każda z nich dziedziczy po jakieś klasie strumienia np. arduinowy Stream to wtedy Ty w swojej bibliotece/programie, możesz bazować na interfejsie (tak się na to ładnie mówi) jaki daje klasa Stream. Wtedy: class Test // BasedOnStream { public: Test(Stream& stream): m_stream{stream} {} private: Stream& m_stream; }; Jednym z ograniczeń jest to, że do dyspozycji masz tylko metody klasy Stream. I nie będziesz mógł korzystać z jakiś specja
  11. Na dwa sposoby, wskaźnikiem lub referencją. Najbezpieczniej za pomocą referencji i w konstruktorze klasy np.: class Test { public: Test(SoftwareSerial& softwareSerial): m_softwareSerial{softwareSerial} {} private: SoftwareSerial& m_softwareSerial; }; Albo rzeczonym wskaźnikiem: class Test { public: Test(SoftwareSerial* const softwareSerial): m_softwareSerial{softwareSerial} {} private: SoftwareSerial * const m_softwareSerial; }; * const po to żeby nie zrobić sobie krzywdy np. w ten sposób: m_softwareSerial++; Zastosowanie: SoftwareSerial s
  12. Rozumiem, że nie chcesz uzależnić biblioteki od funkcji w kodzie głównym, tylko przekazać tą funkcje z kodu głównego do biblioteki. Jeśli tak to rozwiązań jest w sumie dwa - pierwsze z użyciem wskaźników na funkcje (C style), drugie z wykorzystaniem std::function (modern C++ style). #include <functional> #include <iostream> class Test { public: Test(std::function<void(void)> callbackOne, void (*callbackTwo)()) : m_callbackOne{callbackOne}, m_callbackTwo{callbackTwo} { } void call() { m_callbackOne(); m_callbackTwo(); } private:
  13. @MateoS07 W takiej formie jak w kursie (klasy przeznaczone do BT Classic) zapewne nie połączysz się z tym modułem - ale nie zaszkodzi sprawdzić analizując ewentualne błędy raportowane przez biblioteki Qt. Wypróbuj też aplikację BLE Scanner (Scan, Connect, Find Lost BLE Devices) powinna Ci ona podpowiedzieć co Twój moduł oferuje. BLE opiera swoje działanie o usługi i charakterystyki (services and characteristics) - więcej o tym w tym poradniku - a przeglądając dokumentację Twojego modułu można tam doszukać się informacji o czymś podobnym. Ciebie zapewne interesuje usługa o nazwie UAR
  14. @jugan1 masz rację co do tego, że wykorzystanie qDebug() opóźnia emisję sygnału - jak każda operacja I/O w programie, a taką jest użycie qDebug(). Nie mniej to opóźnienie jest na tyle małe, że nie ma wpływu - należałoby to sprawdzić, ale pewnie doliczenie do 100'000 generuje "większe opóźnienie" niż wywołanie qDebug(). Możesz usunąć tę linię kodu i sprawdzić jak wtedy działa program - nie powinno być żadnej różnicy (przynajmniej na moim sprzęcie nie ma). To co tutaj "robi robotę" to wyłącznie to, że heavyCalculations() nie jest wykonywane w wątku GUI - dzięki czemu pętla for nie blokuje
  15. Pewnego pięknego razu zdecydowaliśmy w firmie, że argumenty funkcji i zmienne lokalne nazywamy właśnie od _ i... do dzisiaj żałuję tej decyzji. Gdyby tyczyło się to tylko memberów to byłoby to na plus. Ale gdy mowa o argumentach i zamiennych lokalnych to po prostu dodaliśmy sobie pracy. Dlatego obecnie jestem za szkołą m_ i tylko do memberów a wszystko inne bez żadnych dodatków.
×
×
  • 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.