• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

QT Creator - pętla główna

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
227 wizyt
pytanie zadane 3 maja 2020 w C i C++ przez Artur05 Nowicjusz (120 p.)

Dzień dobry. Z racji tego, że jest to mój pierwszy post w tym serwisie to witam wszystkich serdecznie. Na imię mam Artur, od momentu jak zobaczyłem na YT kurs jak programować arduino to temat ten bardzo mnie zainteresował.

Rodzice kupili mi Raspberry Pi 3B i piszę prostą aplikację w QT Creator która będzie mi sterować światłem i innymi bajerami w pokoju. 

W "Formularze" mainwindow.ui dodałem sobie przycisk i kod który jest napisany w jego funkcji działa. Tzn kompiluję program, uruchamia się okno z tym przyciskiem i jak w niego kliknę to kod działa.

Chciałbym by pewna część kodu wykonywała się w pętli cały czas nie zależnie od tego czy kliknę jakiś przycisk na ekranie czy nie. W arduino mam pętle główną i nie ma tego problemu a w środowisku QT Creator gdzie bym nie wstawił mojego kodu to on się nie wywołuje.

Dla przykładu weźmy prosty kod który ma ustawić wyjście na stan wysoki gdy przełącznik podłączony do GPIO do wejścia zostanie przełączony i tym samym zewrze + do wejścia.

if (digitalRead(7)==HIGH){

digitalWrite(8,HIGH);

}

Oczywiście mam zdefiniowane że pin 7 to wejście a pin 8 to wyjście. Używam biblioteki WiringPi.

Gdzie tego kodu nie wstawię to on się nie wywołuje, nie działa w pętli. Próbowałem go umieszczać w pliku mainwindow.cpp w miejscu gdzie jest  

MainWindow::~MainWindow()
{

mój kod

delete ui;
}
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent) ,
   ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui0>label->setNum(0);
wiringPiSetup();
zmiennatestowa=0;
pinMode(7, INPUT);
pinMode(8, OUTPUT);

mój kod

}

 Próbowałem też w main.cpp ale tam pokazuje że kod jest błędny i widzę, że każda linijka kończy się ; . Jak wstawię ; to dalej pokazuję że brakuje ;.
Próbowałem też w mainwindow.h ale też pokazuje błędy i sytuacja jak wyżej.

Jak wstawię mój kod w miejsce gdzie jest obsługa przycisku, uruchomię program, przełączę przełącznik i wcisnę ten przycisk na ekranie programu to kod się wywołuje i działa.

void MainWindow::on_pushButton_clicked()

if(digitalRead(7)==HIGH){

digitalWrite(8,HIGH);

}



Czy w tym środowisku jest takie miejsce gdzie kod wykonuje się w pętli ?
Oglądałem tutoriale na YT jak programować w tym QT Creator ale w żadnym z filmików nikt tego nie omawia.


Przepraszam jeśli moje pytanie jest banalne ale w szkole uczą mnie jak obsługiwać painta i jakie są peryferia do komputera...

komentarz 3 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
Petla w arduino dziala tak, ze wykonuje wszystko co jest w petli programu, dziala chyba na zasadzie pollimgu, bynajmiej wydaje mi sie ze tsk dziala petla glowna. Ale zawsze mozna zrobic 2 watki (thread) i w jednym z nich zrobic nie skonczona petle. Nie wiem, czy to pomoze przy Twoim kodzie, bo nie wiem co chcesz zrobic i nie znam tej biblioteki. Co mnie dziwi, to ze nie uzywasz serial portu w arduino i QSerialPort w Qt, do komunikacji miedzy arduino a kompem
komentarz 4 maja 2020 przez TOM_CPP Pasjonat (22,640 p.)

@Artur05, Spróbuj użyć klasy QTimer

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 615 wizyt
pytanie zadane 29 listopada 2020 w C i C++ przez jakis111 Nowicjusz (210 p.)
0 głosów
0 odpowiedzi 113 wizyt
pytanie zadane 22 października 2020 w C i C++ przez Nikto0 Użytkownik (500 p.)
0 głosów
1 odpowiedź 461 wizyt
pytanie zadane 20 lipca 2019 w C i C++ przez Ewaryst Ławecki Obywatel (1,710 p.)

93,437 zapytań

142,431 odpowiedzi

322,671 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...