papi Napisano Maj 18, 2022 Udostępnij Napisano Maj 18, 2022 (edytowany) Witam wszystkich. Podczas programowania Arduino do mojego urządzenia napotkałem dziwne zachowanie się dwóch pętli While. Program wykonuje się w pierwszej aby po spełnieniu warunku przejść do drugiej. Niestety program w pętli While 1 wykonuje się bardzo wolno ( co widać na terminalu ), a w drugiej z normalną prędkością. Pomaga usunięcie z pętli linijki sterującej pracą silnika krokowego (co jest nie zrozumiałe dla mnie ponieważ sterowanie powinno się wykonać dopiero po spełnieniu warunku IF, oraz to że kod wewnątrz obu pętli właściwie jest taki sam). Proszę o pomoc bo brakuje i już pomysłów. Poniżej kod o którym mowa: void loop() { while (digitalRead(X_lewy)==HIGH){ Serial.println("While 1"); if (digitalRead(Z_up)==LOW) digitalWrite(12,HIGH); //zezwolenie na ruch stepper 1& 2 {a=a-384;stepper1.runToNewPosition(a); delay (1000);} digitalWrite(12,LOW); //brak zezwolenia na ruch stepper 1& 2 } //////// koniec pętli while 1 ///////// digitalWrite(12,HIGH); //zezwolenie na ruch stepper 1& 2 {d=d+576;stepper2.runToNewPosition(d); delay(200);} digitalWrite(12,LOW); //brak zezwolenia na ruch stepper 1& 2 while (digitalRead(X_prawy) == HIGH){ Serial.println("WHILE 2"); if (digitalRead(Z_up)==LOW) { digitalWrite(12,HIGH); //zezwolenie na ruch stepper 1& 2 {a=a+384;stepper1.runToNewPosition(a); delay (1000);} digitalWrite(12,LOW);} //brak zezwolenia na ruch stepper 1& 2 } //////// koniec pętli while 2 ////////// digitalWrite(12,HIGH); //zezwolenie na ruch stepper 1& 2 {d=d+576;stepper2.runToNewPosition(d); delay(200);} digitalWrite(12, LOW); //brak zezwolenia na ruch stepper 1& 2 } Edytowano Maj 18, 2022 przez Gieneq Link do komentarza Share on other sites More sharing options...
trainee Maj 18, 2022 Udostępnij Maj 18, 2022 48 minut temu, papi napisał: if (digitalRead(Z_up)==LOW) digitalWrite(12,HIGH); Ten warunek steruje tylko wykonaniem tej jednej instrukcji. Link do komentarza Share on other sites More sharing options...
farmaceuta Maj 18, 2022 Udostępnij Maj 18, 2022 Dokladnie jak @trainee napisal...uciekly Ci nawiasy i ciagle masz delay'a w while.. Link do komentarza Share on other sites More sharing options...
trainee Maj 18, 2022 Udostępnij Maj 18, 2022 @papi, jeśli kod ten zaznaczyć w Arduino IDE i nacisnąć Ctrl + T (automatyczne formatowanie), to będzie: void loop() { while (digitalRead(X_lewy) == HIGH) { Serial.println("While 1"); if (digitalRead(Z_up) == LOW) digitalWrite(12, HIGH); //zezwolenie na ruch stepper 1& 2 { a = a - 384; stepper1.runToNewPosition(a); delay (1000); } digitalWrite(12, LOW); //brak zezwolenia na ruch stepper 1& 2 } //////// koniec pętli while 1 ///////// digitalWrite(12, HIGH); //zezwolenie na ruch stepper 1& 2 { d = d + 576; stepper2.runToNewPosition(d); delay(200); } digitalWrite(12, LOW); //brak zezwolenia na ruch stepper 1& 2 while (digitalRead(X_prawy) == HIGH) { Serial.println("WHILE 2"); if (digitalRead(Z_up) == LOW) { digitalWrite(12, HIGH); //zezwolenie na ruch stepper 1& 2 { a = a + 384; stepper1.runToNewPosition(a); delay (1000); } digitalWrite(12, LOW); } //brak zezwolenia na ruch stepper 1& 2 } //////// koniec pętli while 2 ////////// digitalWrite(12, HIGH); //zezwolenie na ruch stepper 1& 2 { d = d + 576; stepper2.runToNewPosition(d); delay(200); } digitalWrite(12, LOW); //brak zezwolenia na ruch stepper 1& 2 } Gdy się przestrzega higieny w formatowaniu kodu, to łatwiej widać strukturę. I błędy w niej. 1 Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
papi Maj 18, 2022 Autor tematu Udostępnij Maj 18, 2022 Ok, wielkie dzięki za okazaną wyrozumiałość i pomoc. Jutro sprawdzę krok po kroku cenne wskazówki. Link do komentarza Share on other sites More sharing options...
papi Maj 18, 2022 Autor tematu Udostępnij Maj 18, 2022 Nie wytrzymałem i zamiast iść spać - sprawdziłem. Wiedząc czego szukać.....w jednym miejscu nie żałowałem nawiasów a w drugim przeciwnie. Teraz wszystko działa tak jak sobie zaplanowałem. Wypróbowałem także wpisanie pętli while w pętlę while i także działa (w necie znalazłem tylko wzmiankę,że tak można). Będę pamiętał o ctl+T. Jeszcze raz wielkie podziękowania za pomoc. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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ę »