Skocz do zawartości

Uzależnienie wykonania funkcji od drugiej funkcji[Uwaga, świeżak]


PeEs

Pomocna odpowiedź

Zaczynam zabawę z Arduino, choć coś tam pamiętam sprzed lat z TurboPascala. Robię sobie programik do windy od nawigacji w aucie i doszedłem do ściany. Szukałem w sieci, ale jakoś nie mogę sobie tego co znalazłem ułożyć.

Ale do clue problemu.

Mam program wykonujący w pętli loop dwie pary funkcji IF. Obie pary wykonują to samo, tylko dla innych zmiennych. Jednak chcę uzależnić wykonanie drugiej pary od tego czy jedna z funkcji pierwszej pary została wykonana czy nie.

Link do komentarza
Share on other sites

Co to są "funkcje if"? Rozumiem, że masz na myśli warunki?

Tutaj masz przykład dwóch warunków, z których drugi się wykona tylko wtedy, kiedy wykonał się pierwszy:

if (x == 3) {
   Serial.println("pierwszy");
}
if (x == 3 && y == 2) {
       Serail.println("drugi");

}

Mam nadzieję, że to pomoże?

Polecam też zainteresowanie się jakimkolwiek kursem programowania, choćby na tym forum. Powinno to znacznie pomóc z tym i podobnymi problemami.

Link do komentarza
Share on other sites

Co to są "funkcje if"? Rozumiem, że masz na myśli warunki?

Polecam też zainteresowanie się jakimkolwiek kursem programowania, choćby na tym forum. Powinno to znacznie pomóc z tym i podobnymi problemami.

Kurs Forbota to było pierwsze od czego zacząłem, plus inne blogi i strony. Napisałem pierwszy kod, jest jeszcze nawet nie przetestowany. I tak będę go wrzucał w kontroler po kawałku, ale że mam chwilę czasu, a nie mam teraz dostępu do kontrolera, chcę rozwiązać inne problemy.

void setup() {
 pinMode(2, INPUT_PULLUP); //włącznik
 pinMode(3, INPUT_PULLUP); //krańcówka dół
 pinMode(4, INPUT_PULLUP); //krańcówka góra
 pinMode(5, OUTPUT); //mostek H
 digitalWrite(5, LOW);
 pinMode(6, OUTPUT); //mostek H
 digitalWrite(6, LOW);
 pinMode(7, INPUT_PULLUP); //plus po stacyjce
 pinMode(8, INPUT); //wsteczny


 if (digitalRead(3) == LOW && digitalRead(4) == LOW) { //jeśli obie krańcówki nie wciśnięte
digitalWrite(5, LOW); // jedź do dołu
digitalWrite(6, HIGH);
while(digitalRead(3) == HIGH);{ //gdy krańcówka dół wciśnięta zatrzymaj
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}
 }
}

void loop() {

if (digitalRead(2) == HIGH && digitalRead(4) == HIGH) { //jeśli przycisk wciśnięty i krańcówka góra wciśnięta
   digitalWrite(5, LOW); // jedź do dołu
   digitalWrite(6, HIGH);

    while(digitalRead(3) == HIGH);{ //gdy krańcówka dół wciśnięta zatrzymaj
          digitalWrite(5, LOW);
          digitalWrite(6, LOW);
}
}

if (digitalRead(2) == HIGH && digitalRead(3) == HIGH) { //jeśli przycisk wciśnięty i krańcówka dół wciśnięta
    digitalWrite(5, HIGH); // jedź do góry
    digitalWrite(6, LOW);

     while(digitalRead(4) == HIGH);{ //gdy krańcówka góra wciśnięta zatrzymaj
           digitalWrite(5, LOW);
           digitalWrite(6, LOW);
}
}

if (digitalRead(8) == LOW && digitalRead(3) == HIGH) { //jeśli wsteczny wyłączony i krańcówka dół wciśnięta
    digitalWrite(5, HIGH); // jedź do góry
    digitalWrite(6, LOW);

     while(digitalRead(4) == HIGH);{ //gdy krańcówka góra wciśnięta zatrzymaj
           digitalWrite(5, LOW);
           digitalWrite(6, LOW);
}
}

if (digitalRead(8) == HIGH && digitalRead(4) == HIGH) { //jeśli wsteczny włączony i krańcówka góra wciśnięta
    digitalWrite(5, LOW); // jedź do dołu
    digitalWrite(6, HIGH);

     while(digitalRead(3) == HIGH);{ //gdy krańcówka dół wciśnięta zatrzymaj
           digitalWrite(5, LOW);
           digitalWrite(6, LOW);
}
} 
}

I teraz tak, potrzebuję ustawić to w ten sposób, że po wykonaniu pierwszego warunku nie będą się wykonywały trzeci i czwarty. Za to wykonają się, gdy wykonał się warunek drugi.

Link do komentarza
Share on other sites

Może tak

boolean wykonaj=0;
   void loop() {

   if (digitalRead(2) == HIGH && digitalRead(4) == HIGH) { //jeśli przycisk wciśnięty i krańcówka góra wciśnięta
       digitalWrite(5, LOW); // jedź do dołu
       digitalWrite(6, HIGH);
       wykonaj=0;
        while(digitalRead(3) == HIGH);{ //gdy krańcówka dół wciśnięta zatrzymaj
              digitalWrite(5, LOW);
              digitalWrite(6, LOW);
    }
    }

    if (digitalRead(2) == HIGH && digitalRead(3) == HIGH) { //jeśli przycisk wciśnięty i krańcówka dół wciśnięta
        digitalWrite(5, HIGH); // jedź do góry
        digitalWrite(6, LOW);
        wykonaj=1;     
         while(digitalRead(4) == HIGH);{ //gdy krańcówka góra wciśnięta zatrzymaj
               digitalWrite(5, LOW);
               digitalWrite(6, LOW);
    }
    }

    if (digitalRead(8) == LOW && digitalRead(3) == HIGH && wykonaj) { //jeśli wsteczny wyłączony i krańcówka dół wciśnięta
        digitalWrite(5, HIGH); // jedź do góry
        digitalWrite(6, LOW);

         while(digitalRead(4) == HIGH);{ //gdy krańcówka góra wciśnięta zatrzymaj
               digitalWrite(5, LOW);
               digitalWrite(6, LOW);
    }
    }

    if (digitalRead(8) == HIGH && digitalRead(4) == HIGH && wykonaj) { //jeśli wsteczny włączony i krańcówka góra wciśnięta
        digitalWrite(5, LOW); // jedź do dołu
        digitalWrite(6, HIGH);

         while(digitalRead(3) == HIGH);{ //gdy krańcówka dół wciśnięta zatrzymaj
               digitalWrite(5, LOW);
               digitalWrite(6, LOW);
    }
    }
   }
Link do komentarza
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

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